Wie kann man in einem Git-Repository ein Verzeichnis richtig umbenennen?

651

Ich denke , es sollte das Verzeichnis kopieren arbeitet mit dem gewünschten Namen in ein neues Verzeichnis umbenannt werden, und löschen Sie das alte Verzeichnis , und git add, git commitund pushalles. Aber ist das der beste Weg?

qazwsx
quelle
5
Für Git ist das Kopieren und Löschen dasselbe wie ein Umzug. Git nimmt sowohl (Kopieren + Löschen) als auch (Verschieben) auf dieselbe Weise auf.
Dietrich Epp

Antworten:

1178

Grundlegendes Umbenennen (oder Verschieben):

git mv <old name> <new name>

Groß- und Kleinschreibung beachten, z. von casesensitivebis CaseSensitive- Sie müssen zwei Schritte ausführen:

git mv casesensitive tmp
git mv tmp CaseSensitive

( Mehr zur Groß- und Kleinschreibung in Git… )

… Gefolgt von Commit und Push wäre der einfachste Weg, ein Verzeichnis in einem Git-Repo umzubenennen.

CB Bailey
quelle
231
Aber wenn Sie von umbenennen möchten casesensitivezu CaseSensitive, können Sie auf diese Weise tun: git mv casesensitive Tempund dann git mv Temp CaseSensitive
ViliusK
3
Speichert es das gesamte Protokoll und die Statistiken?
Orezvani
23
@ViliusK, wenn Sie mit Verzeichnissen mit Groß- und Kleinschreibung zu tun haben, ist eine einfache Möglichkeit, die ich gefunden habe, git rm -rf --cached path/to/your/directorieserneut hinzuzufügen und
festzuschreiben
1
Aber warum unterstützt GIT die Namensänderung für ein Paket / Verzeichnis nicht ordnungsgemäß? Warum muss ich überhaupt einen separaten Ordner erstellen? Wenn ich einen Namen des Pakets ändere, sollte es nicht als Unterschied dienen und sich zum Zeitpunkt des Festschreibens und Pushs darum kümmern?
Ahmed
1
Vielen Dank dafür. Für mich musste ich zuerst git config core.ignorecase falsedie Befehle ausführen und dann nacheinander ausführen, sonst würde ich für den zweiten Teil eine source is emptyFehlermeldung erhalten.
Rika
106

Wenn Sie diesen Fehler erhalten: fatal: Umbenennen von 'Ordnername' fehlgeschlagen: Ungültiges Argument

Versuche dies:

git mv foldername tempname && git mv tempname folderName

Jacques Betancourt
quelle
8
Dies ist genau das, was ich brauchte, um eine Falländerung in einem Verzeichnis durchzuführen.
cjserio
Das Token '&&' ist in dieser Version kein gültiges Anweisungstrennzeichen. git version 2.11.0.windows.
Tim Hardy
@ Tim Hardy kann auch als zwei separate Befehle ausgeführt werden git mv foldername tempnameund git mv tempname folderName, die unter Windows funktionieren sollten.
Larkeith
Das funktioniert nicht ! Das Endergebnis legt den neuen Ordner 'folderName' im Ordner 'tempname' ab
Wette
61

1. Ändern Sie den Namen eines Ordners von altem Ordner in neuen Ordner

git mv oldfolder newfolder

2. Wenn sich der neue Ordner bereits in Ihrem Repository befindet und Sie ihn überschreiben und Folgendes verwenden möchten: - force

git mv -f oldfolder newfolder

Vergessen Sie nicht, die Änderungen zum Index hinzuzufügen und nach dem Umbenennen mit git mv festzuschreiben.

3. Umbenennen des Ordnernamens in Ordnername in Dateisystemen ohne Berücksichtigung der Groß- und Kleinschreibung

Das einfache Umbenennen mit einem normalen mv-Befehl (nicht git mv) wird nicht als Dateiaustausch von git erkannt. Wenn Sie es mit dem Befehl 'git mv' wie in der folgenden Zeile versuchen

git mv foldername folderName

Wenn Sie ein Dateisystem verwenden, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, z. B. wenn Sie einen Mac verwenden und es nicht so konfiguriert haben, dass zwischen Groß- und Kleinschreibung unterschieden wird, wird eine Fehlermeldung wie die folgende angezeigt:

fatal: Umbenennen von 'Ordnername' fehlgeschlagen: Ungültiges Argument

Und hier ist, was Sie tun können, damit es funktioniert: -

git mv foldername tempname && git mv tempname folderName

Dadurch wird der Umbenennungsprozess aufgeteilt, indem der Ordner zunächst in einen völlig anderen Ordnernamen umbenannt wird. Nach dem Umbenennen in einen anderen Ordnernamen kann der Ordner schließlich in den neuen Ordnernamen umbenannt werden. Vergessen Sie nach diesen Git-MVs nicht, die Änderungen hinzuzufügen und festzuschreiben. Obwohl dies wahrscheinlich keine schöne Technik ist, funktioniert sie einwandfrei. Das Dateisystem erkennt immer noch keine Änderung der Groß- und Kleinschreibung, aber Git tut dies, weil es in einen neuen Ordnernamen umbenannt wurde, und das ist alles, was wir wollten :)

akshay_rahar
quelle
9

Sie können das Verzeichnis über das Dateisystem umbenennen. Dann können Sie git rm <old directory>und git add <new directory>( Hilfeseite ). Dann können Sie festlegen und pushen.

Git erkennt, dass der Inhalt identisch ist und dass es sich nur um einen Umbenennungsvorgang handelt, und er wird als Umbenennungseintrag im Verlauf angezeigt. Sie können vor dem Festschreiben überprüfen, ob dies der Fall istgit status

Oleksi
quelle
12
Hey, aber auf diese Weise werde ich die gesamte Commit-Geschichte verlieren.
ViliusK
1
Sie können es beibehalten, wenn Sie das Flag -follow verwenden.
Oleksi
Zwei Befehle statt eines und ein Flag hinzufügen müssen? Ist das in irgendeiner Weise besser als Git MV?
Antgel
4
@topper Nein, git mv ist nur ein Alias ​​für rm + add. Die Verwendung von git mv ist eine bessere Lösung.
Oleksi
5
@topper Beachten Sie, dass Sie immer noch --follow verwenden müssen, um den Verlauf anzuzeigen, unabhängig davon, mit welcher Methode Sie die Datei verschieben.
Oleksi
3

Ich denke, Sie können dies nicht über die Webanwendung tun, aber Sie können alle Ordner in Git Client umbenennen. Dadurch werden Ihre Dateien in die neu umbenannten Ordner verschoben und anschließend festgeschrieben und in das Remote-Repository verschoben.

Ich hatte ein sehr ähnliches Problem: Ich musste verschiedene Ordner von Groß- in Kleinbuchstaben umbenennen (wie Abc -> abc), ich habe alle Ordner mit einem Dummy-Namen umbenannt (wie 'abc___') und danach in das Remote-Repository übernommen dass ich alle Ordner in den ursprünglichen Namen mit Kleinbuchstaben (wie abc) umbenannt habe und es sie genommen hat!

Syncro
quelle
0

Ich habe es in zwei Schritten gelöst. Um den Ordner mit dem Befehl mv umzubenennen, benötigen Sie entsprechende Rechte. Wenn Sie kein Recht haben, können Sie diese Schritte ausführen. Angenommen, Sie möchten caseensitive in Casesensitive umbenennen.

Schritt 1: Benennen Sie den Ordner (Groß- und Kleinschreibung beachten) in einen anderen Ordner aus dem Explorer um. z. B. Groß- und Kleinschreibung in Ordner1 umbenennen, um diese Änderung zu übernehmen.

Schritt 2: Benennen Sie diesen neu benannten Ordner (Ordner1) in den erwarteten Namen mit Groß- und Kleinschreibung um (Groß- und Kleinschreibung beachten), z. Benennen Sie Ordner1 in Groß- / Kleinschreibung um. Übernehmen Sie diese Änderung.

Nilesh
quelle
0

Für das Umbenennen mit Groß- und Kleinschreibung git mv somefolder someFolderhat es schon früher für mich funktioniert, aber heute aus irgendeinem Grund nicht. Um dieses Problem zu umgehen habe ich einen neuen Ordner temp, bewegt den gesamten Inhalt somefolderin temp, gelöscht somefolder, verpflichtet , die tempdann erstellt someFolder, bewegt alle den Inhalt tempin someFolder, gelöscht temp, engagiert und schob someFolderund es funktionierte! Erscheint wie someFolderin Git.

Ryan Walker
quelle
-16

Benennen Sie den Ordner einfach um. git ist ein "Content-Tracker", daher sind die SHA1-Hashes identisch und git weiß, dass Sie ihn umbenennen. Das einzige, was sich ändert, ist das Baumobjekt.

rm <directory>
git add .
git commit
Bitwelle
quelle
1
Das funktioniert nicht immer. Bei etw hat es sicher nicht geklappt. wie 20% Dateien ...
Tomáš Fejfar