Zusammenführungsfehler nach Konvertierung des Git-Submoduls in einen Teilbaum
Ich habe ein Projekt, in dem ich ursprünglich Submodule für abhängigen Code verwendet habe. Es stellt sich heraus, dass Submodule für dieses Projekt nicht wirklich geeignet sind (und in der Praxis nur schwer zu verwenden sind), daher konvertiere ich jedes Submodul in einen Teilbaum (unter Verwendung des neuen)git-subtree
Merkmal).
In meinem Arbeitsrepository habe ich jedes Submodul erfolgreich entfernt und das alte Submodul-Repository als Teilbaum hinzugefügt. Kein Problem damit.
Wenn ich zu einem anderen Klon gehe und versuche, von dem ersten zu ziehen, wird beim Zusammenführen der folgende Fehler angezeigt:
error: The following untracked working tree files would be overwritten by merge:
sub/.gitignore
sub/Makefile
sub/README
sub/src/main.c
... and so on for all files in sub/
Aborting
Es scheint, dass dies daran liegt, dass die Dateien insub/
existierte nie wirklich im Haupt-Repository und wenn Git den Patch zum Aktualisieren anwendet.gitmodules
Das Verzeichnis mit den Submodul-Dateien wird nicht entfernt. Bei der Verarbeitung des nächsten Commits versucht Git, die neuen Dateien in zu erstellensub/
Dassind Alle diese Dateien, die jetzt Teil des Haupt-Repositorys sind, stehen im Konflikt mit den noch vorhandenen Dateien insub/
.
Die Problemumgehung, die ich gefunden habe, ist zu verwendenrm -rf sub
Vorgit pull
, was dieses Problem vermeidet.
Meine Frage ist, gibt es einen Befehlszeilenschalter, mit dem ich verwenden kanngit merge
das sagt "überschreiben Sie alle Dateien, die zufällig in dem Arbeitsverzeichnis vorhanden sind"? Noch besser wäre ein Feature wogit merge
Wenn der Inhalt der vorhandenen Datei mit dem Inhalt der Datei übereinstimmt, die ohnehin erstellt werden sollte, unterdrücken Sie die Fehlermeldung und fahren Sie fort.
AKTUALISIEREN: Ich habe Git-Repositorys erstellt, die dieses Problem veranschaulichen, um genau zu zeigen, wovon ich spreche. Reproduzieren:
$ git clone https://github.com/ghewgill/q14224966.git
$ cd q14224966
$ git submodule init
$ git submodule update
$ git merge origin/branch
Dies sollte zu einer Fehlermeldung führen
error: The following untracked working tree files would be overwritten by merge:
sub/Makefile
sub/README
sub/src/main.c
Please move or remove them before you can merge.
Aborting