Zmienić wielkość liter pliku w systemie Windows?


209

W naszej bazie kodu kontrolowanej przez git znajduje się kilka plików, których nazwę chciałbym zmienić. W szczególności chcę po prostu zmienić wielkość liter pliku, aby sourceCode.javastało się to SourceCode.javana przykład. Haczyk: korzystam z systemu Windows, a system plików uważa, że ​​są to te same nazwy plików.

Jak sprawić, aby Windows i Git rozpoznały tę zmianę i zarejestrowały ją?


3
Od wersji Git 2.0.1+ (czerwiec 2014 r.) Proste git mvpowinno działać ( stackoverflow.com/a/24979063/6309 ). Nawet w systemie Windows.
VonC

Odpowiedzi:


337

Zajrzyj tutaj, aby uzyskać więcej wskazówek, jak to zrobić:

Jak sprawić, by git ignorował zmiany w przypadku?

Lub:

git mv -f name.java Name.java

8
Nawiasem mówiąc, nie działa to w systemie plików FAT. Niosę jakiś kod projektu na pendrivie, a zmiany w skrzynkach to prawdziwy ból.
asm

1
Nie działało to dla mnie w systemie NTFS i Windows 10
Roboblob

1
Jest to z pewnością właściwy sposób, aby to zrobić, ale jeśli musisz zmienić nazwę wielu plików, może to być uciążliwe. Jeśli masz już jakąś nazwę w systemie plików i po prostu chcesz zatwierdzić te zmiany, możesz zmienić nazwę folderu nadrzędnego, zrób git addz tego folderu o nowej nazwie, NIE NALEŻY PRZEKAZAĆ, zmień nazwę folderu z powrotem na taki, jaki powinien być , git addto ponownie, a następnie zatwierdzenie.
Okonomiyaki3000

Działa na NTFS i Windows 7.
Hans Goldman

Czy można to zrobić zbiorczo? np. z PowerShell,Get-ChildItem '.' | Rename-Item {$_.Name.ToLowerCase()}
killjoy

49

Jeśli korzystasz z systemu plików FAT, jedynym wyborem jest zmiana nazwy na dwa etapy:

  1. Zmień nazwę sourceCode.javanaanything.you.like
  2. Zmień nazwę anything.you.likenaSourceCode.java

W czasach, gdy korzystaliśmy z Perforce, mieliśmy dokładnie ten problem i było to jedyne rozwiązanie, jakie mogliśmy wymyślić.


13
Tylko uwaga dla innych: nie jest konieczne dokonywanie pośrodku, ale konieczne jest dodanie do indeksu, aby git zauważył zmianę
arberg

29

Poniższe kroki pozwoliły mi zmienić wielkość liter w systemie Windows:

  • Dodaj ignorecase = falsedo [core]w .git/config;
  • Przenieś pliki, których nazwę chcesz zmienić, z katalogu projektu;
  • Dodaj usunięcia do indeksu;
  • Przenieś wszystkie pliki z powrotem do ich oryginalnej lokalizacji i zmień wielkość liter plików i / lub katalogów;
  • Dodaj wszystkie „nowe” pliki do indeksu;
  • Usuń ignorecase = falsedodane w pierwszym kroku.

W ten sposób masz jeden zatwierdzenie, które zawiera zmianę nazwy i ułatwia zmianę np. Całego katalogu.


5
Zrób to dla globalnych i lokalnych ustawień łaźni: $ gti config --global core.ignorecase false $ gti config core.ignorecase false
Roman Iwanow

6

Bądź ostrożny. Może to doprowadzić do zmian, których scalenie jest niemożliwe. Git jest zdezorientowany podczas łączenia w systemie Windows, ponieważ nie może zdecydować, czy stara nazwa wielkich liter i nowa mała litera są tym samym plikiem, czy nie (w przypadku Git tak nie jest, ale dla systemu plików są). Aby scalić, musisz wykonać ręczne obejście, takie jak usunięcie plików przed scaleniem.

Zobacz problem z Git rebase z plikami o tej samej nazwie, ale innej wielkości

Nie jestem pewien, czy ten problem jest gorszy niż posiadanie niekonwencjonalnie nazwanego pliku w swoim projekcie na zawsze, ale warto wiedzieć, czy jest wielu użytkowników z wieloma oddziałami, które ostatecznie będą musiały zostać scalone.


Należy zawsze unikać niekonwencjonalnie nazwanych plików w średnich i dużych projektach, jeśli to możliwe, ze względu na problemy podczas programowania na wiele platform (opóźnienie w naprawie czegoś takiego do późniejszego czasu spowoduje, że problemy z poprawką będą poważniejsze). Czasami programujesz w systemie Windows, ale musisz także wykonać kompilację Linuksa, a dołączenie, które działałoby poprawnie w systemie Windows, powoduje kompilację systemu Linux.
Griffork,

3

Moim zdaniem brakuje jednego prostego sposobu. Możesz to zrobić dla pojedynczego pliku, określonego katalogu lub nawet całego repozytorium:

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

Jeśli chcesz wpływać również na podkatalogi, musisz użyć -rflagi:

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

Naprawdę najprostszy.
ranu

Traci to całą historię pliku, ponieważ jest on ustawiony przez git jako zupełnie nowy.
Alejandro

@Alejandro To, co mówisz, jest złe. Właśnie go przetestowałem i bez problemu rozpoznałem zmianę nazwy. Podobnie jak w innych przypadkach, plik jest wyświetlany w indeksie jako usunięty / nowy, ale podczas zatwierdzania git zauważa, że ​​właśnie zmieniono jego nazwę.
Nils-o-mat

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.