Git-Svn dcommit verursacht Verzweigungsaufspaltung

8

Ich habe ein Problem mit git-svn dcommits, wodurch das git-Repository den Überblick verliert, welche Commits welche sind.

Ich versuche sicherzustellen, dass der Master-Zweig in git immer dem Stamm im SVN-Repository folgt. Also wenn ich arbeite, bin ich auf einem Zweig. Hier ist mein Szenario:

In einer Zweigstelle für eine Weile arbeiten

%Vor%

Dann entscheide ich, dass ich meinen Zweig wieder zu Master

zusammenführen möchte %Vor%

Bis hier ist alles gut gegangen. Ich habe jetzt sowohl Master als auch mein Topic auf Hochtouren und deute auf denselben Commit, und der gesamte Verlauf sieht folgendermaßen aus:

%Vor%

Aber wenn ich das tue

%Vor%

Ich lande mit einem Baum, der so aussieht (B und C sind Commits, die ich ursprünglich zum Thema gemacht habe):

%Vor%

Es sieht so aus, als ob git während des DCommit-Prozesses die Commits zu SVN hochschiebt und sie dann auf den Master zurückspielt. Das Problem ist meiner Meinung nach, dass sie unterschiedliche Committer-Informationen erhalten. Ich melde mich bei svn mit Tortoise Plink und einem SSH-Schlüssel an.

Commits im git-Repository, die nicht an SVN übergeben wurden, haben Committer-Informationen wie folgt:

%Vor%

Commits, die an das svn-Repository gesendet wurden, haben dies jedoch:

%Vor%

Gibt es irgendeinen Weg, wie ich diese Zweige davon abhalten kann, sich zu spalten? Ich kann es beheben, indem ich sage

%Vor%

nochmal, aber ich denke, das sollte nicht nötig sein. Das Hauptproblem dabei ist, dass, sobald die Änderungen eines Zweigs an SVN übergeben werden, git nicht länger denkt, dass der Zweig irgendwo zusammengeführt wurde. Es macht es verwirrend, alte Zweige zu löschen, die Sie nicht mehr brauchen.

    
Collin 08.04.2011, 13:36
quelle

2 Antworten

10

Der Befehl git svn dcommit funktioniert wie folgt:

  1. Finde das letzte Commit von SVN; nennen wir es last-svn
  2. Senden Sie die Commits im Bereich last-svn..HEAD an Subversion (verwerfen Sie die E-Mail übrigens)
  3. Setzen Sie HEAD auf last-svn zurück
  4. Aktualisieren Sie von SVN und erstellen Sie die entsprechenden Commits

Mit anderen Worten, die Commits, die Sie an SVN senden, werden durch das Update von SVN zerstört und neu erstellt. Dies muss geschehen, weil die Commits, die von SVN kommen, sich von denen unterscheiden, die mit Git erstellt wurden:

  • Ihre Beschreibung enthält einen Verweis auf die SVN-Revision
  • Ihre Autor-E-Mail wird aus dem SVN-Benutzernamen
  • berechnet

Das ist der Grund, warum Ihr Zweig my-topic von master abweicht.

Sie können die Art und Weise anpassen, wie git svn dcommit die Autor-E-Mail vom SVN-Benutzernamen mit den Optionen --authors-file und --authors-prog berechnet.

    
Laurent Pireyn 08.04.2011, 15:30
quelle
3

Sie haben Recht, dass git die Commits von svn erneut abspielt. Zweige in git sind nur Zeiger auf commits (oder dort ids / hashes). Die Commits von svn werden unterschiedliche Hashes haben, und nur der aktuell ausgecheckte Zweig wird von git svn dcommit aktualisiert, sodass Ihr Zweig immer noch auf die alten Commits zeigt.

    
knittl 08.04.2011 15:28
quelle

Tags und Links