Ist Git nicht zwischen Groß- und Kleinschreibung zu unterscheiden?

96

In der ersten Verpflichtung meines Teilaufrufs _Electronicswurde es beginnend mit einem Großbuchstaben geschrieben, dann habe ich es in geändert _electronics.

Git unter Cygwin ignorierte den Fall nach dem Festschreiben des neuen Namens, daher habe ich den Namen im Ziel-Repo von Hand geändert.

Jetzt ändert es manchmal den festgeschriebenen _electronicsTeil zu _Electronics.

Was habe ich falsch gemacht?

JAkk
quelle
9
Auf welchem ​​Betriebssystem bist du?
Keith Thompson
10
Welches Dateisystem verwenden Sie?
Andrew Marshall
Windows mit Cygwin. Auf meinem Server läuft Ubuntu Linux. Ich kenne das Dateisystem nicht, ich denke ext3 oder ext2 - mein Provider hat die minimale Installation konfiguriert.
JAkk
Sind Sie nicht froh, dass Windows entschieden hat, nicht zwischen Groß- und Kleinschreibung zu unterscheiden?
Cascabel
4
Windows unterscheidet nicht zwischen Groß- und Kleinschreibung, aber manchmal (heute häufiger) wird die Groß- und Kleinschreibung beibehalten .
Arafangion

Antworten:

73

Es werden zwei verschiedene Dinge angezeigt, die jedoch Probleme auf einem System verursachen, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird. Wenn dies der Fall ist, stellen Sie sicher, dass Sie alle Pfade oder Dateinamen auf der Registerkarte ausfüllen. Um den Namen von etwas in diesem Fall zu ändern, gehen Sie folgendermaßen vor:

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"

Dies ist eine explizite Methode, um Änderungen vorzunehmen, die sie festschreiben, und dann die Festschreibungen zu reduzieren. Eine kürzere Möglichkeit besteht darin, den Index und den Arbeitsordner in einem zu bearbeiten:

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

Dies hängt auch mit dem Anpassen von Verzeichnisnamen zusammen: git mv und nur die Groß- / Kleinschreibung des Verzeichnisses ändern

Adam Dymitruk
quelle
Sieht so aus, als wäre das richtig (außer dass ich von Großbuchstaben zu Kleinbuchstaben gewechselt habe)
JAkk
Ich habe einen Blick darauf geworfen, solange ich an Cygwin gewöhnt bin, ist es einfach bequemer, Cygwin zu verwenden - danke für den Hinweis
JAkk
Du kannst es einfach tun git mv file.txt File.txt. Ich bin mir nicht sicher, ob dies eine neue Git-Funktion ist.
Phil
107

core.ignorecaseDies hängt vom Konfigurationswert ab, der in Dateisystemen mit Groß- und Kleinschreibung auf false und in msysgit unter Windows auf true festgelegt ist.

core.ignorecase

Wenn true, können mit dieser Option verschiedene Problemumgehungen aktiviert werden, damit git auf Dateisystemen, bei denen nicht zwischen Groß- und Kleinschreibung unterschieden wird, wie z. B. FAT, besser funktioniert. Wenn eine Verzeichnisliste beispielsweise "makefile" findet, wenn git "Makefile" erwartet, geht git davon aus, dass es sich tatsächlich um dieselbe Datei handelt, und merkt sich diese weiterhin als "Makefile".

Der Standardwert ist false, außer dass git-clone (1) oder git-init (1) core.ignorecase prüfen und gegebenenfalls auf true setzen, wenn das Repository erstellt wird.

Weitere Details in dieser Antwort zu Ändern der Groß- und Kleinschreibung von Dateinamen in Git .

Manojlds
quelle
79
Dies ist die richtige Antwort imo. Für zukünftige mich git config --unset-all core.ignorecase && git config --system core.ignorecase falsemit sudo verwenden.
Znarkus
2
Ebenso wie James hat @Znarkus die Lösung für dieses Problem unter OS X gefunden. Danke!
Craig Nakamoto
1
@Znarkus Funktioniert auch unter Windows. Wunderschönen.
Orlade
9
@Znarkus, das Problem dabei unter OSX ist, dass wenn Sie eine Datei über den Finder umbenennen und nur die Groß- und Kleinschreibung ändern, git die umbenannte Version als völlig neue Datei sieht, aber kein entsprechendes "Löschen" generiert. Aktion für die alte Version der Datei. Wenn Sie also ein Commit durchführen und auf github pushen, hat github sowohl die alte als auch die neu benannte Datei, aber Ihr lokales System hat nur die neue Datei, und git ist nicht klüger.
Ivananese
2
@spiralganglion Für Webentwickler unter OSX kann ich wirklich empfehlen , eine Partition zu erstellen, bei der zwischen Groß- und Kleinschreibung unterschieden wird, und sie dann als Ihr WWW-Verzeichnis bereitzustellen.
Znarkus
23

Das ist viel einfacher:

git mv Electronics electronics -f
git commit -m "That was easy!"
Arnoud
quelle
1
Haben Sie dies in einem Dateisystem ohne Berücksichtigung der Groß- und Kleinschreibung versucht?
Edward Thomson
1
Ich habe dies zunächst als Originalposter gelesen, bei dem versucht wurde, einen Ordner und keine Datei in Groß- und Kleinschreibung umzubenennen. Jetzt, wo ich das noch einmal lese, ist es unklar. In der Tat mv -fwird für eine Datei arbeiten.
Edward Thomson
21
git config --system core.ignorecase false
Cemo
quelle
0

In meinem Szenario hatte ich zwei Ordner testsund Testsdie zeigten , wie zwei separate Ordner in Github aber einen einzigen TestsOrdner in Windows. Mein Ziel war es, beide zu kombinieren tests.

Ich habe den folgenden Ansatz verwendet:

  1. Einen neuen Ordner erstellen temp
  2. Kopieren Sie den gesamten Inhalt von Testsnachtemp
  3. Löschen Tests
  4. ausführen git rm Tests -r
  5. Umbenennen tempintests
Jeroen Vannevel
quelle
0

Ich habe versucht, das Problem zu lösen, und es war unter Windows 10 erfolgreich

Nehmen wir an, es gibt zwei Ordner auf Bitbucket TEST und Test, aber wenn ich Repo auf die Festplatte klone, wird nur TEST erstellt, und ich möchte den Test als einzelnen Ordner auf Git beibehalten, der alle Dateien enthält.

Ich muss die folgenden Befehle in der Befehlszeile ausführen git mv TEST test1 -f git mv text1 test -f git commit -m "Umbenennen ..." git push

Jetzt werden Sie sehen, dass die Ordnerhierarchie auf Bitbucket korrigiert wurde.

Nitesh Goyal
quelle