2009-11-05 4 views
11

Es gibt ein Open-Source-Projekt, das ich auschecken und beitragen möchte. Das Haupt-Repository ist SVN, aber ich möchte in Git arbeiten. Ist das möglich?Lokale Arbeit mit Git, wenn das Haupt-Repository SVN ist

Die meisten meiner Suchanfragen werden in Hilfslinien angezeigt, in denen Sie von SVN zu Git (oder umgekehrt) wechseln und nicht zurückblicken.

  • Wenn ich das Projekt auschecke, ändere es und schiebe es an den Zweig, den ich auf Github erstellt habe. Wie sollte ich die ursprünglichen Autoren benachrichtigen?
  • Wie schwer ist es, einen Beitrag über ein Git Repos in ein SVN Repos aufzunehmen?
  • Vergleichen Sie einfach zwei Revisionen (meine letzte Checkout/pull/update und meine eigene lokale letzte commit), generieren Sie einen Patch von ihm und senden Sie es an sie; Sollte dies als Fallback-Workflow betrachtet werden oder ist dies der Standardansatz?
  • Angenommen, die ursprünglichen Autoren haben keinerlei Interesse daran, etwas anderes als SVN zu lernen.

    [Update] Ich habe nicht, noch möchte ich, Zugriff auf das SVN-Repository festschreiben. Ich suche nach Workarounds dafür.

    [Update2] Wenn Patches tatsächlich meine einzige Option sind, gibt es irgendwelche zusätzlichen Vorbehalte, die ich beachten sollte?

    Antwort

    7

    Zum Glück gibt es git-svn für genau diesen Zweck. Es ermöglicht Ihnen, git lokal zu verwenden, während Sie auch in SVN einchecken können, wenn Sie dies wünschen. Es ist ziemlich einfach und es gibt viele Informationen, wenn Sie hier oder über Google nach git-svn suchen.

    Es gibt ein Tutorial unter http://flavio.castelli.name/howto_use_git_with_svn, das Sie vielleicht zuerst betrachten möchten.

    Bearbeiten: Um SVN kompatible diffs zu generieren, können Sie git diff --no-prefix verwenden. Beachten Sie jedoch, dass dieses Format nicht mit TortoiseSVN kompatibel ist. Wenn Kompatibilität erforderlich ist, müssen Sie eine Art Shell-Skript verwenden. siehe Beispiel hier: http://mojodna.net/2009/02/24/my-work-git-workflow.html

    Edit: Ein möglicher Nachteil von git-svn ist, dass es nicht SVN Äußerlichkeiten nicht handhaben. Du müsstest mit dir selbst fertig werden.

    Viel Glück!

    +0

    Ja, sah Ive einige zu git-svn. Es sieht gut aus, um die Updates von den ursprünglichen (SVN) Repos zu holen. Aber ich bin hauptsächlich am Upstream-Workflow interessiert. Wie man die Flecken richtig behandelt und erzeugt (wenn das meine einzige Wahl ist)? – Mizipzor

    +0

    Ich habe jetzt Informationen zur Generierung von SVN-Patches in meine Antwort aufgenommen. – lemonad

    3

    Ja! Das ist möglich!

    prüfen diesen Beitrag für die Details: http://www.romanenco.com/gitsvn

    Es gibt drei oder vier einfachen Schritten Symbiose von SVN und Git SCMs zu machen.

    Ich arbeitete mit dieser Technologie etwa drei Monate und habe keine Probleme. Es ist sehr cool! Wenn Ihr Hauptrepo im SVN ist und Sie können offline commits machen und werden von Git merging mächtig.

    6

    eine Git-Repository synchron mit einer Subversion-Repository zu halten ist einfach:

    Clont die Subversion-Repository (in diesem einfachen Beispiel ich ignoriere branches/tags)

    $ git svn clone https://url/to/repo/trunk 
    

    Bleiben Sie up-to- Datum mit dem Subversion-Stamm:

    $ git svn rebase 
    

    Nun, wenn Sie Zugriff auf die Subversion-Repo begehen haben, könnten Sie Ihre Änderungen drücken:

    $ git commit 
    $ git svn dcommit 
    

    Andernfalls einen Patch einreicht Ihre einzige Option, wenn die Committer zur Subversion-Repository kein Interesse an der Verwendung von Git haben:

    $ git diff 1cc92b96 > my_patch.patch 
    

    In diesem Fall ist es offensichtlich am besten ist nicht verpflichtet zu dem Zweig zu machen Sie synchronisieren mit dem Subversion Repo.

    +0

    Warum sollte ich keine Commits für den Zweig Im Syncing machen? Nur weil es einfacher ist, das diff zu erzeugen (da ich nur dann eine Commit ID benötige)? – Mizipzor

    1

    Wenn Sie keinen Zugriff auf das SVN-Repository haben und dies auch nicht möchten, kann eine Kombination von git-svn und StGit hilfreich sein. git-svn erstellt/einen Klon aktualisiert und stg unterhält eine Reihe von Patches oben drauf (stg Befehle aus StGit Crash Course):

    git svn clone .. 
    
    stg new invent-some-patch-id 
    ...edit patch description... 
    ...hack hack hack in the tree... 
    stg refresh 
    ...possibly hack some more... 
    stg refresh  
    .. 
    stg mail 
    

    Siehe StGIT Tutorial, um loszulegen.

    ANMERKUNG: Ich habe nicht wirklich diesen Workflow versucht.

    +0

    Interessant, danke, ich überprüfe StGit, wenn ich nach Hause komme. Ich glaube tatsächlich, das größte Problem hier ist der Versuch, mit Leuten zu arbeiten, die nicht an die verteilten Versionskontrollsysteme glauben. Aber es geht nur darum, Patches manuell zu managen, also merke ich immer mehr, dass es wahrscheinlich der richtige Weg ist. – Mizipzor