Git không phân biệt chữ hoa và chữ thường?


96

Trong cam kết đầu tiên của phần tôi được gọi là _Electronicsnó được viết bắt đầu bằng chữ in hoa, sau đó tôi đổi thành_electronics .

Git dưới cygwin đã bỏ qua trường hợp này sau khi xác nhận tên mới, vì vậy tôi đã thay đổi tên bằng tay trong repo mục tiêu.

Bây giờ nó đôi khi thay đổi _electronicsmột phần được cam kết thành _Electronics.

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


9
Bạn đang sử dụng hệ điều hành nào?
Keith Thompson

10
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 là 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 có vui mừng khi Windows quyết định không phân biệt chữ hoa chữ thường không?
Cascabel

4
Windows không phân biệt chữ hoa chữ thường, nhưng đôi khi (ngày nay thường xuyên hơn) vẫn bảo toàn chữ hoa chữ thường .
Arafangion

Câu trả lời:


73

Nó sẽ được coi là 2 thứ khác nhau nhưng sẽ gây ra cho bạn sự cố trên một hệ thống không phân biệt chữ hoa chữ thường. Nếu đúng như vậy, hãy đảm bảo rằng bạn đang hoàn thành mọi đường dẫn hoặc tên tệp bằng tab. Hơn nữa, để thay đổi tên của một cái gì đó chỉ trong trường hợp, hãy làm như sau:

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à một cách rõ ràng để thực hiện các thay đổi cam kết chúng, sau đó thu gọn các cam kết. Một cách ngắn hơn để làm điều đó là thao tác với 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 cũng 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 của thư mục


có vẻ như điều này đã đúng (ngoại trừ việc tôi đã thay đổi từ chữ in hoa sang chữ thường)
JAkk

Tôi đã nhìn vào nó, miễn là tôi đã quen với cygwin, thì việc sử dụng cygwin sẽ thoải mái hơn - cảm ơn vì gợi ý
JAkk 13/12/11

Bạn chỉ có thể làm git mv file.txt File.txt. Không chắc đây có phải là một tính năng git mới hay không.
Phil

107

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

core.ignorecase

Nếu đúng, tùy chọn này cho phép nhiều 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. Ví dụ: nếu danh sách thư mục tìm thấy "makefile" khi git mong đợi "Makefile", git sẽ cho rằng 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.

Chi tiết hơn trong câu trả lời này cho Thay đổi cách viết hoa của tên tệp trong Git .


79
Đây là câu trả lời chính xác imo. Đối với tôi trong tương lai, hãy sử dụng git config --unset-all core.ignorecase && git config --system core.ignorecase falsevới sudo.
Znarkus

2
ditto to James, @Znarkus đã xác định được bản sửa lỗi cho sự cố này trên OS X, Cảm ơn!
Craig Nakamoto

1
@Znarkus cũng Hoạt động trên Windows. Xinh đẹp.
orlade

9
@Znarkus, vấn đề khi thực hiện điều đó trên OSX là khi bạn đổi tên tệp thông qua công cụ tìm kiếm và chỉ thay đổi trường hợp, git sẽ thấy phiên bản được đổi tên là 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 lên github, github sẽ có cả tệp 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

2
@spiralganglion Đối với nhà phát triển web trên OSX, tôi thực sự có thể khuyên bạn nên tạo một 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

23

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

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

1
Bạn đã thử điều này trên hệ thống tệp không phân biệt chữ hoa chữ thường chưa?
Edward Thomson,

1
Ban đầu, tôi đọc đây là người đăng ban đầu đang cố gắng thực hiện đổi tên theo trường hợp của một thư mục, không phải tệp. Bây giờ tôi đọc lại điều này, nó không rõ ràng. Thật vậy, mv -fsẽ làm việc cho một tệp.
Edward Thomson,


0

Trong kịch bản của tôi, tôi có hai thư mục testsTestshiển thị dưới dạng hai thư mục riêng biệt trong Github nhưng một Teststhư mục duy nhất trong Windows. Mục đích của tôi là kết hợp cả hai thànhtests .

Tôi đã sử dụng cách tiếp cận sau:

  1. Tạo một thư mục mới temp
  2. Sao chép tất cả nội dung từ Tests sangtemp
  3. Xóa bỏ Tests
  4. hành hình git rm Tests -r
  5. Đổi tên tempthànhtests

0

Tôi đã cố gắng giải quyết vấn đề và nó đã thành công trên Windows10

Giả sử có hai thư mục trên bitbucket TEST và kiểm tra nhưng khi tôi sao chép repo trên đĩa, nó chỉ tạo TEST và tôi muốn giữ kiểm tra như một thư mục duy nhất trên git chứa tất cả các tệp.

Tôi sẽ cần thực hiện các lệnh sau trên dòng lệnh git mv TEST test1 -f git mv text1 test -f git commit -m "renaming ..." git push

Bây giờ bạn sẽ thấy rằng phân cấp thư mục được sửa chữa trên bitbucket.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.