2010-03-19 6 views
5

Ich bin in einer Position, wo ich der einzige mit Git bin, jeder andere nutzt Svn. Ich habe 'git svn' benutzt, um mich mit dem Team svn zu verbinden, und meistens funktioniert es gut. In letzter Zeit habe ich anfänglich ein eigenes Projekt gestartet, ein separates Git Repo und jetzt muss ich das Zeug mit dem Svn verschmelzen. Ich möchte jedoch weiterhin die Implementierung in meiner eigenen Privatsphäre zwischen Releases optimieren.Cherry-Picking von Git zu Svn (oder, wie man eine Projektgeschichte in Git und Releases in Svn)

Also, was wäre der einfachste Weg, um einige Commits aus meinem privaten Repo zu den SVN-geklonten Repo zu pflücken? Voraussetzung ist, dass die lokale Historie beibehalten wird und nur ein SVN-Commit für jede Auswahl besteht. Oder gibt es etwas Quetschen?

Als eine Methode, um dies zu erreichen, gibt es eine Möglichkeit, den privaten Repo als einen anderen Ursprung für das SVN-geklonte Repo zu bekommen?

Antwort

2

Sie könnten versuchen, git graft das Commit von Ihrem Git Repo auf das Commit des Git-Svn Repo vor git dcommit der Git Svn Repo.

Das Commit von Ihrem Repo könnte in einem speziellen Zweig isoliert werden, wenn all kind of squashing stattfinden kann, um eine sauberere Geschichte zu exportieren.

1

Wenn Sie derzeit die einzige Person sind, die den Git-Repo verwendet, können Sie erwägen, Ihre gesamte Arbeit auf den von Ihnen erstellten leeren Subversion-Klon zu übertragen. Dann richte eine Verzweigung ein, um deine Pushs zurück zur Subversion zu bringen, zerquetsche jede Version darauf und verbinde sie zurück mit SVN.

Für eine weitergehende Lösung, betrachten git commit-tree direkt mit - es mit dem Baum bieten Sie begehen wollen (gefunden von git show --format=raw HEAD laufen und schaue in der zweiten Zeile („Baum“)), die richtig Eltern begehen (was immer gerade in Subversion ist) und die richtige Log-Nachricht auf stdin. Dies ist die Verwendung der Installation direkt, wahrscheinlich möchten Sie ein Skript schreiben, um es für Sie zu tun ... Der Effekt ist, dass Sie ein neues Commit erstellt haben, das den Dateiinhalt eines vorhandenen Commits enthält (vergleichen Sie mit cherry-pick, das dauert das Diff, das von einem vorhandenen Commit hinzugefügt wird, anstatt den Baum zu kopieren).

+0

Ja, ich bin der einzige git Benutzer für jetzt. Würde die Umsiedelung bedeuten, dass alle zukünftigen Arbeiten im geklonten svn erledigt werden? Der geklonte svn repo ist nichts als leer ... Obwohl das nichts ändern kann. Kurz gesagt, ich könnte umformulieren, dass mein Projekt eigentlich ein Unterprojekt ist, das mit einem einzigen Trunk zusammengeführt wird, der mehrere verwandte Projekte in ihren eigenen Verzeichnissen enthält. – Jawa

+0

Es gibt keinen Grund, die Arbeit in dem Repo zu erledigen, die direkt aus Subversion geklont wurde, aber Sie sollten an Zweigen arbeiten, die den Subversion-Klon als Eltern haben. Sie können dies erreichen, indem Sie die rebasierenden Zweige zurück in Ihr Arbeitsrepository ziehen und 'git branch -f' verwenden, um Ihre aktuellen Arbeitszweige so einzustellen, dass sie auf Ihre referenzierten Referenzen zeigen. –