2015-04-23 14 views
9

Tôi duy trì tệp sql di chuyển cơ sở dữ liệu.Trong git làm thế nào để tìm ra những tập tin đã được thêm vào sau một thẻ cụ thể?

Tôi thẻ cam kết của tôi với thẻ git.

Giả sử tôi có thẻ như 1, 1.1, 1.2, 1.3

Tôi chỉ muốn thay đổi một (DB di cư sql script) nộp khi không có thẻ đã được thêm vào repo sau khi tập tin được tạo ra. Làm thế nào tôi có thể tìm thấy điều này?

Nếu tệp được tạo và sau đó thẻ (phiên bản) được thêm vào thì tôi không muốn sửa đổi tập lệnh di chuyển sql đó, thay vào đó tôi sẽ thêm tệp sql hoàn toàn mới giúp tôi làm những gì tôi muốn.

+2

Vì vậy, về cơ bản, bạn muốn xem danh sách các tập tin được thêm từ thẻ cuối cùng, đúng không? – choroba

+0

@ user494461 Tôi nhận thấy bạn đã thêm tiền thưởng. Bạn có thể làm rõ câu hỏi của bạn để chỉ ra những gì bạn đang tìm kiếm và tại sao câu trả lời hiện tại không bao gồm nó? – bcmcfc

Trả lời

9

Bạn có thể sử dụng git diff với một số grepping như sau:

git diff --name-status your-tag..HEAD | grep ^A

Điều này có nghĩa:

"làm cho tôi sự khác biệt giữa your-tagHEAD, cho thấy tên tập tin và tình trạng của nó (thêm , sửa đổi, xóa, tạo). "

Grep sau đó lọc nó thành các tệp đã được thêm vào, trong đó --name-status cho biết bằng cách bắt đầu dòng với một u ppercase "A".

1

Để tự động tìm các từ khóa mới nhất, bạn có thể sử dụng lệnh sau:

git describe $(git rev-list --tags --max-count=1) 

Sau đó, lệnh diff sẽ cung cấp cho bạn một danh sách các tập tin được thêm vào giữa hai cam kết:

git diff --diff-filter=A --name-only $start_commit_id $end_commit_id 

More các tùy chọn có thể được thêm vào bộ lọc diff, ví dụ --diff-filter=AR sẽ liệt kê các tệp đã được [A] dded plus [R] được đặt tên. Bây giờ nếu bạn đặt cả hai lệnh với nhau, bạn sẽ nhận được danh sách các file từ thẻ cuối cùng, bất kể những gì các nhãn thẻ cuối cùng là:

git diff --diff-filter=A --name-only $(git describe 
    $(git rev-list --tags --max-count=1)) HEAD 
Các vấn đề liên quan