666 Stimmen

Ändern der Großschreibung von Dateinamen in Git

Ich versuche, eine Datei umzubenennen, damit sie eine andere Großschreibung hat als zuvor:

git mv src/collision/b2AABB.js src/collision/B2AABB.js
fatal: Ziel existiert bereits, Quelle=src/collision/b2AABB.js, Ziel=src/collision/B2AABB.js

Wie du siehst, reagiert Git darauf gereizt. Ich habe auch versucht, die Umbenennung nur mit dem guten alten mv-Befehl durchzuführen, aber Git erkennt die Umbenennung nicht (weder als Umbenennung noch als neue nicht verfolgte Datei).

Wie kann ich eine Datei umbenennen, damit sie eine andere Großschreibung des gleichen Namens hat? Ich benutze Mac OS X v10.7.3 (Lion) mit Git 1.7.9.1 und Z Shell (zsh) 4.3.15.

850voto

VonC Punkte 1117238

Ab Git 2.0.1 (25. Juni 2014) funktioniert git mv jetzt auf einem Groß- und Kleinschreibung ignorierenden Betriebssystem.

Siehe Commit baa37bf von David Turner (dturner-tw).

mv: Umbenennung zur Korrektur der Groß- und Kleinschreibung auf Groß- und Kleinschreibung ignorierenden Dateisystemen erlauben

"git mv hello.txt Hello.txt" auf einem Groß- und Kleinschreibung ignorierenden Dateisystem löst immer einen "Ziel existiert bereits" Fehler aus, da diese beiden Namen aus Sicht des Dateisystems auf denselben Pfad verweisen und vom Benutzer "--force" verlangen, wenn die Groß- und Kleinschreibung des im Index und im nächsten Commit aufgezeichneten Pfads korrigiert wird.

Erkenne diesen Fall und erlaube ihn, ohne "--force" zu benötigen.

git mv hello.txt Hello.txt funktioniert einfach (kein --force mehr erforderlich).


Die andere Alternative ist:

git config --global core.ignorecase false

Und benennen Sie die Datei direkt um; git add und commit.

Es funktioniert in der CMD. Es könnte in einer Git-Bash-Sitzung (auf Windows) fehlschlagen (siehe Antwort von Louis-Caron auf Stackoverflow)

Wie von jaquinocode in den Kommentaren festgestellt, wenn Ihr lokales Repository selbst diese Einstellung hat:

git config --local core.ignorecase false

507voto

Marcello de Sales Punkte 19324

Unter Berücksichtigung von larsks' Antwort, können Sie es mit einem einzigen Befehl mit "--force" zum Laufen bringen:

 git mv --force myfile MyFile

148voto

MrHus Punkte 31640

Manchmal möchten Sie die Großschreibung von vielen Dateinamen auf einem Dateisystem, das nicht auf Groß- und Kleinschreibung achtet, ändern (z. B. auf macOS oder Windows). Das Ausführen einzelner git mv Befehle wird schnell müde. Um die Dinge ein wenig einfacher zu machen, mache ich folgendes:

  1. Verschieben Sie alle betroffenen Dateien außerhalb des Verzeichnisses, sagen wir, auf den Desktop.
  2. Führen Sie ein git add . -A aus, um die Entfernung dieser Dateien zu inszenieren.
  3. Benennen Sie alle Dateien auf dem Desktop entsprechend der Großschreibung um.
  4. Verschieben Sie alle Dateien zurück in das Originalverzeichnis.
  5. Führen Sie ein git add . aus. Git sollte erkennen, dass die Dateien umbenannt wurden.

Jetzt können Sie einen Commit machen und sagen, dass Sie die Großschreibung des Dateinamens geändert haben.

73voto

larsks Punkte 222913

Dateinamen unter OS X sind standardmäßig nicht Groß- und Kleinschreibungssensitiv. Dies ist eher ein Problem des Betriebssystems als ein Git-Problem. Wenn Sie die Datei entfernen und erneut hinzufügen, sollten Sie bekommen, was Sie wollen, oder benennen Sie sie um und benennen Sie sie dann zurück.

51voto

Segmented Punkte 1924

Setze ignorecase in der Git-Konfiguration auf false

Da der ursprüngliche Beitrag sich um "Ändern der Groß- und Kleinschreibung von Dateinamen in Git" handelt:

Wenn du versuchst, die Groß- und Kleinschreibung eines Dateinamens in deinem Projekt zu ändern, musst du ihn nicht gewaltsam über Git umbenennen. Meiner Meinung nach würde ich die Groß- und Kleinschreibung lieber über meine IDE/Editor ändern und sicherstellen, dass ich Git richtig konfiguriere, um die Umbenennung zu erkennen.

Standardmäßig ist eine Git-Vorlage so eingestellt, dass die Groß- und Kleinschreibung ignoriert wird (Git ist nicht case-sensitive). Um zu überprüfen, ob du die Standardvorlage hast, verwende --get, um den Wert für einen angegebenen Schlüssel abzurufen. Verwende --local und --global, um Git anzuzeigen, ob es einen Konfigurationsschlüssel-Wert aus deiner lokalen Git-Repository-Konfiguration oder der globalen aufnehmen soll. Als Beispiel, wenn du deinen globalen Schlüssel core.ignorecase nachschlagen möchtest (wenn die Befehle nichts zurückgeben, musst du wahrscheinlich mit sudo voranstellen):

git config --global --get core.ignorecase

Wenn dies true zurückgibt, stelle sicher, dass du es wie folgt einstellst:

git config --global core.ignorecase false

(Stelle sicher, dass du die entsprechenden Berechtigungen hast, um global zu ändern.) Und da hast du es; jetzt ignoriert deine Git-Installation Groß- und Kleinschreibung nicht mehr und behandelt sie als Änderungen.

Als Vorschlag, wenn du an mehrsprachigen Projekten arbeitest und der Meinung bist, dass nicht alle Projekte von Git als case-sensitive behandelt werden sollten, aktualisiere einfach die lokale Datei core.ignorecase.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X