2013-04-23 28 views
7

Tôi đang sử dụng Git để theo dõi các thay đổi đối với cấu hình XML cho máy ảo. Nhiều cấu hình XML tương tự nhau, chỉ với một vài trường khác nhau. Tôi thường xóa các cấu hình VM và thêm các cấu hình mới. Khi thêm những thay đổi này vào repo, Git coi nó như là một sự đổi tên tập tin, chỉ với một vài thay đổi. Tôi có thể thấy lý do tại sao git sẽ làm điều này, và hiểu nó là trường hợp sử dụng.Ngăn không cho git xử lý xóa & tệp mới w/thay đổi khi di chuyển

Tôi tự hỏi nếu có cách nào để ngăn chặn điều đó và thay vào đó, hãy sử dụng git để xử lý việc xóa tệp bằng cách tạo tệp mới thay thế. Khi xem nhật ký cam kết, sẽ dễ dàng hơn để phân biệt "oh, có vẻ như vào ngày này tôi đã xóa VM này và tạo một máy ảo mới"

+1

Xóa tệp; cam kết thay đổi của bạn. THEN thêm tập tin mới, và cam kết nó. – mah

Trả lời

11

Đổi tên chỉ là một cái gì đó được hiển thị trong đầu ra, nội bộ chúng được lưu trữ giống như việc xóa và tạo thường xuyên.

Nếu bạn muốn vô hiệu hóa việc phát hiện lại tên, bạn có thể sử dụng tùy chọn --no-renames:

git log --stat --no-renames 

(cũng làm việc với git diff, git show, vv)

Nếu bạn không muốn thêm tùy chọn này mọi lúc, bạn có thể thêm tùy chọn này vào cấu hình của mình:

git config diff.renames false 
+0

Thật không may tôi đang phải đối mặt với một tình huống mà điều này không hoạt động. Có một kho lưu trữ để đánh giá mã. Một thư mục được tạo trước đó chứa các tệp tương tự như các thư mục được tạo mới đang hiển thị khi được di chuyển trong yêu cầu kéo. Điều này là không mong muốn và sẽ không nhận được một đánh giá mã thông qua. Ban đầu tôi đã đặt lại tên git config thành false trong nhánh nội bộ của mình trước khi đẩy các thay đổi, nhưng điều đó không giải quyết được gì. Chúng vẫn hiển thị dưới dạng tệp được di chuyển trong phần khác. Bất kỳ ý tưởng? – fayyazkl

+0

@fayyazkl Không có ý kiến, xin lỗi. Tùy chọn 'git config diff.renames' chỉ được sử dụng khi tính toán diff để hiển thị nó, không phải khi commit hoặc push, vì vậy nếu bạn muốn nó có hiệu quả, nó sẽ được thêm vào hệ thống review code ... có lẽ là ý tưởng tồi trong trường hợp chung. IMHO, bạn chỉ nên giải thích lý do tại sao điều này hiển thị theo cách này trong PR của bạn, và hy vọng rằng người đánh giá hiểu cách đổi tên công việc trong git ... – Schnouki

+0

Cảm ơn rất nhiều @Schnouki - vâng tôi đã cố gắng một lúc rồi từ bỏ. Đã làm chính xác giống như bạn đã đề xuất. Nó chỉ làm cho việc xem xét mã hơi khó khăn cho người khác. Nhưng đưa ra một bình luận giải thích đó là cách tốt nhất để làm điều đó. – fayyazkl

3

Đừng lo lắng, Git chỉ hiển thị thay đổi là đổi tên vì nó trông như đổi tên. Nó không lưu trữ nó như một sự đổi tên vì không có cách nào để Git làm điều này. Đổi tên phát hiện xảy ra trên màn hình cam kết, không phải lúc ghi hình.

Bạn có thể sử dụng git show --no-renames để tránh phát hiện đổi tên ngay cả khi bạn bật tính năng này theo mặc định.

Các vấn đề liên quan