loại này của vấn đề thường gây ra bằng cách cố gắng để kéo từ một kho lưu trữ có hai tên tập tin mà chỉ khác nhau trong trường hợp. Nếu bạn đang ở FAT, NTFS trong chế độ không phân biệt dạng chữ (về cơ bản, bất kỳ lúc nào nó được sử dụng trong Windows), hoặc HFS + trong chế độ phân biệt dạng chữ và có hai tệp "foobar" và "FOOBAR", thì Git sẽ thấy hai các tệp, nhưng hệ thống tệp sẽ chỉ thấy một tệp, điều này sẽ gây ra tất cả các loại sự cố. Git sẽ kiểm tra, nói, "FOOBAR", và sau đó kiểm tra "foobar", mà hệ thống tập tin nhìn thấy chỉ đơn giản là thay thế các nội dung của "FOOBAR" nhưng để nó tại chỗ. Bây giờ để Git, nó xuất hiện rằng "FOOBAR" đã được thay thế bằng nội dung của "foobar", và "foobar" đã biến mất.
Có hai biểu hiện khác nhau của vấn đề cơ bản này. Một là khi kho lưu trữ của bạn thực sự chứa hai tệp chỉ khác nhau về trường hợp. Trong trường hợp này, bạn cần phải làm việc trên một hệ thống tệp phân biệt chữ hoa chữ thường, hoặc bạn sẽ cần chỉnh sửa kho lưu trữ để đảm bảo rằng không có xung đột nào xảy ra; một hệ thống tệp không phân biệt chữ hoa chữ thường không thể lưu trữ nội dung của kho lưu trữ này.
Một trường hợp khác mà bạn có thể giải quyết là khi việc đổi tên xảy ra thay đổi trường hợp của tệp. Ví dụ: giả sử kho lưu trữ Git chứa tên đổi từ "EXAMPLE" thành "example". Trước khi Git kiểm tra phiên bản mới, nó sẽ thử và kiểm tra để đảm bảo rằng nó không ghi đè lên một số tệp hiện có mà bạn có trên đĩa của mình. Vì nó cho rằng "example" là tên tệp mới, nó sẽ hỏi hệ thống tệp nếu nó tồn tại và hệ thống tệp sẽ thấy "VÍ DỤ" và nói có, vì vậy Git sẽ từ chối kiểm tra phiên bản mới vì nó cho rằng nó sẽ ghi đè các tập tin không được theo dõi. Trong trường hợp này, nếu bạn không có thay đổi cục bộ nào mà bạn quan tâm, thì đơn giản, git reset --hard <revision-to-checkout>
thường sẽ đủ để bạn vượt qua vấn đề và sửa đổi mới.Chỉ cần thử và nhớ không đổi tên tệp thành các tên khác chỉ khác nhau trong trường hợp nếu bạn đang sử dụng hệ thống tệp phân biệt dạng chữ, vì nó sẽ gây ra các sự cố như thế này.
Nguồn
2010-01-03 15:59:11
Xem giải thích trong http://git.or.cz/gitwiki/GitFaq có giúp ích hay không. –
Ditto "* Điều duy nhất có vẻ hoạt động là xóa tệp vi phạm và thử lại lệnh git. *". Đối với tôi, ít nhất một tệp không có trong git; nó được .gitignored bởi một quy tắc ký tự đại diện. Tuy nhiên, không chắc chắn tại sao họ lại là những kẻ chặn. – ruffin