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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage