2010-11-12 7 views
17

Mein Repo ist SVN, und ich mache alle Entwicklung mit Git. Wir haben ein Standard-Layout, und ich initialisiert meinen lokalen Repo mit git svn init -s <url to repo>Woher weiß git-svn, an welchen Zweig es zu senden ist?

Hier ist mein Workflow mit Niederlassungen für die Arbeit:

# creates a new branch remotely 
git svn branch new-branch-name 

# switches to a branch or trunk locally 
git reset --hard name-of-branch 
git reset --hard trunk 

# merge changes from trunk into a branch 
git reset —hard name-of-branch 
git merge trunk 
git svn dcommit 

Der letzte Kommando über die Änderungen an den Zweignamen-of-Zweig begehen. Meine Frage ist, wie weiß Git I das? Wenn ich git reset --hard foo mache, was genau passiert?

Dies könnte nur auf eine allgemeine Frage über Git kommen. Jedes Mal, wenn ich versuche, eine Antwort zu recherchieren, bin ich verwirrt darüber, ob die svn-Integration ein Sonderfall ist oder nicht.

Antwort

11

git-svn sucht den Commit-Baum für Vorfahren-Commits, die aktiven SVN-Zweigen entsprechen (die refs/remotes/...-Zweige, die Ästen in SVN entsprechen). Es wird dann zu denen kommen.

Beachten Sie, dass Sie nicht zusammenführen und dann commommit - SVNs und Git Verzweigungsmodell nicht zusammenpassen, und diese Art von Sache kann Ihr SVN Geschichte fubar. Sie sollten stattdessen git rebase trunk, wenn Sie in der Branche sind. (Alternativ git svn rebase.)

Beachten Sie auch, dass der Zweig, den Sie vor dem Rebase auschecken, eine lokale Zweigstelle sein sollte. Ist dies nicht der Fall, können Sie eine mit git checkout -b local-branch-to-create remote-branch erstellen. Dann git rebase trunk.

Wenn Sie alle Commits, die rebased wurden, in einen zerquetschen möchten, tun Sie dies nach der Rebase: git reset --soft trunk && git commit.

Wenn Sie mit den Commits glücklich sind, die jetzt an der Spitze des Stammes leben, git svn dcommit nur um sie zu dem SVN-Server zu schieben.

+0

[1] "git-svn sucht in der Commit-Struktur nach Vorfahr-Commits, die aktiven SVN-Zweigen entsprechen. - Manchmal rät es falsch - gibt es eine Möglichkeit für mich, es explizit zu spezifizieren? [2] "so etwas kann deine SVN-Geschichte fubarieren" - so wird die Geschichte unheilig sein, aber die Verschmelzung der Code-Dateien sollte in Ordnung sein, ja? –

+0

hmm, die man-Seite sagt, dass '--commit-url' nur zum Wechseln des Transports verwendet werden sollte, und" Es wird dringend davon abgeraten, diese Option für andere Zwecke zu verwenden (nicht zu fragen). " –

+0

Wenn Sie einen bestimmten Zweig angeben möchten, den Sie übernehmen möchten, bringen Sie den Zweig des Features einfach über den entsprechenden Remote-Zweig in Ihrem Git Repo. – cdhowie

2

Ist es nicht so einfach wie das Erstellen einer lokalen Verzweigung und das Verfolgen eines Remote-Svn-Zweigs? Wenn Sie eine git svn init --stdlayout url-of-svn-repo tun, bringt Git die gesamte SVN Repo, komprimiert es, so dass es mit Git bedienbar ist.

Danach ist es nur eine Frage der Tatsache ist, etwas zu tun wie:

git checkout -b mybranch -t remotes/mybranch 

Wenn Sie eine lokale Niederlassung haben einen entfernten Zweig Tracking, git svn dcommit schiebt nur auf den verfolgten entfernten Zweig.

+3

Ich habe es versucht und 'git svn dcommit -n' sagt immer noch, dass es statt der Verzweigung, die ich will, an die Stammleitung geht. –

+0

Ist nicht so einfach:" Git findet heraus, in welche Branche Ihre dcommits gehen, indem Sie nach dem Tipp suchen von jedem deiner Subversion-Zweige in deinem Verlauf - du solltest nur einen haben, und es sollte der letzte mit einer git-svn-id in deinem aktuellen Zweigverlauf sein. " https://git-scm.com/book/de/v2/Git-and-Other-Systems-Git-as-a-Client#switching-active-branches-LPtGtkszIW – jgomo3

1

einfache Art und Weise, wenn Sie möchten, dass git Master in svn Stamm dcommit, versuchen Sie die folgenden Befehle:

git checkout master 
git rebase trunk 
git svn info # To verify that you're on the right branch 
git svn dcommit 

Das gleiche, wenn auf dem anderen Zweig (zB 6.x)

git checkout 6.x 
git rebase 6.x # or git rebase remotes/6.x 
git svn info 
git svn dcommit 
Verwandte Themen