git-svn workflow - feature-branches und merge
Ich bin mit git-svn mit dem folgenden workflow jetzt
git clone <SVN TRUNK URL> #done once
anschließend wenn ich auf ein feature
git branch featureZ
git checkout featureZ
#make edits for featureZ
git commit
git checkout master
git svn rebase # fetch changes from server
git checkout featureZ #go back to branch
#git merge master
git rebase master #get the changes from SVN->master onto the branch now. Optional if I want the branch to be current. (EDITED: Got from the answer given below)
#make edits for featureZ
git commit #featureZ completed
git checkout master
git merge featureZ #getting featureZ onto master. Prepare to send to SVN
git svn dcommit #push featureZ back to SVN
Nun einige Punkte beachten, wenn ich ein git merge feature auf master, alle die einzelnen commits in featureZ Zweig bekommt zusammengeführt als eine, die in Ordnung ist mit mir.
Die commit-Nachricht ersetzt wird als "verbunden" mit featureZ". Das kann behoben werden mit fmt-merge-msg.
Nun meine Frage ist
Gibt es etwas, das schief gehen kann mit diesem workflow oder muss gesorgt werden. Ich lese in git-svn-Handbuch, dass die merge-sollte nicht getan werden, wenn die Arbeit mit git-svn. Ist das, was ich Tue in meinem workflow ist das, was Sie sich beziehen? wenn ja, welche Art von problem verursacht es? Eine Sache, die ich nicht wollen, etwas zu tun, das verwirrt mit der SVN-Magistrale.
- btw, können Sie
git checkout -b
stattgit branch ..;git checkout
. Auch ist Es üblich mitco
alias fürcheckout
Befehl.
Du musst angemeldet sein, um einen Kommentar abzugeben.
SVN nicht in den Griff, nicht-lineare Geschichte (es hat einfach keine notation von ihm). Also, was Sie tun möchten, ist ein Stellungswechsel statt einer Zusammenführen, wie es bewahrt lineare Geschichte mit SVN (dies ist erkennbar in der git-svn Mann Seite hier.
Aufwendige, lineare Geschichten sind trivial. Sie gehen in einer geraden Linie (A nach B zu C zu D). In der Erwägung, dass nicht-lineare Geschichte kann von A zu B zu C, B zu D, dann C + D-E--in anderen Worten, Sie sprießen aus in den Zweigen).
Rebasierung wird Ihnen eine lineare Geschichte. Denken Sie daran, dass rebases getan werden sollte, von Ihrem eigenen lokalen Niederlassungen. Für Instanzen, wenn du 2 branches: master und experimentell. Sie würde Kasse experimentelle und tun "git rebase master" - vorzugsweise mit der -i-flag. Tut es die andere Weise herum kann in der Folge zu unerwünschten Nebenwirkungen.
Ist es dann checkout master und merge die änderungen aus dem experimentellen Zweig. Ihre Geschichte sollte weiterhin linear.
Sollten Sie auf diesen merge-option:
Wird es squash alle commits auf dem branch zu einem einzigen commit auf dem master-branch. Sie erhalten die Möglichkeit zum Bearbeiten der log-Meldung, die wird initialisiert mit einer Zusammenfassung, was gemacht wurde, auf dem ast.
Es hat den Nachteil, dass die einzelnen commit auf dem feature-branch nicht erfasst werden. Darüber hinaus sollten Sie nur tun, dieses eine mal, und nicht mehr Arbeit auf die Branche, weil es nicht registriert ist, wie eine richtige Zusammenführen, und spätere Zusammenführung geben könnte zu unerwünschten Ergebnissen.
Die Antwort, die wir von fake-code-monkey-rashid, der richtige ist. Dies ist weniger eine Antwort als vielmehr eine Vereinfachung.
Können Sie svn rebase/dcommit aus beliebigen git-Zweig. Der einzige nutzen master haben würde, wenn Sie hatte andere lokalen änderungen, die Sie benötigt, um zu verschmelzen mit den änderungen aus featureZ.
Wenn Sie möchten, um eine saubere master, dann können Sie entweder
git svn rebase
odergit merge featuresZ
Anstelle von git-svn, können Sie SubGit. Es ist ein Serverseitiges tool, das automatisch synchronisiert Subversion-und Git-repositories.
Können Sie alle Git-workflow und jedem Git-client zur Verfügung, es ist keine zusätzliche client-tools benötigt.
Angesichts Szenario:
Können Sie wie folgt Vorgehen:
Push-Funktion Zweig vollständig.
Stellungswechsel ein Zweig auf der Oberseite des master/trunk.
Squash verpflichtet Zweiges.
Sobald Sie push verpasst, SubGit Haken übersetzen Sie Ihre änderungen in das Subversion-Revisionen.
Einige weitere details: