Wie funktioniert git-svn wissen, welche Filiale zu dcommit zu?
Meinem SVN-repo ist, und ich alles tun, die Entwicklung mit git. Wir haben ein standard-layout, und ich initialisiert meinem lokalen repo mit git svn init -s <url to repo>
Hier ist mein workflow für das arbeiten mit branches:
# 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
Diesem letzten Befehl oben wird ein commit der änderungen an der branch-name-der-Filiale. Meine Frage ist, wie macht git dies wissen? Wenn ich ein git reset --hard foo
, was passiert dann genau?
Diese könnte nur nach unten kommen, um eine Allgemeine Frage zu git. Jedes mal, wenn ich versuche, die Forschung eine Antwort bin ich verwirrt über, wenn die svn integration ist ein spezieller Fall ist oder nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
git-svn
wird die commit-tree für Vorfahren verpflichtet, die entsprechen, um aktive SVN-Zweige (dierefs/remotes/...
Zweige entsprechen branches in SVN). Es wird dann dcommit zu denen.Beachten Sie, dass Sie sollten nicht zusammen und dann dcommit -- SVN und Git ' s branching-Modell nicht übereinstimmen, und diese Art der Sache kann fubar SVN-Geschichte. Stattdessen sollten Sie die
git rebase trunk
wenn Sie auf dem Zweig. (Alternativgit svn rebase
.)Beachten Sie auch, dass die Niederlassung die Sie check-out vor dem rebase sollte eine lokale Niederlassung. Wenn es nicht ist, können Sie eine erstellen mit
git checkout -b local-branch-to-create remote-branch
. Danngit rebase trunk
.Wenn Sie möchten squash all die verpflichtet wurden, zurückgesetzt in einer, dann tun Sie dies nach dem rebase:
git reset --soft trunk && git commit
.Sobald Sie zufrieden mit den änderungen, die jetzt Leben, auf der Oberseite des Stammes, nur
git svn dcommit
drücken Sie auf dem SVN-server.--commit-url
sollte nur verwendet werden, zu wechseln, transport -, und "Verwenden Sie diese option für einen anderen Zweck (nicht Fragen) ist sehr dringend abgeraten."git rebase my-branch
undgit svn rebase my-branch
bringen nicht in den code von my-Zweig.git merge my-branch
hat die gewünschten änderungen vor Ort, sondern danngit svn dcommit
versucht, sich zu verpflichten, die mein-Zweig aus der Ferne, statt Kofferraum.git checkout my-branch; git rebase trunk; git svn dcommit;
my-branch
zu einem lokalen Thema Niederlassung, wo Sie getan haben, Ihre Entwicklung, undtrunk
werden der name des remote-svn-trunk-ref.git checkout my-branch; git rebase trunk; git reset --soft trunk; git commit; git dcommit;
. Und dieser Prozess wird dokumentiert und in Stücken in die git-svn-manpage. (Sie Art haben, um es zusammen zu fassen, sich von den verschiedenen Abschnitten nahe dem Ende der manpage.)Ist es nicht so einfach wie die Erstellung einer lokalen Niederlassung und die Verfolgung von einem remote-svn-Zweig?
Wenn Sie eine
git svn init --stdlayout url-of-svn-repo
, git bringt sich das ganze svn-repo an, verdichtet Sie, so dass es betriebsfähig ist, mit git.Danach ist es nur eine Frage der Tatsache zu tun, so etwas wie:
Wenn Sie eine lokale Niederlassung einen remote-tracking-branch
git svn dcommit
schiebt nur auf die verfolgte remote-branch.git svn dcommit -n
noch sagt, dass es sein wird, zu Begehen, um Stamm statt des Zweiges ich willEinfachen Weg, wenn Sie möchten, um zu dcommit git master in svn trunk, versuchen Sie die folgenden Befehle:
Den gleichen, wenn auf dem anderen Zweig (z.B. 6.x)