Câu hỏi Git có phân biệt chữ hoa chữ thường không?


Trong cam kết đầu tiên của một phần của tôi được gọi là _Electronics nó được viết bằng chữ cái viết hoa, sau đó tôi đổi nó thành _electronics.

Git dưới cygwin bỏ qua trường hợp sau khi bắt đầu tên mới, vì vậy tôi đã đổi tên bằng tay trong repo đích.

Bây giờ đôi khi nó thay đổi cam kết _electronics một phần để _Electronics.

Tôi đã làm gì sai?


76
2017-12-12 22:00


gốc


Bạn đang sử dụng hệ điều hành nào? - Keith Thompson
Bạn đang sử dụng hệ thống tệp nào? - Andrew Marshall
Windows với Cygwin. Máy chủ của tôi chạy Ubuntu Linux. Không biết hệ thống tệp, tôi đoán ext3 hoặc ext2 - nhà cung cấp của tôi đã định cấu hình cài đặt tối thiểu. - JAkk
Bạn không vui vì Windows đã quyết định không phân biệt chữ hoa chữ thường? - Cascabel
Windows là trường hợp không nhạy cảm, nhưng đôi khi (thường xuyên hơn ngày hôm nay) trường hợp bảo quản. - Arafangion


Các câu trả lời:


Nó sẽ được xem như 2 thứ khác nhau nhưng sẽ khiến bạn gặp vấn đề với hệ thống không phân biệt chữ hoa chữ thường. Nếu trường hợp này xảy ra, hãy đảm bảo bạn hoàn thành tab bất kỳ đường dẫn hoặc tên tệp nào. Hơn nữa, để thay đổi tên của một cái gì đó trong trường hợp này, hãy làm điều này:

mv file.txt temp.txt
git add -A
git commit -m "renaming..."
mv temp.txt File.txt
git add -A
git commit --amend -m "Renamed file.txt to File.txt"

Đây là cách rõ ràng để thực hiện thay đổi, sau đó thu hẹp các cam kết. Một cách ngắn hơn để làm điều đó là thao tác chỉ mục và thư mục làm việc tất cả trong một:

git mv file.txt temp.txt
git mv temp.txt File.txt
git commit -m "Renamed file.txt to File.txt"

Điều này liên quan đến việc điều chỉnh tên thư mục: git mv và chỉ thay đổi trường hợp thư mục


65
2017-12-12 22:06



trông như thế này là đúng (ngoại trừ việc tôi đã thay đổi từ chữ in hoa thành chữ thường) - JAkk
Bạn đã thử msysgit trên cửa sổ chưa? - Adam Dymitruk
Tôi nhìn vào nó, miễn là tôi được sử dụng để Cygwin, nó chỉ là thoải mái hơn để sử dụng Cygwin - cảm ơn cho gợi ý - JAkk
Bạn chỉ có thể làm git mv file.txt File.txt. Không chắc chắn nếu đây là một tính năng git mới. - Phil


Nó sẽ phụ thuộc vào core.ignorecase giá trị cấu hình, được đặt thành false trong các hệ thống tệp phân biệt chữ hoa chữ thường và đúng trong msysgit trên Windows.

core.ignorecase

Nếu đúng, tùy chọn này cho phép các cách giải quyết khác nhau để cho phép git hoạt động tốt hơn trên các hệ thống tệp không phân biệt chữ hoa chữ thường, như FAT. Dành cho   Ví dụ: nếu danh sách thư mục tìm thấy "makefile" khi git mong đợi   "Makefile", git sẽ giả định nó thực sự là cùng một tệp và tiếp tục   để ghi nhớ nó là "Makefile".

Mặc định là false, ngoại trừ git-clone (1) hoặc git-init (1) sẽ thăm dò và đặt core.ignorecase true nếu thích hợp khi kho lưu trữ   được tạo ra.


90
2017-12-12 22:46



Đây là câu trả lời đúng. Đối với tôi trong tương lai, sử dụng git config --unset-all core.ignorecase && git config --system core.ignorecase false với sudo. - Znarkus
ditto đến James, @Znarkus đã xác định được bản sửa lỗi cho vấn đề này trên OS X, Cảm ơn! - Craig Nakamoto
@Znarkus Hoạt động trên Windows. Đẹp. - orlade
@Znarkus, vấn đề với việc đó trên OSX là khi bạn đổi tên một tệp thông qua công cụ tìm và chỉ thay đổi trường hợp, git sẽ thấy phiên bản được đổi tên thành tệp hoàn toàn mới, nhưng nó không tạo ra "xóa" tương ứng hành động cho phiên bản cũ của tệp. Vì vậy, nếu bạn cam kết và đẩy vào github, github sẽ có cả tên cũ và tệp mới được đặt tên, nhưng hệ thống cục bộ của bạn sẽ chỉ có tệp mới và git sẽ không có gì khôn ngoan hơn. - ivanreese
@spiralganglion Đối với web dev trên OSX tôi thực sự có thể khuyên bạn nên tạo phân vùng phân biệt chữ hoa chữ thường và sau đó gắn nó làm thư mục www của bạn. - Znarkus


Điều này dễ dàng hơn nhiều:

git mv Electronics electronics -f
git commit -m "That was easy!"

21
2018-02-12 16:17



Bạn đã thử điều này trên một hệ thống tập tin không phân biệt chữ hoa chữ thường? - Edward Thomson
@Edward yes, OS X - Arnoud
Ban đầu tôi đọc đây là poster gốc cố gắng thực hiện đổi tên trường hợp thay đổi của một thư mục, không phải là một tệp. Bây giờ tôi đọc lại điều này, nó không rõ ràng. Thật, mv -f sẽ làm việc cho một tập tin. - Edward Thomson


git config --system core.ignorecase false

19
2017-07-07 11:52