2013-05-16 14 views
6

Ich teste SubGit als eine Möglichkeit der Migration von SVN zu Git.SubGit: Wie man Zweige ausschließt?

Was ich tun möchte, ist in der Lage, Remote-Niederlassungen in der Git-Repository zu erstellen, dass alle Benutzer nicht zurück zu SVN synchronisieren können.

Ich möchte nur SubGit den Master-Zweig verfolgen und es wieder mit SVN synchronisieren, so dass wir die Freiheit haben, andere Git-Zweige zu verwenden und zu teilen.

Gibt es eine einfache Möglichkeit, dies zu tun?

Danke

Antwort

7

Die ideale Lösung wäre Stamm werden spezifiziert: refs/heads/master Mapping in SubGit configuration, so SubGit Stamm mit Master ignoriert alle anderen Zweige synchronisieren würde.

Leider benötigt SubGit zur Zeit mindestens ein Branch Mapping (Versionen 1.0.x und 2.0.x). Das heißt, man hat etwas geben:

trunk = trunk:refs/heads/master 
branches = branches/*:refs/heads/* 
shelves = shelves/*:refs/shelves/* 
tags = tags/*:refs/tags/* 

Da Sie nicht alle Git Zweige synchronisieren gehen, sollten Sie einige spezielle Namespace, das Problem zu umgehen:

trunk = trunk:refs/heads/master 
branches = branches/*:refs/gitsvn/heads/* 
... 

So, wenn man Master Zweig zu zentralen Git-Repository, wird es übersetzt in Stamm. Wenn man jedoch den Zweig foo drückt, ignoriert SubGit diese Verzweigung, da refs/heads/foo nicht synchron ist.

Die Probleme aus merge kommen begeht: commit, wenn A das Ergebnis der Zusammenführung Zweig foo ist in Master, erstellt SubGit branches/foo auf Subversion Seite für entsprechende Elternteil von A. commit Wenn Sie es lieber nicht SubGit erzeugt Zweige in * branches/** Namensraum, in Betracht ziehen einige spezielle Zweige auf Subversion-Seite als auch enthalten:

trunk = trunk:refs/heads/master 
branches = gitsvn/branches/*:refs/gitsvn/heads/* 
shelves = shelves/*:refs/shelves/* 
tags = gitsvn/tags/*:refs/gitsvn/tags/* 

In diesem Fall die gleichen Eltern von commit A sollte gesendet werden, um gitsvn/branches/foo Zweig.

Dies ist die derzeit beste verfügbare Lösung. Wir haben auch eine Feature-Anforderung für Version 2.1, die eine ideale Lösung für Sie ermöglichen würde, aber es wird noch einige Zeit dauern, bis wir es implementieren.

-Update auf SubGit 3.0:

Seit Version 3.0.0 (Early Access Bühne im Moment, Download unter http://subgit.com/eap) SubGit unterstützt einzelne Zweig Layout, so dass Konfigurationsdatei kann wie folgt aussehen:

  1. Kein Stamm, keine Verzweigungen, keine Tags und keine Regale:

    [svn] 
        url = http://host.com/repos/project 
    

    In diesem Fall Projekt Verzeichnis direkt zugeordnet Master Zweig in Git-Repository; SubGit ignoriert alle anderen Zweige und erstellt niemals Regale, was bedeutet, dass anonyme Git-Zweige nicht mit SVN synchronisiert werden.

  2. Einzel Stamm, keine Regale:

    [svn] 
        url = http://host.com/repos/project 
        trunk = trunk:refs/heads/master 
    

    In diesem Fall Projekt/trunk Verzeichnis wird Master abgebildet Niederlassung in Git-Repository; SubGit ignoriert alle anderen Zweige und erstellt niemals Regale.

  3. Einzelstamm mit Regalen:

    [svn] 
        url = http://host.com/repos/project 
        trunk = trunk:refs/heads/master 
        shelves = shelves/*:refs/shelves/* 
    

    In diesem Fall Projekt/Stamm Verzeichnis Master Niederlassung in Git-Repository abgebildet; SubGit ignoriert alle anderen Zweige, übersetzt jedoch standardmäßig anonyme Zweige in Regale für die Versionen 1.0.x und 2.0.x.

Hoffe, dass hilft.

+0

Vielen Dank für die Antwort. Ich habe in der Zwischenzeit damit herumgespielt und bin dazu übergegangen, all meine git-only-Zweige (wie foo) in ein separates entferntes blankes Repository zu packen und foo dann bei Bedarf in den master zu mixen und dann die Dinge zurück ins Synchronisations-Repository zu schieben –

+0

Wie läuft es mit der erwähnten 'idealen Lösung'? Ich habe eine [neue Frage] (http://stackoverflow.com/questions/22377071/subgit-avoid-to-synchronize-git-branches-onto-svn) zu diesem Thema geöffnet, da ich gerne git Filialen nie haben möchte in svn reflektiert. Danke – ThanksForAllTheFish

+0

Es ist immer noch in Arbeit. Ein solches Layout wird vollständig in der Richtung von svn nach git unterstützt, aber es gibt bestimmte Randfälle, mit denen wir uns beim Konvertieren von Git-Commits in SVN-Revisionen befassen müssen. Wie auch immer, dieses Feature steht momentan ganz oben auf unserer Prioritätenliste. – vadishev

Verwandte Themen