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

98

W pierwszym zobowiązaniu mojej częściowej nazwano _Electronicsgo, zaczynając od wielkich liter, potem zmieniłem go na _electronics.

Git pod cygwin zignorował przypadek po zatwierdzeniu nowej nazwy, więc ręcznie zmieniłem nazwę w docelowym repozytorium.

Teraz czasami zmienia zobowiązaną stronniczość _electronicsna _Electronics.

Co zrobiłem źle?

JAkk
źródło
9
Z jakiego systemu operacyjnego korzystasz?
Keith Thompson
10
Jakiego systemu plików używasz?
Andrew Marshall,
Windows z cygwinem. Na moim serwerze działa Ubuntu Linux. Nie znam systemu plików, chyba ext3 lub ext2 - mój dostawca skonfigurował minimalną instalację.
JAkk
Nie cieszysz się, że Windows zdecydował się nie rozróżniać wielkości liter?
Cascabel
4
Windows nie rozróżnia wielkości liter, ale czasami (dziś częściej) zachowuje wielkość liter .
Arafangion

Odpowiedzi:

74

Będzie to postrzegane jako dwie różne rzeczy, ale spowoduje problemy w systemie bez rozróżniania wielkości liter. W takim przypadku upewnij się, że uzupełniasz wszystkie ścieżki lub nazwy plików za pomocą tabulacji. Ponadto, aby zmienić nazwę czegoś tylko w przypadku, zrób to:

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 jawny sposób wprowadzania zmian poprzez ich zatwierdzanie, a następnie zwijanie 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 również związane z dostosowywaniem nazw katalogów: git mv i tylko zmiana wielkości liter w katalogu

Adam Dymitruk
źródło
wygląda na to, że to było w porządku (z wyjątkiem tego, że zmieniałem z wielkich liter na małe)
JAkk
Zajrzałem do niego, o ile jestem przyzwyczajony do cygwina, po prostu wygodniej jest używać cygwina - dzięki za wskazówkę
JAkk
Możesz po prostu to zrobić git mv file.txt File.txt. Nie jestem pewien, czy jest to nowa funkcja gita.
Phil,
108

Będzie to zależeć od core.ignorecasewartości konfiguracyjnej, która jest ustawiona na false w systemach plików z rozróżnianiem wielkości liter i true w msysgit w systemie Windows.

core.ignorecase

Jeśli prawda, ta opcja umożliwia różne obejścia, aby umożliwić gitowi lepszą pracę na systemach plików, które nie uwzględniają wielkości liter, takich jak FAT. Na przykład, jeśli listing katalogu znajdzie „makefile”, gdy git oczekuje „Makefile”, git przyjmie, że jest to naprawdę ten sam plik i nadal zapamięta go jako „Makefile”.

Wartością domyślną jest false, z wyjątkiem tego, że git-clone (1) lub git-init (1) sondują i ustawiają core.ignorecase na wartość true, jeśli jest to konieczne, podczas tworzenia repozytorium.

Więcej szczegółów w tej odpowiedzi na temat Zmiana wielkości liter w nazwach plików w Git .

manojlds
źródło
80
To jest poprawna odpowiedź imo. Dla mnie w przyszłości użyj git config --unset-all core.ignorecase && git config --system core.ignorecase falsez sudo.
Znarkus
2
tak samo jak James, @Znarkus zidentyfikował poprawkę dla tego problemu w systemie OS X, dzięki!
Craig Nakamoto
1
@Znarkus działa również w systemie Windows. Piękny.
orlade
9
@Znarkus, problem z robieniem tego na OSX polega na tym, że gdy zmienisz nazwę pliku za pomocą wyszukiwarki i zmienisz tylko wielkość liter, git zobaczy wersję o zmienionej nazwie jako zupełnie nowy plik, ale nie wygeneruje odpowiedniego "usunięcia" działanie dla starej wersji pliku. Więc jeśli zatwierdzisz i uruchomisz github, github będzie miał zarówno stary, jak i nowo nazwany plik, ale twój lokalny system będzie miał tylko nowy plik, a git nie będzie mądrzejszy.
ivanreese
2
@spiralganglion Dla twórców stron internetowych na OSX naprawdę mogę polecić utworzenie partycji z uwzględnieniem wielkości liter, a następnie zamontowanie jej jako katalogu www.
Znarkus
23

To jest o wiele łatwiejsze:

git mv Electronics electronics -f
git commit -m "That was easy!"
Arnoud
źródło
1
Czy próbowałeś tego na systemie plików bez rozróżniania wielkości liter?
Edward Thomson,
1
Początkowo czytałem to jako oryginalny plakat próbujący zmienić nazwę folderu, a nie pliku. Teraz, kiedy to ponownie przeczytałem, nie jest to jasne. Rzeczywiście, mv -fbędzie działać dla pliku.
Edward Thomson,
22
git config --system core.ignorecase false
Cemo
źródło
0

W moim scenariuszu miałem dwa foldery testsi Testsktóry pokazał w dwóch oddzielnych folderach w Github tylko jeden Testsfolder w systemie Windows. Moim celem było połączenie ich obu w tests.

Zastosowałem następujące podejście:

  1. Stworzyć nowy folder temp
  2. Skopiuj całą zawartość z Testsdotemp
  3. Usunąć Tests
  4. wykonać git rm Tests -r
  5. Zmień nazwę tempnatests
Jeroen Vannevel
źródło
0

Próbowałem rozwiązać problem i udało się to na Windows10

Załóżmy, że w bitbucket TEST i test są dwa foldery, ale kiedy klonuję repozytorium na dysku, tworzy tylko TEST i chcę zachować test jako pojedynczy folder na git, który zawiera wszystkie pliki.

Będę musiał wykonać następujące polecenia w wierszu poleceń git mv TEST test1 -f git mv text1 test -f git commit -m "zmiana nazwy ..." git push

Teraz zobaczysz, że hierarchia folderów została poprawiona w programie bitbucket.

Nitesh Goyal
źródło