Kasse Remote-Zweig mit git svn

188

Ich habe ein svn-Repository mit git svn ausgecheckt. Jetzt muss ich einen der Zweige auschecken und verfolgen. Welches ist der beste Weg, um es zu tun?

markovuksanovic
quelle

Antworten:

355

Standard-Subversion-Layout

Erstellen Sie einen Git-Klon, der Ihren Subversion-Trunk, Tags und Zweige mit enthält

git svn clone http://svn.example.com/project -T trunk -b branch -t tags

Die --stdlayoutOption ist eine nette Verknüpfung, wenn Ihr Subversion-Repository die typische Struktur verwendet:

git svn clone http://svn.example.com/project --stdlayout

Lassen Sie Ihr Git-Repository alles ignorieren, was das Subversion-Repo tut:

git svn show-ignore >> .git / info / exclude

Sie sollten nun in der Lage sein, alle Subversion-Zweige auf der Git-Seite zu sehen:

Git Branch -r

Angenommen, der Name des Zweigs in Subversion lautet waldo. Auf der Git-Seite würdest du rennen

git checkout -b waldo-svn fernbedienungen / waldo

Das Suffix -svn dient dazu, Warnungen des Formulars zu vermeiden

Warnung: Refname 'Waldo' ist nicht eindeutig.

waldo-svnFühren Sie aus, um den Git-Zweig zu aktualisieren

git checkout waldo-svn
git svn rebase

Ausgehend von einer Nur-Trunk-Kasse

Ändern Sie das Git-Repository so .git/config, dass es einen Subversion-Zweig zu einem Nur-Trunk-Klon hinzufügt

[svn-remote "svn-mybranch"]
        url = http://svn.example.com/project/branches/mybranch
        fetch =: refs / remotes / mybranch

Sie müssen die Gewohnheit des Laufens entwickeln

git svn fetch --fetch-all

um alles zu aktualisieren, was git svndenkt, sind separate Fernbedienungen. Zu diesem Zeitpunkt können Sie Zweige wie oben erstellen und verfolgen. Führen Sie beispielsweise run aus, um einen Git-Zweig zu erstellen, der mybranch entspricht

git checkout -b mybranch-svn fernbedienungen / mybranch

git svn dcommitHalten Sie für die Zweige, von denen Sie beabsichtigen , ihre Historien linear!


Weitere Informationen

Möglicherweise möchten Sie auch eine Antwort auf eine verwandte Frage lesen .

Greg Bacon
quelle
Dies funktioniert bei mir nicht, da ich den Trunk mit dem Git-SVN-Klon ausgecheckt habe. Ich habe keine Zweige zum Auschecken festgelegt. Ich denke, ich muss das zuerst tun.
Markovuksanovic
Tatsache ist, dass ich git svn clone svn.example.com/project/trunk verwendet habe. Und jetzt weiß ich nicht, wie ich andere Zweige so einstellen soll, dass sie verfolgt werden, ohne mein aktuelles Repo zu verlieren ...
markovuksanovic
20
Ich würde vorschlagen, ein Präfix für Ihre SVN-Fernbedienungen anzugeben. (Hinzufügen, --prefix=svn/wenn Sie dies tun git-svn initoder git-svn clone) Dadurch entfällt die Notwendigkeit, Ihren lokalen Niederlassungen ein Suffix hinzuzufügen.
Jason Karns
Wenn Sie mehrere Filialen haben, vergessen Sie nicht, "Git Checkout Master" zu machen, bevor Sie sich um eine andere
Branche
Wenn die show-ignoreFehler auftreten, versuchen Sie esgit svn show-ignore -i trunk
Antti Haapala