git-subtree: Push-Änderungen von einem geklonten Repo

8

Ich benutze git-subtree (von Avery Pennarun). In meinem aktuellen Git Repo habe ich natürlich alle meine Projektdateien / Ordner und eine Unterverzeichnis namens "lib". Wenn ich diesen Git Repo nun mit git clone klonen bekomme ich alle Projektdateien und der Teilbaum "lib" (alles so wie es sein sollte). Was ich jetzt versuchte: Ich habe etwas im Teilbaum "lib" im geklont geändert Repo und versuchte, die Änderungen zurück auf das Remote Repo des Teilbaums "lib" zu schieben git subtree push , aber es hat nicht funktioniert. Was ist das Problem? Muss ich es hinzufügen? als Unterbaum zuerst mit git subtree hinzufügen?

Thx im Voraus

    
arge 09.10.2012, 14:08
quelle

2 Antworten

14

Disclaimer, ich vermute, ich bin nur ein paar Tage vor Ihnen, die über Teilbaum lernen: -)

Wenn Sie nur git subtree push verwenden, geben Sie dem Unterbaum nicht genug Informationen, um Ihre Änderungen zu extrahieren und zu übertragen.

Wenn Sie den Repo richtig geklont haben, ist der Unterbaum bereits da. In Subtree muss angegeben werden, von welchem ​​Unterbaum Sie drücken möchten (selbst wenn Sie nur einen haben) und er muss auch wissen, wohin er drücken soll - insbesondere wollen Sie nicht zum Repo der obersten Ebene wechseln. Daher möchten Sie etwas wie:

%Vor%

Offensichtlich sollten Repo und Refspec geändert werden, damit sie mit Ihrem Repo übereinstimmen.

Wenn Sie sehen wollen, was hier passiert (und es hilft), teilt Teilbaum die Änderungen, die die Dateien innerhalb des Teilbaums betreffen, in einen anderen Zweig und schiebt diesen dann in den Teilbaum-Repo. Um dies zu sehen, verwenden Sie subtree split

%Vor%

Dann schauen Sie sich den Zweig an, den Sie gemacht haben:

%Vor%

und, drücken Sie sie manuell

%Vor%

Wenn dies nicht funktioniert, haben Sie möglicherweise den Teilbaum nicht in Ihren Repo eingebunden. Wenn Sie einen Teilbaum hinzufügen:

%Vor%

Sie müssen auch den Teilbaum zusammenführen und ihn zurück auf den Repo der obersten Ebene schieben.

%Vor%     
Roger Nolan 10.10.2012, 12:56
quelle
1

Ich hatte genau das gleiche Problem, das Sie hatten, und ich löste es im Wesentlichen mit dem Ansatz, den Roger Nolan vorgeschlagen hatte. Wenn Sie jedoch Pech haben, ein Dateisystem zu verwenden, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, müssen Sie auch sicherstellen, dass jedes Mal, wenn Sie einen Pull und einen Push ausführen, der Fall Ihres Präfixes gleich bleibt.

>

Wenn Sie den Fall fälschlicherweise durcheinanderbringen, wird Git glauben, dass Sie zwei Unterbäume haben, während nur einer im Dateisystem existiert.

Also ist die Lösung, mit der ich endete (falls es jemandem hilft):

  1. Erstellen Sie ein Skript, das Ihren Teilbaum verschiebt. Nennen Sie es publish_<your-subtree-name> .
  2. Erstelle ein weiteres Skript, das deinen Teilbaum zieht. Nennen Sie es update_<your-subtree-name> .
  3. Erstellen Sie einen temporären Zweig an Ihrem HEAD und testen Sie das Update. Wenn Ihr Skript richtig ist, wird Ihr temporärer Zweig nicht verschoben.
  4. Klonen Sie den Teilbaum-Repo an anderer Stelle, fügen Sie einen Test-Commit hinzu, drücken Sie ihn und versuchen Sie, ihn mit dem gerade geschriebenen Update-Skript in Ihren Repo zu ziehen.
  5. Wenn alles funktioniert, löschen Sie Ihre temporäre Verzweigung und prüfen Sie nun beide Skripte in das Superprojekt-Repo.
  6. Verwenden Sie dann die Skripts, wann immer Sie Teilbäume drücken oder ziehen müssen.

PS & gt; Der Parameter --squash ist wichtig, insbesondere wenn verschiedene Zweige Ihrer Repositories verschiedene Zweige des Teilbaums ziehen und wenn Sie mehrere Teilbäume in Ihrem Projekt haben.

    
Carl 03.12.2014 00:33
quelle

Tags und Links