Ich habe einen Ordner common
mit einer Reihe von Quelldateien und Ordnern erstellt.
Jetzt möchte ich den common
Ordner in den include
Ordner verschieben, damit er so aussiehtinclude/common
Ich habe diese ausprobiert:
git add include
git mv common/ include/
aber es schlägt mit diesem Fehler fehl
fatal: schlechte Quelle, Quelle = myrepo / common, Ziel = myrepo / include
Ich habe es versucht,
git mv common/ include/common
aber ich bekomme den gleichen Fehler
Irgendeine Idee, wie man das erreicht?
git mv
ist gleichwertig.sollte arbeiten.
Von der
git mv
Manpage :Nein "
git add
Vor dem Umzug sollte " erfolgen .Hinweis: "
git mv A B/
", wannB
es nicht als Verzeichnis vorhanden ist, sollte ein Fehler auftreten, dies ist jedoch nicht der Fall.Siehe Commit c57f628 von Matthieu Moy (
moy
) für Git 1.9 / 2.0 (Q1 2014):quelle
git mv
scheint viel besser zu sein!Befehl:
Es funktioniert normalerweise gut.
Der Fehler "Bad Source ..." zeigt normalerweise an, dass nach dem letzten Festschreiben einige Umbenennungen im Quellverzeichnis vorhanden waren und daher
git mv
die erwartete Datei nicht gefunden werden kann.Die Lösung ist einfach - erst vor der Bewerbung festschreiben
git mv
.quelle
Stellen Sie sicher, dass Sie alle Änderungen zum Staging-Bereich hinzugefügt haben, bevor Sie ausgeführt werden
Git schlägt mit Fehler fehl
Wenn es nicht hinzugefügte Dateien gibt, habe ich es gerade herausgefunden.
quelle
Eine andere Möglichkeit, alle Dateien in einem Verzeichnis in ein Unterverzeichnis zu verschieben (behält den Git-Verlauf bei):
$ for file in $(ls | grep -v 'subDir'); do git mv $file subDir; done;
quelle
Ich hatte ein ähnliches Problem damit,
git mv
wo ich den Inhalt eines Ordners in einen vorhandenen Ordner verschieben wollte, und endete mit diesem "einfachen" Skript:Erläuterung
git ls-files
: Finde alle Dateien (imcommon
Ordner), die in git eingecheckt sindnewdir="../include/$(dirname $f)"; mkdir -p $newdir;
: Erstellen Sie einen neuen Ordner innerhalb desinclude
Ordners mit derselben Verzeichnisstruktur wiecommon
git mv $f $newdir/$(basename "$f")
: Verschieben Sie die Datei in den neu erstellten OrdnerDer Grund dafür ist, dass git anscheinend Probleme beim Verschieben von Dateien in vorhandene Ordner hat. Dies schlägt auch fehl, wenn Sie versuchen, eine Datei in einen nicht vorhandenen Ordner zu verschieben (daher)
mkdir -p
).Das Schöne an diesem Ansatz ist, dass er nur Dateien berührt, die bereits in git eingecheckt sind. Wenn Sie einfach
git mv
einen ganzen Ordner verschieben und der Ordner nicht bereitgestellte Änderungen enthält, weiß Git nicht, was zu tun ist.Nach dem Verschieben der Dateien möchten Sie möglicherweise das Repository bereinigen , um alle verbleibenden nicht bereitgestellten Änderungen zu entfernen. Denken Sie daran, zuerst einen Trockenlauf durchzuführen!
quelle
Es tut mir leid, dass ich nicht genug Ruf habe, um die "Antwort" von "Andres Jaan Tack" zu kommentieren.
Ich denke, meine Nachricht wird gelöscht ((Aber ich möchte nur "lurscher" und andere warnen, die den gleichen Fehler haben: seien Sie vorsichtig)
Dies kann dazu führen, dass Sie den Git-Verlauf Ihres Projekts nicht in einem neuen Ordner sehen.
ich habe versucht
bekam
Ich tat
und
und ich sehe keine alte Git-Geschichte in meinem Projekt. Zumindest geht mein Projekt nicht verloren. Jetzt habe ich mein Projekt in newFolderName, aber ohne den Verlauf (
Ich möchte nur warnen, sei vorsichtig mit den Ratschlägen von "Andres Jaan Tack", wenn du dein Git-Hsitory nicht verlieren willst.
quelle
Ich hatte ein ähnliches Problem, aber in einem Ordner, den ich verschieben wollte, hatte ich Dateien, die ich nicht verfolgte.
Nehmen wir an, ich hätte Dateien
Und ich wollte nur verfolgte Dateien in einen Unterordner verschieben
subdir
, also war das Ziel:was ich getan hatte war:
mkdir tmpdir && mv a b tmpdir
git checkout a b
mkdir subdir && mv a b subdir
git add --update
mit Verzeichniswechsel- Trick ):git add subdir
(normalerweise würde dies sogar nicht verfolgte Dateien hinzufügen - dies würde das Erstellen einer.gitignore
Datei erfordern )git status
zeigt jetzt nur verschobene Dateienmv tmpdir/* subdir
git status
sieht aus wie wir hingerichtet habengit mv
:)quelle
Ich habe dies unter Windows folgendermaßen gelöst:
(.*)
durchgit mv ".\\\1" ".\\<New_Folder_Here>\"
quelle