git-svn: Wie erstelle ich einen neuen SVN-Zweig über Git?

193

Ich habe ein Git-Repository, das ein SVN-Repository verfolgt. Ich habe es mit geklont --stdlayout.

Ich habe eine neue lokale Niederlassung über erstellt git checkout -b foobar

Jetzt möchte ich, dass dieser Zweig …/branches/foobarim SVN-Repository landet.

Wie gehe ich vor?

(Schnipsel viel Untersuchungstext. Siehe Fragenverlauf, wenn Sie sich interessieren)

kch
quelle

Antworten:

280

Ich weiß, dass diese Frage vor einiger Zeit beantwortet wurde, aber nachdem ich sie gelesen habe, kann es hilfreich sein, Beispiele für den spezifischen Befehl git svn branch hinzuzufügen und sie mit einem typischen Workflow in Beziehung zu setzen.

Wie kch geantwortet hat, benutze git svn branch. Hier ist ein vollständiges Beispiel (beachten Sie das -nfür den Trockenlauf zu testende):

git svn branch -n  -m "Branch for authentication bug" auth_bug

Wenn dies gut geht, antwortet der Server mit einer Antwort wie folgt:

Kopieren von https://scm-server.com/svn/portal/trunk unter r8914 nach https://scm-server.com/svn/portal/branches/auth_bug ...

Und ohne den -nSchalter fügt der Server wahrscheinlich Folgendes hinzu:

Möglicher Verzweigungspunkt gefunden: https://scm-server.com/svn/portal/trunk => https://scm-server.com/portal/branches/auth_bug , 8914

Gefundener Zweig übergeordnet: (refs / remotes / auth_bug)

d731b1fa028d30d685fe260f5bb912cbf59e1971

Folgender Elternteil mit do_switch

Erfolgreich gefolgt von Elternteil r8915 = 6ed10c57afcec62e9077fbeed74a326eaa4863b8

(refs / remotes / auth_bug)

Das Beste daran ist, dass Sie jetzt einen lokalen Zweig basierend auf Ihrem Remote-Zweig wie folgt erstellen können:

git checkout -b local/auth_bug auth_bug

Was bedeutet "Check out und erstellen Sie einen lokalen Zweig mit dem Namen auth_bugund lassen Sie ihn dem Remote-Zweig folgen (letzter Parameter)auth_bug

Testen Sie dcommitmit --dry-run( -n), ob Ihr lokaler Zweig auf diesem Remote-Zweig funktioniert :

git svn dcommit -n

Der SVN-Server sollte mit dem neuen Filialnamen antworten:

Verpflichtung zu https://scm-server.com/svn/portal/branches/auth_bug ...

Jesper Rønn-Jensen
quelle
2
Ja, Git Co bedeutet, dass Jesper einen Git-Alias ​​eingerichtet hat.
Jason Axelson
3
aktualisiert und ersetzt git codurch, git checkoutdamit das Beispiel für jeden funktionieren kann
Jesper Rønn-Jensen
5
Ich habe diese Antwort bereits gewählt, aber ich weiß nicht, wie oft ich immer wieder zurückkomme. Danke dir!
Ben Doerr
35
Der git-svn branchBefehl hat einen schwierigen Teil : Sie müssen online sein, um auf diese Weise einen neuen Zweig zu erstellen. Sie können im Offline folgenden tun: 1. git checkout -b foobar2. Hack-Hack-Hack 3. git commit -m "Done foobar". Und wenn Sie online diese Änderung drücken um 1. tun git svn branch foobar2. git branch --set-upstream foobar remotes/foobar3. git svn dcommit.
Vadishev
2
Ersetzen Sie also Schritt 2 durch git checkout -b foobar-new remotes/foobar. 3. git checkout foobar4. git rebase foobar-new5. Um zu testen, ob der Zweig jetzt in den SVN-Zweig übernommen wird. git svn dcommit --dry-run6. Endlich tatsächlich git svn dcommitgit branch -D foobar-new
festschreiben
64

ab git v1.6.1 git svn branchist verfügbar.

Aus den Git-Dokumenten:

    Ast
        Erstellen Sie einen Zweig im SVN-Repository.

        -m, --message
            Ermöglicht die Angabe der Festschreibungsnachricht.

        -t, --tag
            Erstellen Sie ein Tag, indem Sie tags_subdir anstelle von branch_subdir verwenden
            angegeben während git svn init.

Frühere Versionen von git bieten keine Möglichkeit, einen SVN-Zweig zu erstellen.

kch
quelle
4

@kch Ich habe gerade (7. Dezember 2008) das v1.6.1-rc1-Tag von git kompiliert und es enthält den Befehl git svn branch und die Dokumentation dafür. Daher sollte die Version 1.6.1 von git (hoffentlich) diesen Befehl enthalten.

Bryan J Swift
quelle
In der Tat habe ich jetzt 1.6.1 installiert und der Befehl ist verfügbar. hat meine Antwort entsprechend aktualisiert.
kch