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ę?



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

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


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.


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


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ć.


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.


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"

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.



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.


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.

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.