Phân biệt chữ hoa chữ thường trong Git


82

Tôi đã gặp sự cố với git. Về cơ bản, tôi đặt thành false core.ignorecasevì tôi muốn thay đổi trường hợp tên của một số thư mục (vì tôi đang sử dụng OSX với hệ thống tệp phân biệt chữ hoa chữ thường, các thay đổi không được hiển thị theo cách khác). Khi tôi lấy dữ liệu của mình, tôi nhận thấy rằng bây giờ mỗi thư mục được đổi tên sẽ xuất hiện hai lần trên kho lưu trữ, với cả tên cũ và tên mới. Tôi không biết phải làm gì để xóa các thư mục cũ vì chúng không xuất hiện cục bộ (Tôi đã cố gắng đặt core.ignorecaselại thành true nhưng không giúp được gì).


1
Có thể bạn có thể tạo một hệ thống tệp ext3 trên một hình ảnh, gắn kết nó và kéo vào hệ thống tệp phân biệt chữ hoa chữ thường này.
André Puel

@ AndréPuel à, thực ra tôi đang tìm kiếm thứ gì đó 'dễ dàng hơn'. : P nhưng cảm ơn vì lời khuyên, tôi sẽ đi cho nó nếu tôi không tìm thấy giải pháp khác.
entropid

Câu trả lời:


123

Có thể là một cách giải quyết tương tự như nhận xét này trong sự cố msysgit (đối với một hệ điều hành không phân biệt chữ hoa chữ thường khác: Windows) có thể giúp được gì không?

Tôi đã gặp phải vấn đề tương tự. Đã cấu trúc lại tên gói trong Eclipse và chuyển sang bản dựng trước đã bị hỏng do tên thư mục không hoàn nguyên. Tôi đang sử dụng Windows 7, Git 1.7.0.2.msysgit.0

Thư mục của tôi đã được đổi tên trong Windows thành " folder" nhưng được hiển thị là " Folder" trong Git.
Tôi đã khắc phục sự cố bằng cách đổi tên nó thành " Folder" trong Windows và sau đó chạy:

git mv "Folder" "Folder2"
git mv "Folder2" "folder"

Lưu ý rằng kể từ git 2.0.1 (tháng 6 năm 2014), git mv Folder foldersẽ hoạt động!

Xem " Git: Thay đổi cách viết hoa của tên tệp "


1
Tôi nhận thấy rằng khi đổi tên theo cách này, việc đổi tên thứ hai có thể mất một looooong thời gian. Câu trả lời là hãy kiên nhẫn; thư mục cuối cùng sẽ đổi tên, sau đó bạn có thể cam kết nó.
NathanAldenSr

Một cách khác để làm điều tương tự là đổi tên "Thư mục" thành "Thư mục2" và thực hiện một cam kết, sau đó "Thư mục2" thành "thư mục" và sửa đổi cam kết cuối cùng.
DaniCE

@DaniCE Tôi vừa chỉnh sửa câu trả lời: với git 2.0.1, điều này sẽ đơn giản hơn nhiều.
VonC

21

Bạn có thể tạo ảnh đĩa (tốt nhất là ảnh đĩa dạng khối thưa) bằng hệ thống tệp phân biệt chữ hoa chữ thường và kiểm tra kho lưu trữ git của bạn ở đó.

Ảnh chụp màn hình Disk Utility dưới đây cho thấy cách tạo hình ảnh đĩa phân biệt chữ hoa chữ thường.

Cài đặt Tiện ích Ổ đĩa


Một giải pháp tốt hơn, vĩnh viễn, cho vấn đề này và những bí ẩn khác do phân biệt chữ hoa chữ thường. Tôi đã tạo hình ảnh đĩa; đã sao chép các kho lưu trữ Git cũ của tôi vào đó; đã tạo một liên kết tượng trưng từ nơi tôi đã sử dụng để giữ tất cả các git repo của mình sang phiên bản gói mới, thưa thớt. Quay lại quy trình làm việc bình thường không bao giờ gặp phải điều này nữa.
jwd630,

Đĩa được tạo theo cách này rất chậm.
Minqi Pan

1
@MinqiPan, tôi cũng có cùng lo lắng, nhưng sẽ không nên nếu bạn tạo một ổ đĩa APFS. Các khối lượng APFS có thể tồn tại trong cùng một phân vùng "vùng chứa" , do đó không bị phạt về hiệu suất.
Victor Sergienko

21

Sử dụng lệnh sau trên macOS. Điều này sẽ thay đổi cấu hình git của bạn thành phân biệt chữ hoa chữ thường trên tên tệp.

git config core.ignorecase false

Bạn có thể thiết lập điều này trên toàn cầu bằng cách chỉnh sửa ~/.gitconfigvà đặt nó corenhư:

[core]
    ignoreCase = false

Tôi đã làm hoàn toàn ngược lại để làm cho git thành công khi thực hiện rebase bao gồm đổi tên trường hợp. Cảm ơn!
sorin

12

Mac OS X theo mặc định là "không phân biệt chữ hoa chữ thường nhưng bảo toàn chữ hoa chữ thường". Đây là một dấu hiệu đặc biệt quan trọng.

Tôi khuyên bạn nên tạo một hình ảnh đĩa khác và định dạng cụ thể nó thành "HFS Phân biệt chữ hoa chữ thường".


Cảm ơn bạn vì mẹo, nhưng bài đăng ở trên này đã giải quyết mọi thứ!
entropid,

7
Thật không may, rất nhiều phần mềm xấu (tất nhiên là Adobe) dựa trên hệ thống tệp OSX bị hỏng mặc định. Hãy cảnh giác.
Jim Stewart

5
git mv "Folder" "Folder2"
git mv "Folder2" "folder"
git commit -a -m "my message"

Đúng vậy. Bạn phải tiếp tục và cam kết nó quá. ++
RubberDuck

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.