Tôi thay đổi cách viết hoa của một thư mục và Git dường như không nhận nó


139

Tôi đang phát triển một dự án trên OS X Lion dưới sự kiểm soát của phiên bản Git. Tôi đã có các thư mục chữ thường này và sau đó viết hoa chúng (ví dụ: emailaddresses => EmailAddresses), nhưng Git dường như không nhận ra sự thay đổi. Nó vẫn nghĩ các thư mục là chữ thường khi tôi chạy git ls-filesvà các lệnh khác.

Điều này có hại không, hay tôi nên làm gì khác để Git nhận thay đổi này?


1
bản sao có thể có của Git: Thay đổi cách viết hoa tên tệp
KyleMit

Điều này tạo ra sự nhầm lẫn cho tôi trong 2 ngày. Giờ thì tôi đã hiểu. Thnx cho câu hỏi này
Number945

Câu trả lời:


199

Có lẽ bạn đang sử dụng trường hợp không nhạy cảm (nhưng bảo quản trường hợp) HFS +. Tôi thường làm việc vòng này như vậy:

$ git mv somename tmpname
$ git mv tmpname SomeName

1
Đây là cùng một vấn đề tôi có, và đây là những gì tôi làm.
fernferret

3
Có vấn đề tương tự với công cụ Github cho Windows. Một lần nữa, giải pháp trên hoạt động xoay quanh vấn đề độc đáo: đổi tên thành tệp tạm thời trong Windows Mininger, sau đó - sau khi cam kết - đổi tên thành tên cuối cùng với trường hợp chính xác.
Jason

9
Hoặc thực hiện trong một lệnh: git mv --force somename someName (từ stackoverflow.com/a/16071375/217866 )
jackocnr

1
Để thay đổi được phản ánh trong repo từ xa, bạn cũng cần phải git push origin master. Nếu git từ chối cập nhật từ xa, bạn có thể cần thêm tệp giả (ví dụ touch stam) và thực hiện thao tác đẩy. Tiếp theo là xóa stam sau đó và đẩy lại.
Rahav

2
Một điều cần lưu ý là bạn cần phải ở trong thư mục chứa tệp này để làm việc. Điều đó không rõ ràng đối với tôi lúc đầu và tôi tiếp tục nhận được >>> nguồn xấu, nguồn = somename, Destination = tmpname <<< vì tôi đã cố chạy lệnh từ gốc của repo.
Parth Tamane

280

Bạn có thể nói với git để xem xét trường hợp bằng cách chạy

git config core.ignorecase false


4
Câu trả lời thực sự tuyệt vời nếu bạn đã thay đổi tên tệp mà không sử dụng git mv --force hoặc một số tập lệnh CL khác. Cảm ơn bạn!
MeanMatt

4
Đây là câu trả lời ưu việt vì tôi không cảm thấy đặc biệt như git mv'ing 200 tệp được đổi tên theo cách thủ công!
Adam Reis

1
Đồng ý rằng đây sẽ là câu trả lời hàng đầu. Cảm ơn bạn.
HomerPlata

1
vì một số lý do, nó đã sao chép tất cả các tệp, bây giờ tôi có cả phiên bản gốc và phiên bản gốc đã thay đổi ...
Salatiel

1
@Salatiel Tôi đoán nó sao chép chúng khi bạn đang theo dõi tệp.
Iggy

36

Cách git mv trên Mac Case-Sensitively

Điều này xảy ra vì Mac OS X thực hiện các tính năng bảo vệ trường hợp và không phân biệt chữ hoa chữ thường nhằm giúp bạn.

Mặc dù các đề xuất đổi tên kép trong câu trả lời khác sẽ hoạt động, tôi khuyên bạn nên sử dụng '- lực lượng' để có kết quả thực hành tốt nhất:

$ git mv --force somename SomeName


Lưu ý: nếu bạn thử mà không có tùy chọn bắt buộc, git sẽ chặn bạn như thế này:

$ git mv somename SomeName
$ fatal: destination exists, source=somename, destination=SomeName

Trong ví dụ trên, lệnh git không thành công và không có tệp nào bị thay đổi trong hệ thống tệp hoặc trong chỉ mục của git.


Theo lệnh đầu tiên, tôi nhận được fatal: not under version control.
2540625

Lỗi nghiêm trọng đó có nghĩa là bạn không có kho lưu trữ GIT tại vị trí đó. gitcác lệnh chỉ hoạt động trong các thư mục với kho GIT.
David Manpearl

Nhưng tôi đã ở trong một thư mục con của repit Git của tôi Cuối cùng, tôi đã giải quyết nó thông qua câu trả lời của Taran , BTW. Cảm ơn.
2540625

19

Cố gắng thay đổi tùy chọn git config core.ignorecase thành false trong tệp .gitconfig của bạn.


4
hoặc viếtgit config core.ignorecase false
iforgotmypassword

2
@iforgotmypassword = bạn nên trả lời nó - Tôi thực sự đã bỏ phiếu cho bạn
Abdeali Chandanwala

4

Các bước sau đây đã giúp tôi giải quyết vấn đề:

  1. Đổi tên thư mục thành temp:

    mv Folder temp                  // It will rename your Folder to temp
    
  2. Giai đoạn và cam kết:

    git add .
    git commit -m "Temp"
    
  3. Đổi tên tempthư mục theo lựa chọn của bạn:

    mv temp folder        // It will rename temp folder to the name of your choice(folder)
    git add .
    git commit -m "Folder Fixed"
    

Xong - Bây giờ bạn có thể đẩy.


1

Nếu bạn làm git mv AAA aaahoặc git mv -f AAA aaa, nó sẽ không hoạt động và bạn sẽ có lỗifatal: renaming 'AAA' failed: Invalid argument .

Bởi vì AAAaaaMỘT thư mục / tệp trên các hệ thống tệp không phân biệt chữ hoa chữ thường, di chuyển AAAsang aaaphương tiện di chuyển AAAnhư aaa/AAA.

Vì vậy bạn nên làm

git mv AAA aaa.1
git mv aaa.1 aaa

Tôi hy vọng nó sẽ hữu ích cho bạn.


1

Lý do cho điều này là hệ điều hành hoặc macOS dựa trên LINUX bỏ qua trường hợp nhạy cảm với tên tệp / thư mục. Chúng tôi cần giải quyết vấn đề này bằng các bước dưới đây

For Exp, you want to change folder name from Base to base
1. mv Base base2
2. git add . && git commit -m "Fix folder name problem (wip)"
3. mv base2 base
4. git add . && git commit -m "Fixed folder name problem"

0

Không có giải pháp nào trong số này làm việc cho tôi. SourceTree luôn tạo ra chi nhánh của tôi với một trường hợp khác với những gì tôi muốn. Vì vậy, làm thế nào tôi giải quyết nó là:

1 - Nhìn vào tập tin git của bạn trên công cụ tìm. Bạn có thể làm điều đó bằng cách gõ này trên thiết bị đầu cuối:

- `defaults write com.apple.finder AppleShowAllFiles TRUE`
- `killall Finder`

2 - Khởi chạy lại công cụ tìm và đi đến thư mục dự án của bạn

3 - Bây giờ chỉ cần thay đổi tên thư mục của bạn, giả sử từ Tính năng thành tính năng. Và ở đó bạn đi.



0

Tôi đã có cùng một vấn đề và sử dụng giải pháp dưới đây. Tôi sử dụng cái này để đổi tên hàng loạt, thư mục và tập tin, v.v.

git rm -r --cached .
git add --all .
git commit -a -m "Versioning updated directory/file names"
git push origin master

Như chi tiết ở đây.


0

Không ai trong số này thực sự giúp tôi, tôi vẫn bảo tôi bỏ qua các thay đổi của mình, vì tình huống của tôi là thư mục cục bộ của tôi được viết hoa nhưng từ xa thì không, và chi nhánh của tôi ở phía sau và tôi không thể kéo nữa vì sự khác biệt về viết hoa trong cấu trúc thư mục.

Cách duy nhất tôi có thể khắc phục điều này là xóa chi nhánh địa phương của tôi và kiểm tra điều khiển từ xa.

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.