Problem beim Umbenennen eines Verzeichnisses in Git in Kleinbuchstaben während ignoreLowercase = True

8

Wenn ich git status eintippe, sehe ich:

%Vor%

In meinem Arbeitsverzeichnis sehe ich jedoch, dass diese Datei tatsächlich dir/a heißt (beachten Sie den Kleinbuchstaben dir anstelle von DIR ).

Frage: Ich möchte diese modifizierte a -Datei zum Staging-Bereich hinzufügen und committen, aber ich möchte, dass sie in meinem Arbeitsverzeichnis ist (was dir/a anzeigt) - im Gegensatz zu der Art, wie git es als DIR/a sieht. Wie kann ich das tun?

Wichtiger Hinweis:

Leider kann ich nicht einfach git mv DIR/a dir/a , weil DIR/a tatsächlich nicht im Arbeitsbaum existiert.

Momentan zeigt meine .git/config -Datei ingorecase = true , also weiß ich, dass ich das gleich false setzen muss. Nachdem Sie jedoch nichts anderes getan haben, als dieses Flag zu ändern, enthüllt ein git status jetzt:

%Vor%

Ich habe das erwartet, da git nur Inhalte verfolgt, und wenn ich ignoriere, würde git denken, dass eine neue Datei hinzugefügt wurde. Leider denkt Git jetzt, dass ich zwei Dateien habe, die modifiziert werden, obwohl ich tatsächlich nur eine habe. Ich möchte git status zeigen einfach dir/a (wie es in meinem Arbeitsverzeichnis ist) anstelle von DIR/a , mit den gleichen Diffs von a , die ich gerade gemacht habe.

Zusätzliche Anmerkung

Wenn Sie neugierig sind, wie solch eine prekäre Situation überhaupt entstanden ist, ist es mir gelungen, die dummen Fehler zu wiederholen, die ich gemacht hatte, als ich ursprünglich den Fall meines Verzeichnisses von DIR in dir umbenannte. Wenn Sie denken, dass dies helfen würde, eine Lösung für dieses Problem zu finden, würde ich gerne einen Schnitt machen, der aufzeigen würde, wie ich irrtümlicherweise den Idioten so verwirrt habe. (Es bedeutet, dass ich versehentlich mv anstelle von git mv ankreuze und das ignorecase -Flag nicht bemerkt und es als ignorecase=true belässt).

    
smaccoun 02.11.2012, 19:37
quelle

2 Antworten

16

Ich habe einen Workaround gefunden. Ich bin mir nicht sicher, ob es eine elegantere Lösung gibt, aber ich habe das getestet und es funktioniert. Da git immer noch denkt, dass zwei Dateien existieren, wenn nur eine existiert, musste ich eigentlich nur das Verzeichnis komplett kopieren, entfernen, was git als Datei verfolgt, und dann das kopierte Verzeichnis zurück auf das Original.

(1) Übernehmen Sie alle Dateien in dir , die committiert werden müssen.

(2) cp -r dir tempDir

(3) git add tempDir/

(4) git rm -r dir Dir

(5) git commit -m "Temporary rename of dir to tempDir"

(6) git mv tempDir mms

(7) git commit -m "Full rename from DIR to dir complete"

    
smaccoun 05.11.2012, 22:42
quelle
21

Beispiel: Wenn Sie Mydir im unteren Gehäusebereich haben

%Vor%     
Eduardo Duran Diaz 04.06.2015 21:52
quelle

Tags und Links