2009-07-29 23 views
8

Điều này có thể phù hợp hơn với tư cách là vấn đề trong bất kỳ trình theo dõi vấn đề/Git nào, nhưng tôi nghĩ tôi sẽ nhận được xác nhận/giải thích SO trước tiên:Git có xử lý thêm/xóa dưới dạng đổi tên không?

Tôi có một gói theo dõi.

Giả sử foo-1.0.exe đã có trong repo.

Tôi hiện thêm foo-2.0.exe vào cùng thư mục (git add foo-2.0.exe). Tiếp theo, tôi xóa foo-1.0.exe (git rm foo-1.0.exe).

Tôi mong trạng thái Git hiển thị cho tôi một tệp được thêm và một tệp đã xóa. Thay vào đó, tôi có được điều này:


Mở chi nhánh chủ
Những thay đổi được cam kết:
(sử dụng "git reset ĐẦU ..." để unstage)
đổi tên: foo-1.0.exe - > foo2.0.exe

Đó là một WTF cho tôi ... là Git sử dụng một số loại phỏng đoán để đoán 2.0 là bản cập nhật lên 1.0 ... Tôi có thể thấy điều đó có ý nghĩa như thế nào, nhưng tôi đừng nghĩ rằng tôi muốn nó làm điều đó trong trường hợp này.

+1

btw, tôi chỉ sử dụng kiểm soát phiên bản cho mã nguồn. miễn là bạn có một hệ thống xây dựng tốt, các tệp thi hành phải được sao chép – yairchu

+0

Ha ha. Vâng, tôi biết - đó là cách NÊN được thực hiện. Một cú nhấp chuột-xây dựng ưa thích của bạn không được chào đón xung quanh các bộ phận này - cung cấp cho chúng tôi một thập kỷ hoặc lâu hơn. (cộng với một số trình cài đặt là ứng dụng của bên thứ ba) – fakeleft

Trả lời

15

Bạn đúng là Git đang sử dụng phương pháp phỏng đoán. Git chỉ theo dõi nội dung, do đó, kho lưu trữ chỉ biết rằng đã từng là foo-1.0.exe và hiện tại có foo-2.0.exe. Trong trường hợp của bạn, git status đang sử dụng thông tin có sẵn để đoán rằng có thể đã có đổi tên (cộng với một số thay đổi nhỏ, hai tệp của bạn có thể khá giống nhau). Dự đoán này sẽ không ảnh hưởng đến những gì được ghi trong kho lưu trữ.

Triết lý chỉ theo dõi nội dung và không đồng bằng cho phép Git phát triển và cung cấp các công cụ tốt hơn và tốt hơn để điều hướng lịch sử kho lưu trữ. Cuối cùng, Git sẽ cung cấp một cách để theo dõi sự tiến hóa của một bit cụ thể của mã, ở hàm hoặc thậm chí mức dòng, thông qua đổi tên hoặc tái cấu trúc hoặc bất kỳ sửa đổi mã nào khác. Điều này có thể được thực hiện mà không cần kho lưu trữ thông tin này trước.

+0

Bạn có thể đã định cấu hình Git để tự động phát hiện các đổi tên ('diff.renames'). –

+0

@Jakub - nếu hoạt động như mong đợi, bạn có thể muốn nhận xét của mình làm câu trả lời để tôi có thể chấp nhận. Tôi sẽ kiểm tra nó sớm thôi. Greg, cảm ơn thông tin chi tiết tổng thể. – fakeleft

+0

Vâng ... ừm ... trong trường hợp của tôi git là hoàn toàn sai và nó sẽ là tuyệt vời để biết làm thế nào để ngăn chặn một điều như vậy xảy ra. –

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