2011-01-14 5 views
20

dies ist der Workflow ich zur Zeit für meine SVN-Projekte verwenden (ich nie SVN Zweige verwenden, und einige Projekte werden auch von anderen Menschen aktiv bearbeitet):git & svn externals - eine endgültige Lösung noch?

  • auf dem Server, die inital git svn fetch tut der Macht Stunden dauern. Erstellen Sie auch einen 'build' Zweig.
  • auf einer Klonen Entwicklung Maschine ist schnell jetzt: git clone srv://project.git, git checkout build von git update-refs ..., git svn fetch folgte dem Link zum SVN-Repository
  • Arbeit verpflichten, die Arbeit verpflichten, wiederherzustellen ...
  • zu überprüfen, ob die Dinge vernünftig sind, git push build auf die Server und triggert einen Build in Hudson für diesen Zweig
  • um Arbeit zu speichern, so dass ich von einer anderen Maschine darauf arbeiten kann, auch Push-Build-Zweig
  • wenn Sie zufrieden sind, Join commits in logischen Schritten zusammen (zB eine für jeden Fehler) , Commit zu Svn und Reset alles wie git checkout master, git merge build, git svn dcommit, git push, git checkout build, git rebase master, git push build

Geben Sie svn externals ein. Ich habe jedes Skript here bereits versucht, aber alle von ihnen scheitern. Meine Äußerlichkeiten sind Setup wie folgt aus:

/path/to/x x 
/path/to/y/z y/z 
/path/to/a/b.file a/b.file 

und die Skripte Dinge tun, wie der Versuch, /path/to/x in der Wurzel des Dateisystems und git svn fetch /path/to/x zu erstellen. Auch die einzelnen Dateien scheinen mehr Probleme zu verursachen. (Unterfrage 1: Was ist das svn: Externes Format, für das diese Skripte geschrieben wurden?)

Es scheint nicht schwer zu sein, eines der Skripts zu modifizieren, um mit meiner Situation umzugehen und die Verzeichnisstruktur zu replizieren, nach der ich richtig suche. Aber dann habe ich ein großes Problem: Wenn ich eine Datei in den Verzeichnissen x und y/z ändere, sehe ich keine Möglichkeit, dies zu einem einzigen SVN-Commit zu machen, und das ist einer der Gründe, warum ich angefangen habe git an erster Stelle.

Daher die Frage: Gibt es eine Möglichkeit, ich kann den obigen Workflow replizieren, nur Teile eines bestimmten SVN-Repository verwenden, so dass ich Svn DCommit im Stamm tun kann? Ich würde eine fertige Lösung bevorzugen, die sowohl unter Linux als auch unter Windows funktioniert.

bearbeiten Ich hackte schnell durch eines der Skripte, die ich fand und replizierte es die Verzeichnisstruktur des SVN externals. Ich kann allerdings nicht einzelne Dateien klonen, ist hier Ausgabe:

git svn clone -r HEAD srv://svn/repo/path/to/projects.sln 
Initialized empty Git repository in xxx/projects.sln/.git/ 
Invalid filesystem path syntax: REPORT request failed on '/svn/repo/!svn/vcc/default': 
    Cannot replace a directory from within at yyy/git/libexec/git-core/git-svn line 5114 

Teilfrage 2: ist es nicht möglich, eine einzelne Datei über git svn holen?

+0

Ich fand, dass [dieses Skript] (https://github.com/mgee/git-svn-ext) mit den aktuellen Versionen von SVN und Git funktioniert –

+2

@IvanKoblik danke für das Posting, obwohl ich zugeben muss, dass ich einfach auf alle Repositories synchron beendet habe und stattdessen alle Kollegen gezwungen habe, einfach nur git zu benutzen: P – stijn

+0

Nach der Verwendung für eine Weile sogar mit dem Skript ist es sehr umständlich Ich denke, Git-Svn schneidet es nicht für SVN-Repositories mit externen, Ihr Sol Die beste Wahl ist. –

Antwort

14

Leider sind die externen svn ziemlich flexibel. Ich habe über eine Reihe von Skripten, die sie als > > URL > > < > 0.ist auch zulässig behandelt. Ich denke, einige der Skripte sind in dieser Hinsicht einfach gebrochen.

Um Ihre zweite Teilfrage zu beantworten: Nein. 'git svn fetch' muss auf einem Teilbaum von Subversions Repo laufen, aber es muss etwas sein, das wie ein Zweig behandelt werden kann. Die einzige Sache, die gut in dieses Paradigma passt, ist ein Verzeichnis (trunk /, zum Beispiel). FWIW, Bazaar und Mercurial leiden auch hier. Am Ende des Tages ist Subversion nur ein versioniertes Dateisystem, während Git ein First-Class-Konzept einer Verzweigung hat. Dies ist eine dieser Unstimmigkeiten, die in die Quere kommen.: --(

1

Nur ein weiterer Hinweis auf die zweite Teilfrage. Soweit ich weiß Subversion ab heute auch nicht svn externals für Dateien, nur Ordner. Also denke ich, solche Einträge in den Eigenschaften wäre ungültig. Ich weiß nicht, ob es Werkzeuge gibt, die diesen Fall behandeln

+1

Während es eine wichtige PITA ist (besonders wenn man versucht, SVN zu Git zu überbrücken), sind Dateiexternale in SVN sehr gut möglich. Ich weiß seit wann nicht mehr, aber alle SVN-Kommandozeilen-Clients, die seit mindestens Version 4.5 mit Xcode ausgeliefert wurden - und diese sind meist ziemlich veraltet. – danyowdee

+1

IIRC-Datei externals erfordert Version 1.8 oder höher auf dem Client und dem Server ordnungsgemäß zu funktionieren. – PMF

Verwandte Themen