Zmieniam wielkość liter w katalogu i wydaje się, że Git go nie rozpoznaje

139

Rozwijam projekt na OS X Lion, który jest pod kontrolą wersji Git. Miałem te katalogi pisane małymi literami, a później pisałem je wielkimi literami (np. Emailaddresses => EmailAddresses), ale wydaje się, że Git nie rozpoznaje zmiany. Nadal myśli, że katalogi są pisane małymi literami, kiedy uruchamiam git ls-filesi inne polecenia.

Czy to nieszkodliwe, czy powinienem zrobić coś innego, aby Git wychwycił tę zmianę?

dan
źródło
To spowodowało zamieszanie przez 2 dni. Teraz rozumiem. Dzięki za to pytanie
Number945

Odpowiedzi:

199

Prawdopodobnie używasz HFS + bez rozróżniania wielkości liter (ale z zachowaniem wielkości liter). Zwykle robię to tak:

$ git mv somename tmpname
$ git mv tmpname SomeName
Paul R.
źródło
1
To ten sam problem, co ja i tym się zajmuję.
fernferret
3
Miałem ten sam problem z narzędziem Github dla systemu Windows. Ponownie powyższe rozwiązanie dobrze radzi sobie z problemem: zmień nazwę na plik tymczasowy w Windows Exploer, a następnie - po zatwierdzeniu - zmień nazwę na ostateczną nazwę z poprawną wielkością.
Jason,
9
Lub zrób to jednym poleceniem: git mv --force somename SomeName (ze stackoverflow.com/a/16071375/217866 )
jackocnr
1
Aby zmiany zostały odzwierciedlone w zdalnym repozytorium, musisz również to zrobić git push origin master. Jeśli git odmówi aktualizacji pilota, może być konieczne dodanie fikcyjnego pliku (np. touch stam) I wykonanie polecenia push. Następnie kolejne usuwanie stamu i ponowne wciśnięcie.
Rahav
2
Należy pamiętać, że aby to zadziałało, musisz znajdować się w folderze, w którym znajduje się plik. Na początku nie było to dla mnie oczywiste i ciągle otrzymywałem >>> złe źródło, źródło = ta sama nazwa, miejsce docelowe = nazwa tmp <<<, ponieważ próbowałem uruchomić polecenie z katalogu głównego repozytorium.
Parth Tamane
280

Możesz nakazać gitowi wzięcie pod uwagę sprawy, uruchamiając

git config core.ignorecase false

Taran
źródło
4
Naprawdę świetna odpowiedź, jeśli już zmieniłeś nazwy plików bez użycia git mv --force lub innego skryptu CL. Dziękuję Ci!
MeanMatt,
4
To najlepsza odpowiedź, ponieważ nie miałem ochoty ręcznie zmieniać nazw 200 plików!
Adam Reis
1
Zgodzili się, że to powinna być najlepsza odpowiedź. Dziękuję Ci.
HomerPlata
1
z jakiegoś powodu zduplikował wszystkie pliki, teraz mam zarówno oryginalne wersje, jak i te z dużymi literami ...
Salatiel
1
@Salatiel Myślę, że powiela je, gdy już śledzisz plik.
Iggy
36

Jak zdać mv na Macu z uwzględnieniem wielkości liter

Dzieje się tak, ponieważ Mac OS X zaimplementowano funkcje zachowywania wielkości liter i niewrażliwości na wielkość liter, które mają Ci pomóc.

Chociaż sugestie podwójnej zmiany nazwy w drugiej odpowiedzi będą działać, zalecam użycie opcji „--force”, aby uzyskać najlepsze wyniki:

$ git mv --force somename SomeName


Uwaga: jeśli spróbujesz bez opcji wymuszenia, git będzie na ciebie napadał w ten sposób:

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

W powyższym przykładzie polecenie git kończy się niepowodzeniem i żadne pliki nie są zmieniane w systemie plików ani w indeksie git.

David Manpearl
źródło
Po pierwszym poleceniu otrzymuję fatal: not under version control.
2540625,
Ten błąd krytyczny oznacza, że ​​nie masz repozytorium GIT w tej lokalizacji. gitpolecenia działają tylko w katalogach z repozytoriami GIT.
David Manpearl
Ale byłem w podkatalogu mojego repozytorium Git… W końcu rozwiązałem to za pomocą odpowiedzi Tarana , BTW. Dzięki.
2540625
19

Spróbuj zmienić opcję konfiguracji git core.ignorecase na false w pliku .gitconfig.

pooamlairaj
źródło
4
lub napiszgit config core.ignorecase false
iforgotmypassword
2
@iforgotmypassword = powinieneś był odpowiedzieć - właściwie to bym na ciebie głosował
Abdeali Chandanwala
4

Poniższe kroki pomogły mi rozwiązać problem:

  1. Zmień nazwę folderu na temp:

    mv Folder temp                  // It will rename your Folder to temp
    
  2. Scena i zatwierdzanie:

    git add .
    git commit -m "Temp"
    
  3. Zmień nazwę tempfolderu według własnego uznania:

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

Gotowe - możesz teraz naciskać.

Renil Babu
źródło
1

Jeśli to zrobisz git mv AAA aaalub git mv -f AAA aaa, to nie zadziała i wystąpi błąd fatal: renaming 'AAA' failed: Invalid argument.

Ponieważ AAAiaaaJEDNYM SAMYM folderem / plikiem w systemach plików bez rozróżniania wielkości liter, przejdź AAAdo aaaoznacza przeniesienie AAAjako aaa/AAA.

Więc powinieneś to zrobić

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

Mam nadzieję, że będzie to pomocne dla Ciebie.

Gapur Kassym
źródło
1

Powodem tego jest to, że system operacyjny oparty na LINUX lub macOS ignoruje wielkość liter w nazwie pliku / folderu. Musimy rozwiązać ten problem, wykonując poniższe czynności

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"
giapnh
źródło
0

Żadne z tych rozwiązań nie zadziałało dla mnie. SourceTree zawsze tworzyło moją gałąź z innym przypadkiem, niż chciałem. Więc jak to rozwiązałem:

1 - Spójrz na swoje pliki git w Finderze. Możesz to zrobić wpisując na terminalu:

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

2 - Uruchom ponownie wyszukiwarkę i przejdź do katalogu projektu

3 - Teraz po prostu zmień nazwę folderu, powiedzmy z funkcji na funkcję. I gotowe.

Bruno Cunha
źródło
0

Miałem ten sam problem i skorzystałem z poniższego rozwiązania. Używam tego do zmiany partii, katalogów i plików itp .:

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

Jak wyszczególniono tutaj.

zrozumiałem
źródło
0

Żadne z nich nie pomogło mi, nadal git kazał mi ukryć zmiany, ponieważ moja sytuacja była taka, że ​​mój folder lokalny był pisany wielkimi literami, ale zdalny nie, a moja gałąź była w tyle i nie mogłem już ściągać z powodu różnic w wielkości pliku w strukturze folderów.

Jedynym sposobem, w jaki mogłem to naprawić, było usunięcie mojego lokalnego oddziału i sprawdzenie pilota.

Snickers3192
źródło