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.
Der Befehl git svn dcommit
funktioniert wie folgt:
last-svn
last-svn..HEAD
an Subversion (verwerfen Sie die E-Mail übrigens) HEAD
auf last-svn
zurück
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:
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.
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.