Ändern Sie den Fall einer Datei unter Windows?

209

In unserer git-gesteuerten Codebasis befinden sich einige Dateien, die ich umbenennen möchte. Genauer gesagt, ich will nur den Fall der Datei ändern, so dass sourceCode.javawird SourceCode.java, zum Beispiel. Der Haken: Ich bin auf einer Windows-Box und das Dateisystem glaubt, dass dies der gleiche Dateiname ist.

Wie kann ich Windows und Git dazu bringen, diese Änderung zu erkennen und einzuchecken?

Electrons_Ahoy
quelle
3
Seit Git 2.0.1+ (Juni 2014) sollte ein einfaches git mvfunktionieren ( stackoverflow.com/a/24979063/6309 ). Auch unter Windows.
VonC

Antworten:

336

Weitere Hinweise dazu finden Sie hier:

Wie kann man Git dazu bringen, Änderungen für den Fall zu ignorieren?

Oder:

git mv -f name.java Name.java
Igor Zevaka
quelle
8
Abgesehen davon funktioniert dies auf einem FAT-Dateisystem nicht. Ich trage etwas Projektcode auf einem USB-Stick herum und Falländerungen sind ein echtes Problem.
asm
1
Dies funktionierte nicht für mich auf NTFS-System und Windows 10
Roboblob
1
Dies ist sicherlich der richtige Weg, aber wenn Sie viele Dateien umbenennen müssen, kann dies mühsam sein. Wenn Sie sie bereits irgendwie im Dateisystem umbenannt haben und diese Änderungen nur festschreiben möchten, können Sie einen übergeordneten Ordner umbenennen, einen git adddieser neu umbenannten Ordner ausführen, NICHT VERPFLICHTEN und den Ordnernamen wieder in den gewünschten Namen ändern , git addes wieder und dann begehen.
Okonomiyaki3000
Funktioniert unter NTFS und Windows 7.
Hans Goldman
Ist es möglich, dies in großen Mengen zu tun? zB mit Powershell,Get-ChildItem '.' | Rename-Item {$_.Name.ToLowerCase()}
Killjoy
49

Wenn Sie sich in einem FAT-Dateisystem befinden, können Sie nur eine zweistufige Umbenennung vornehmen:

  1. Umbenennen sourceCode.javainanything.you.like
  2. Umbenennen anything.you.likeinSourceCode.java

In den Tagen, als wir Perforce verwendeten, hatten wir genau dieses Problem und dies war die einzige Lösung, die wir finden konnten.

ChrisF
quelle
13
Nur eine Anmerkung für andere: Es ist nicht notwendig, zwischendurch
festzuschreiben
29

Mit den folgenden Schritten konnte ich den Fall unter Windows ändern:

  • Hinzufügen ignorecase = falsezu [core]in .git/config;
  • Verschieben Sie die Dateien, die Sie umbenennen möchten, aus Ihrem Projektverzeichnis.
  • Fügen Sie die Löschungen zum Index hinzu.
  • Verschieben Sie alle Dateien an ihren ursprünglichen Speicherort zurück und ändern Sie die Groß- und Kleinschreibung der Dateien und / oder Verzeichnisse.
  • Fügen Sie dem Index alle "neuen" Dateien hinzu.
  • Entfernen Sie ignorecase = falseim ersten Schritt hinzugefügt.

Auf diese Weise haben Sie ein einzelnes Commit, das die Umbenennung enthält, und es macht es einfach, z. B. ein gesamtes Verzeichnis zu ändern.

Pieter van Ginkel
quelle
5
Tun Sie es für globale und lokale Badeinstellungen: $ gti config --global core.ignorecase false $ gti config core.ignorecase false
Roman Ivanov
6

Achtung. Dies kann zu Änderungen führen, die nicht zusammengeführt werden können. Git wird beim Zusammenführen unter Windows verwirrt, da es nicht entscheiden kann, ob der alte Großbuchstabenname und der neue Kleinbuchstabenname dieselbe Datei sind oder nicht (für Git sind sie nicht, für das Dateisystem jedoch). Zum Zusammenführen müssen Sie einige manuelle Problemumgehungen wie das Löschen der Dateien vor dem Zusammenführen durchführen.

Siehe Git-Rebase-Problem mit Dateien mit demselben Namen, aber unterschiedlicher Groß- und Kleinschreibung

Ich bin mir nicht sicher, ob dieses Problem schlimmer ist, als eine unkonventionell benannte Datei für immer und ewig in Ihrem Projekt zu haben, aber es lohnt sich zu wissen, ob es viele Benutzer mit vielen Zweigen gibt, die alle irgendwann zusammengeführt werden müssen.

jwg
quelle
Unkonventionell benannte Dateien in mittleren bis großen Projekten sollten nach Möglichkeit immer vermieden werden, da sie Probleme bei der Entwicklung für mehrere Plattformen verursachen. Wenn Sie das Problem erst später beheben, werden die Probleme durch die Korrektur schwerwiegender.) Manchmal entwickeln Sie unter Windows, müssen aber auch einen Linux-Build ausführen, und ein Include, das unter Windows gut funktioniert, führt dazu, dass der Build unter Linux unterbrochen wird.
Griffork
3

Meiner Meinung nach fehlt ein einfacher Weg. Sie können dies für eine einzelne Datei, ein bestimmtes Verzeichnis oder sogar das gesamte Repository tun:

git rm --cached <file name or directory>
git add <file name or directory>

Wenn Sie auch die Unterverzeichnisse beeinflussen möchten, müssen Sie das -rFlag verwenden:

git rm -r --cached <directory>
git add <directory>
Nils-o-mat
quelle
Wirklich die einfachste.
Ranu
Dadurch geht der gesamte Verlauf der Datei verloren, da sie von git als völlig neu festgelegt wird.
Alejandro
@ Alejandro Was du sagst ist falsch. Ich habe es gerade getestet und Git hat die Umbenennung ohne Probleme erkannt. Wie in anderen Fällen wird die Datei im Index als entfernt / neu angezeigt, aber während des Festschreibens bemerkt git, dass sie gerade umbenannt wurde.
Nils-o-mat