Warum sollte ein einfaches `git mv` fehlschlagen?

Lesezeit: 2 Minuten

Ich versuche, eine Datei in einem lokalen umzubenennen .git directory:

git mv MyProj/src/ts0621/foobar.c NewProjName/src/ts0629/foobar.c

Git schlägt jedoch fehl mit:

fatal: renaming 'MyProj/src/ts0621/foobar.c' failed: No such file or directory

Ich könnte schwören, dass ich hatte git mv funktioniert für mich beim Umbenennen eines Unterverzeichnisses, aber aus irgendeinem Grund funktioniert ein einfaches Umbenennen einer Datei nicht. Wieso den?

(Ich habe natürlich überprüft, ob die Datei MyProj/src/ts0621/foobar.c existiert, bevor versucht wird, diesen Befehl auszugeben)

  • Hat das Verzeichnis NewProjName/src/ts0629 gibt es auch?

    – LaC

    11. Juli 2011 um 19:53 Uhr

Wahrscheinlich, weil NewProjName/src/ts0629 nicht existiert

Versuchen

mkdir -pv NewProjName/src/ts0629
git add NewProjName/src/ts0629

  • Es stimmt, dass NewProjName/src/ts0629 nicht existiert, aber in der Vergangenheit so etwas wie git mv OldProj/src/ts0619 MyProj/src/ts0621 nie gescheitert trotz MyProj/src/ts0621 nicht existierend. Behandelt Git Verzeichnisse anders als Dateien?

    – WinWin

    11. Juli 2011 um 19:58 Uhr

  • @WinWin: Der Unterschied liegt in der Verschachtelungsebene; git behandelt verschachtelt Dateien anders; Es wird nicht automatisch erstellt und hinzufügen die fehlenden übergeordneten Verzeichnisse und machen sie verfolgt alles auf einmal. Bei Tippfehlern wäre das wahrscheinlich nicht das, was Sie wollten

    – sehen

    11. Juli 2011 um 20:06 Uhr


  • OK. Wenn das der Fall ist, würde ich sagen, dass die Fehlermeldung von git irreführend ist. 🙂 Es sollte begleiten No such file or directory mit dem nicht vorhandenen Zielpfad, nicht dem vorhandenen Quellpfad. In Ermangelung einer besseren Option werde ich Ihre Problemumgehung verwenden.

    – WinWin

    11. Juli 2011 um 20:21 Uhr


  • @WinWin: Die Nachricht ist ein Nebeneffekt der Unterstützung von git für zB git mv 1/a 1/b 2/c 2/d dest/; Es wird die erwähnen Quellpfad weil es möglicherweise nicht klar ist, für welchen Pfad es fehlschlägt, wenn dest tut existieren

    – sehen

    11. Juli 2011 um 20:30 Uhr


  • @JohnnyKauffman Nein, Ihr Punkt war zu schimpfen. Das hast du ganz deutlich gesagt. 😉 Sie haben auch gesagt, dass es sich um einen einfachen Anwendungsfall handelt und dass “die meisten Systeme dies als Fehler identifizieren würden”. Ich glaube nicht, dass das stimmt. Ansonsten hat jedes VCS, das ich jemals benutzt habe, unter diesem “Bug” gelitten. Ich denke, sie alle identifizieren es als “by design”. So auch das einfache Unix mv, übrigens. Es kann auch nicht in nicht vorhandene Verzeichnisse verschoben werden. Ist mv Buggy? Dein Sonstiges Punkt, dass die Fehlermeldung besser sein könnte ist … wahr

    – jalf

    15. September 2012 um 9:09 Uhr


fügen Sie -f hinzu, wenn der Pfad relativ ist, um ihn zu erhöhen git mv -f "originPath" "newPath"

git mv -f MyProj/src/ts0621/foobar.c NewProjName/src/ts0629/foobar.c

1429590cookie-checkWarum sollte ein einfaches `git mv` fehlschlagen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy