Pytanie Czy git nie rozróżnia wielkości liter?


W pierwszym zobowiązaniu mojej częściowej nazwie _Electronics napisano na początku wielkimi literami, a potem zmieniłem na _electronics.

Git pod cygwin zignorował sprawę po zatwierdzeniu nowego nazwiska, więc zmieniłem nazwę ręcznie w repo docelowym.

Teraz czasami zmienia popełnione _electronics częściowe do _Electronics.

Co zrobiłem źle?


76
2017-12-12 22:00


pochodzenie


Na jakim systemie operacyjnym jesteś? - Keith Thompson
Z jakiego systemu plików korzystasz? - Andrew Marshall
Windows z cygwin. Mój serwer uruchamia system Ubuntu Linux. Nie znam systemu plików, domyślam się ext3 lub ext2 - mój dostawca skonfigurował minimalną instalację. - JAkk
Czy nie cieszysz się, że Windows postanowił nie uwzględniać wielkości liter? - Cascabel
W systemie Windows nie ma znaczenia wielkość liter, ale czasami (częściej już dziś) konserwowanie. - Arafangion


Odpowiedzi:


Będzie to widoczne jako 2 różne rzeczy, ale spowoduje problemy w systemie bez rozróżniania wielkości liter. W takim przypadku upewnij się, że wypełniasz tabulatorami dowolne ścieżki lub nazwy plików. Ponadto, aby zmienić nazwę czegoś w tym przypadku, wykonaj następujące czynności:

mv file.txt temp.txt
git add -A
git commit -m "renaming..."
mv temp.txt File.txt
git add -A
git commit --amend -m "Renamed file.txt to File.txt"

Jest to wyraźny sposób wprowadzania zmian, które je popełniają, a następnie zwijania zatwierdzeń. Krótszym sposobem jest manipulowanie indeksem i folderem roboczym w jednym:

git mv file.txt temp.txt
git mv temp.txt File.txt
git commit -m "Renamed file.txt to File.txt"

Jest to związane również z dostosowywaniem nazw katalogów: git mv i zmienia tylko wielkość katalogu


65
2017-12-12 22:06



wygląda na to, że to prawda (poza tym, że zmieniałem się z wielkich liter na małe) - JAkk
Czy wypróbowałeś msysgit w oknach? - Adam Dymitruk
Zajrzałem do niego, tak długo jak jestem przyzwyczajony do cygwin, wygodniej jest używać cygwin - dzięki za podpowiedź - JAkk
Możesz po prostu zrobić git mv file.txt File.txt. Nie jestem pewien, czy jest to nowa funkcja git. - Phil


To będzie zależeć od core.ignorecase wartość konfiguracyjna, która jest ustawiona na wartość false w przypadku systemów plików wrażliwych na wielkość liter i prawdziwa w msysgit w systemie Windows.

core.ignorecase

Jeśli ma wartość true, ta opcja umożliwia różne obejścia, aby umożliwić git działanie lepiej na systemach plików, które nie są rozróżniane wielkości liter, takich jak FAT. Dla   na przykład, jeśli lista katalogowa znajdzie "plik Makefile", gdy git oczekuje   "Makefile", git założy, że to naprawdę ten sam plik i będzie kontynuowany   aby zapamiętać go jako "Makefile".

Wartością domyślną jest false, z wyjątkiem git-clone (1) lub git-init (1) sonduje i ustawia core.ignorecase true, jeśli jest to właściwe, gdy repozytorium   jest tworzone.


90
2017-12-12 22:46



To jest poprawna odpowiedź imo. Dla przyszłości mnie, użyj git config --unset-all core.ignorecase && git config --system core.ignorecase false z sudo. - Znarkus
ditto to James, @Znarkus zidentyfikował poprawkę dla tego problemu na OS X, Dzięki! - Craig Nakamoto
@Znarkus działa również w systemie Windows. Piękny. - orlade
@Znarkus, problem z robieniem tego na OSX polega na tym, że kiedy zmieniasz nazwę pliku przez wyszukiwarkę i zmieniasz tylko wielkość liter, git zobaczy zmienioną wersję jako zupełnie nowy plik, ale nie generuje odpowiadającego "delete" akcja dla starej wersji pliku. Jeśli więc zatwierdzisz i popchniesz do github, github będzie miał zarówno starą nazwę, jak i nowo nazwany plik, ale twój lokalny system będzie miał tylko nowy plik, a git nie będzie mądrzejszy. - ivanreese
@spiralganglion Dla web dev na OSX mogę naprawdę polecić tworzenie partycji z rozróżnianiem wielkości liter a następnie zamontuj go jako swój katalog www. - Znarkus


To jest znacznie łatwiejsze:

git mv Electronics electronics -f
git commit -m "That was easy!"

21
2018-02-12 16:17



Czy próbowałeś tego w systemie plików niewrażliwym na wielkość liter? - Edward Thomson
@Edward tak, OS X - Arnoud
Początkowo czytałem to jako oryginalny plakat próbujący zmienić nazwę folderu, a nie pliku. Teraz, kiedy ponownie to przeczytam, nie jest to jasne. W rzeczy samej, mv -f będzie działać dla pliku. - Edward Thomson


git config --system core.ignorecase false

19
2017-07-07 11:52