2013-03-18 12 views
10

Ich arbeite mit Git auf Windows, und ich habe eine Datei in meinem Repo, sagen wir "foo.txt". Heute wollte ich diese Datei in "Foo.txt" (Großbuchstaben) umbenennen. Wie in this SO question vorgeschlagen, verwendete ich git mv -f foo.txt Foo.txt, was das gewünschte Ergebnis ergab. Ich ging zu commit die Änderung zu meinem Repo.
EDIT: Ich möchte, dass dies eine dauerhafte Änderung sein, und immer noch in der Lage sein, zu begehen, dass diese Änderung vorausgehen.Git auf Windows: Kann den Zweig nach dem Umbenennen einer Datei nicht wechseln (nur geändert Fall)

jedoch danach traf ich einen Fehler beim Versuch Zweig wechseln:

[core] 
    ignorecase=false 

diese Änderung zu:

# I'm on branch1 
git checkout branch2 
Aborting 
error: The following untracked working tree files would be overwritten by checkout: 
Foo.txt 
Please move or remove them before you can switch branches. 

Nach einigem Stochern ich, dass meine .git/config Datei die folgende Einstellung gefunden hatte true scheint das Problem zu beheben und erlaubt mir, wie gewohnt zwischen Zweigen zu wechseln.

dies also in Bezug auf, würde ich gerne wissen:

  1. Gibt es einen negativen Effekt dieser Einstellung? Sollte es immer unter Windows sein? Was ist, wenn ich mit anderen Entwicklern arbeite und sie nicht den gleichen Wert dafür haben?
  2. Gibt es eine andere Möglichkeit, die Datei umzubenennen, ohne diese Einstellung ändern zu müssen?
  3. Warum passiert das überhaupt? Als ich die Änderung festlegte, erkannte Git korrekt, dass die Datei tatsächlich umbenannt wurde (löschte nicht eine Datei und fügte dann noch eine hinzu). Was ist genau passiert, als ich versucht habe, die Filialen zu wechseln?

Vielen Dank!

Antwort

1

Eine einfache (aber unelegante) Möglichkeit, dieses Problem zu lösen, ohne die Konfigurationseinstellung ändern zu müssen, besteht darin, die Datei zu löschen und erneut auszuprobieren. Bei mir hat das meine Äste wieder wie normal verzweigen lassen.

Edit: Wie Avivr darauf hingewiesen hat, löst meine vorgeschlagene Problemumgehung das Problem nicht dauerhaft. Ich werde diese Antwort immer noch nicht löschen, da sie in einigen Fällen als temporäres Hot-Fix hilfreich sein kann.

+0

Das würde bedeuten, dass ich die Datei jedes Mal löschen würde, wenn ich den Zweig wechseln möchte, von nun an bis für immer. Recht? Das scheint irgendwie unbequem zu sein ... – avivr

+0

Hast du es tatsächlich versucht? In meinem Fall hat es funktioniert, aber ich werde nicht behaupten, dass ich deine Situation vollständig reproduzieren könnte. – bigge

+0

Ja, das habe ich zumindest vorausgesetzt, dass ich dich richtig verstanden habe. Ich habe die Datei mit git umbenannt und dann die Änderung vorgenommen. Dann löschte ich die Datei (nur mit 'rm') und benutzte' git checkout.' um sie wiederherzustellen. Danach gleicher Fehler beim Wechseln der Verzweigung. – avivr

2

Wie unter "Unresolvable Git error: The following untracked working tree files would be overwritten by checkout" erwähnt, ist die Einstellung core.ignorecase auf true ein gültiger Weg, um das Auschecken zu ermöglichen.

Aber ich würde es vorziehen, wie in "GIT: The following untracked working tree files would be overwritten by checkout", zu:

  • git add was (hinzugefügt in Ihrem Fall git mv haben könnte bereits die umbenannte Datei in den Index) I geändert nur
  • git stash, Speichern des Index
  • git checkout -b anotherBranch: dies funktionieren sollte, da der Index
  • git stash pop sauber ist, wenn Sie den Fall Änderung an diesem neuen Index wiederherstellen möchten.
+0

Ok, aber ich möchte die Umbenennung bestätigen. Das Problem ist, dass wenn ich das tue, ich die Filialen danach nicht wechseln kann. – avivr

+0

@avivr Sie können nicht nach dem Festschreiben wechseln, auch wenn 'core.ignore' auf' false' gesetzt ist? – VonC

+0

Nein, wie ich schon sagte, ich kann den Zweig nur wechseln, wenn er auf "True" gesetzt ist. Außerdem habe ich, nachdem ich den Umbenenner wie vorgeschlagen versteckt habe, den gleichen Fehler bekommen, als ich versucht habe, den Stash zu öffnen. Der Vorrat war also "unbezahlbar" und ich musste ihn fallen lassen. – avivr