Thay đổi trường hợp của một tập tin trên Windows?


209

Có một vài tệp trong cơ sở mã được kiểm soát git của chúng tôi mà tôi muốn đổi tên. Cụ thể, tôi chỉ muốn thay đổi trường hợp của tập tin, đểsourceCode.java trở thành SourceCode.java, ví dụ. Lưu ý: Tôi đang sử dụng hộp Windows và hệ thống tệp cho rằng đó là cùng một tên tệp.

Làm cách nào tôi có thể khiến Windows và Git nhận ra sự thay đổi đó và kiểm tra nó?


3
Kể từ Git 2.0.1+ (tháng 6 năm 2014), một đơn giản git mvnên hoạt động ( stackoverflow.com/a/24979063/6309 ). Ngay cả trên Windows.
VonC

Câu trả lời:


336

Có một cái nhìn ở đây để có thêm gợi ý về cách làm điều đó:

Làm thế nào để làm cho git bỏ qua những thay đổi trong trường hợp?

Hoặc là:

git mv -f name.java Name.java

8
Như một bên, điều này không hoạt động trên một hệ thống tập tin FAT. Tôi mang theo một số mã dự án trên một ổ ngón tay cái và thay đổi trường hợp là một nỗi đau thực sự.
asm

1
Điều này không hoạt động với tôi trên hệ thống NTFS và Windows 10
Roboblob

1
Đây chắc chắn là cách chính xác để làm điều đó, nhưng, nếu bạn cần đổi tên nhiều tệp, nó có thể tẻ nhạt. Nếu bạn đã đổi tên chúng trong hệ thống tập tin bằng cách nào đó và bạn chỉ muốn thực hiện những thay đổi đó, bạn có thể đổi tên một số thư mục mẹ, thực hiện một git addtrong những thư mục mới được đổi tên đó, ĐỪNG CAM KẾT, thay đổi tên thư mục thành tên , git addnó một lần nữa và sau đó cam kết.
Okonomiyaki3000

Hoạt động trên NTFS và Windows 7.
Hans Goldman

Có thể làm điều này với số lượng lớn? ví dụ với powershell,Get-ChildItem '.' | Rename-Item {$_.Name.ToLowerCase()}
killjoy

49

Nếu bạn đang sử dụng hệ thống tệp FAT, lựa chọn duy nhất của bạn là thực hiện đổi tên hai giai đoạn:

  1. Đổi tên sourceCode.javathànhanything.you.like
  2. Đổi tên anything.you.likethànhSourceCode.java

Quay trở lại những ngày khi chúng tôi sử dụng Perforce, chúng tôi đã gặp chính xác vấn đề này và đây là giải pháp duy nhất chúng tôi có thể đưa ra.


13
Chỉ cần một lưu ý cho người khác: Không cần thiết phải cam kết ở giữa, nhưng cần phải thêm vào chỉ mục cho git để thông báo thay đổi
arberg

29

Các bước sau đây cho phép tôi thay đổi trường hợp trên Windows:

  • Thêm ignorecase = falsevào [core]trong .git/config;
  • Di chuyển các tệp bạn sẽ đổi tên ra khỏi thư mục dự án của bạn;
  • Thêm các xóa vào chỉ mục;
  • Di chuyển tất cả các tệp trở lại vị trí ban đầu của chúng và thay đổi trường hợp của các tệp và / hoặc thư mục;
  • Thêm tất cả các tệp "mới" vào chỉ mục;
  • Hủy bỏ ignorecase = falsethêm vào ở bước đầu tiên.

Bằng cách này, bạn có một cam kết duy nhất có chứa tên và nó giúp dễ dàng thay đổi, ví dụ như toàn bộ thư mục.


5
Làm điều đó cho các thiết lập toàn cầu và cục bộ: $ gti config --global core.ignorecase false $ gti config core.ignorecase false
Roman Ivanov

6

Hãy cẩn thận. Làm điều này có thể dẫn đến những thay đổi không thể hợp nhất. Git bị lẫn lộn khi hợp nhất trên Windows bởi vì nó không thể quyết định liệu tên Uppercase cũ và tên chữ thường mới có phải là cùng một tệp hay không (đối với Git thì không, nhưng đối với hệ thống tệp chúng là). Để hợp nhất, bạn phải thực hiện một số cách giải quyết thủ công như xóa các tệp trước khi hợp nhất.

Xem vấn đề Gase rebase với các tệp cùng tên nhưng trường hợp khác

Tôi không chắc vấn đề này có tệ hơn việc có một tệp được đặt tên độc đáo trong dự án của bạn mãi mãi không, nhưng điều đáng biết là liệu có nhiều người dùng với nhiều chi nhánh cuối cùng sẽ cần được hợp nhất hay không.


Nên tránh các tệp được đặt tên không theo quy tắc trong các dự án vừa và lớn nếu có thể do gây ra sự cố khi phát triển cho nhiều nền tảng (trì hoãn việc sửa một cái gì đó như thế cho đến sau này sẽ khiến vấn đề từ bản sửa lỗi trở nên nghiêm trọng hơn). Đôi khi bạn đang phát triển trên windows, nhưng cũng cần phải xây dựng linux và bao gồm nó sẽ hoạt động tốt trên windows khiến cho bản dựng bị hỏng trên linux.
Griffork

3

Theo tôi một cách đơn giản là thiếu. Bạn có thể làm điều này cho một tệp duy nhất, một thư mục cụ thể hoặc thậm chí toàn bộ kho lưu trữ:

git rm --cached <file name or directory>
git add <file name or directory>

Nếu bạn muốn ảnh hưởng đến các thư mục con, bạn phải sử dụng -rcờ:

git rm -r --cached <directory>
git add <directory>

Thực sự là đơn giản nhất.
ranu

Điều này làm mất toàn bộ lịch sử của tệp, vì nó được đặt bởi git là một tệp hoàn toàn mới.
Alejandro

@Alejandro Những gì bạn nói là sai. Tôi chỉ thử nó và git nhận ra việc đổi tên mà không gặp vấn đề gì. Như trong các trường hợp khác, tệp được hiển thị là bị xóa / mới trong chỉ mục, nhưng trong khi cam kết, git thông báo, rằng nó vừa được đổi tên.
Nils-o-mat

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.