Ich ändere die Großschreibung eines Verzeichnisses und Git scheint es nicht zu verstehen


138

Ich entwickle ein Projekt unter OS X Lion, das unter Git-Versionskontrolle steht. Ich hatte diese Verzeichnisse in Kleinbuchstaben und habe sie später großgeschrieben (z. B. E-Mail-Adressen => E-Mail-Adressen), aber Git scheint die Änderung nicht zu erkennen. Es denkt immer noch, dass die Verzeichnisse beim Ausführen git ls-filesund anderen Befehlen in Kleinbuchstaben geschrieben sind .

Ist das harmlos oder sollte ich etwas anderes tun, damit Git diese Änderung aufgreift?


1

Dies hat mich 2 Tage lang verwirrt. Jetzt habe ich es verstanden. Danke für diese Frage
Number945

Antworten:


198

Sie verwenden wahrscheinlich HFS +, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird. Normalerweise arbeite ich so herum:

$ git mv somename tmpname
$ git mv tmpname SomeName

1
Dies ist das gleiche Problem, das ich habe, und das ist, was ich tue.
Fernferret

3
Hatte das gleiche Problem mit dem Github für Windows-Tool. Die oben beschriebene Lösung umgeht das Problem erneut: Benennen Sie in Windows Exploer in eine temporäre Datei um und benennen Sie sie nach dem Festschreiben in den endgültigen Namen mit der richtigen Groß- und Kleinschreibung um.
Jason

9
Oder machen Sie es in einem Befehl: git mv --force somename SomeName (von stackoverflow.com/a/16071375/217866 )
jackocnr

1
Damit sich die Änderungen im Remote-Repo widerspiegeln, müssen Sie dies auch tun git push origin master. Wenn git sich weigert, die Fernbedienung zu aktualisieren, müssen Sie möglicherweise eine Dummy-Datei hinzufügen (z. B. touch stam) und den Push ausführen. Anschließend wird stam gelöscht und erneut gedrückt.
Rahav

2
Beachten Sie, dass Sie sich in dem Ordner befinden müssen, in dem sich die Datei befindet, damit dies funktioniert. Es war für mich zunächst nicht offensichtlich und ich bekam immer wieder >>> schlechte Quelle, Quelle = Somename, Ziel = tmpname <<<, weil ich versuchte, den Befehl vom Stammverzeichnis des Repos aus auszuführen.
Parth Tamane

279

Sie können git anweisen, den Fall zu berücksichtigen, indem Sie ausführen

git config core.ignorecase false


4
Wirklich gute Antwort, wenn Sie die Dateinamen bereits geändert haben, ohne git mv --force oder ein anderes CL-Skript zu verwenden. Danke dir!
MeanMatt

4
Dies ist die überlegene Antwort, da ich nicht besonders Lust hatte, 200 umbenannte Dateien manuell zu bearbeiten!
Adam Reis

1
Einverstanden, dass dies die beste Antwort sein sollte. Danke dir.
HomerPlata

1
Aus irgendeinem Grund wurden alle Dateien dupliziert, jetzt habe ich sowohl die Originalversionen als auch die mit Großschreibung geändert ...
Salatiel

1
@ Salatiel Ich denke, es dupliziert sie, wenn Sie die Datei bereits verfolgen.
Iggy

36

Wie man mv auf Mac macht Groß- und Kleinschreibung beachten

Dies geschieht, weil Mac OS X Funktionen zur Beibehaltung der Groß- und Kleinschreibung und zur Unempfindlichkeit gegenüber Groß- und Kleinschreibung implementiert, die Ihnen helfen sollen.

Obwohl die Vorschläge zur doppelten Umbenennung in der anderen Antwort funktionieren, empfehle ich die Verwendung von '--force' für ein Best-Practice-Ergebnis:

$ git mv --force somename SomeName


Hinweis: Wenn Sie es ohne die Force-Option versuchen, wird Git Sie wie folgt belasten:

$ git mv somename SomeName
$ fatal: destination exists, source=somename, destination=SomeName

Im obigen Beispiel schlägt der Befehl git fehl und es werden keine Dateien im Dateisystem oder im git-Index geändert.


Beim ersten Befehl bekomme ich fatal: not under version control.
2540625

Dieser schwerwiegende Fehler bedeutet, dass Sie an diesem Speicherort kein GIT-Repository haben. gitBefehle funktionieren nur in Verzeichnissen mit GIT-Repositorys.
David Manpearl

Aber ich war in einem Unterverzeichnis meines Git-Repos… Am Ende habe ich es über Tarans Antwort BTW gelöst . Vielen Dank.
2540625

19

Versuchen Sie, die Git-Konfigurationsoption core.ignorecase in Ihrer .gitconfig-Datei in false zu ändern.


4
oder schreiben Siegit config core.ignorecase false
iforgotmypassword

2
@iforgotmypassword = Sie hätten es beantworten sollen - ich hätte tatsächlich für Sie gestimmt
Abdeali Chandanwala

4

Die folgenden Schritte haben mir geholfen, das Problem zu beheben:

  1. Benennen Sie den Ordner um in temp:

    mv Folder temp                  // It will rename your Folder to temp
    
  2. Bühne und Commit:

    git add .
    git commit -m "Temp"
    
  3. Benennen Sie den tempOrdner nach Ihren Wünschen um:

    mv temp folder        // It will rename temp folder to the name of your choice(folder)
    git add .
    git commit -m "Folder Fixed"
    

Fertig - Sie können jetzt drücken.


1

Wenn Sie git mv AAA aaaoder tun git mv -f AAA aaa, wird es nicht funktionieren und Sie werden Fehler haben fatal: renaming 'AAA' failed: Invalid argument.

Da AAAund aaasich in Dateisystemen ohne Berücksichtigung der Groß- und Kleinschreibung EIN GLEICHER Ordner / dieselbe Datei befinden, bedeutet Verschieben AAAnach aaaVerschieben AAAals aaa/AAA.

Also solltest du tun

git mv AAA aaa.1
git mv aaa.1 aaa

Ich hoffe es wird hilfreich für Sie sein.


1

Der Grund dafür ist, dass LINUX-basierte Betriebssysteme oder MacOS die Groß- und Kleinschreibung für den Datei- / Ordnernamen ignorieren. Wir müssen dieses Problem durch die folgenden Schritte lösen

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

Keine dieser Lösungen hat bei mir funktioniert. SourceTree hat meine Filiale immer mit einem anderen Fall erstellt, als ich wollte. So löste ich es:

1 - Sehen Sie sich Ihre Git-Dateien im Finder an. Sie können dies tun, indem Sie dies auf dem Terminal eingeben:

- `defaults write com.apple.finder AppleShowAllFiles TRUE`
- `killall Finder`

2 - Starten Sie den Finder neu und wechseln Sie in Ihr Projektverzeichnis

3 - Ändern Sie jetzt einfach Ihren Ordnernamen, sagen wir von Feature zu Feature. Und los geht's.



0

Ich hatte das gleiche Problem und verwende die unten stehende Lösung. Ich benutze dies für Batch-, Verzeichnis- und Dateiumbenennungen usw.:

git rm -r --cached .
git add --all .
git commit -a -m "Versioning updated directory/file names"
git push origin master

Wie hier beschrieben.


0

Nichts davon hat mir wirklich geholfen. Ich musste mich immer noch dazu auffordern, meine Änderungen zu speichern, da mein lokaler Ordner groß geschrieben wurde, die Fernbedienung jedoch nicht, und mein Zweig zurückblieb und ich aufgrund von Unterschieden bei der Dateikapitalisierung nicht mehr ziehen konnte in der Ordnerstruktur.

Die einzige Möglichkeit, dies zu beheben, bestand darin, meinen lokalen Zweig zu löschen und die Fernbedienung auszuchecken.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.