Hi,
mal eine Frage an die Git-Experten:
ich will ein externes Projekt, das in Git getrackt wird in meinen SVN-Baum importieren und auch einigermaßen synchron halten. Leider hat dieses Projekt keinen eigenen Git-SVN-Gateway, also muss ich selbst synchronisieren.
Die Doku, die ich finden konnte beschreibt prima wie man von SVN auf Git portiert, aber nicht den umgekehrten Weg.
Ich habe: einen Clone des Git-Repos. Ich brauche: eine Kopie des master-Branch plus ein paar Erweiterungen von mir in meinem SVN
Was muss ich jetzt machen?
Konrad
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hallo,
Am 04.06.10 08:55, schrieb Konrad Rosenbaum:
Ich habe: einen Clone des Git-Repos. Ich brauche: eine Kopie des master-Branch plus ein paar Erweiterungen von mir in meinem SVN
Was muss ich jetzt machen?
Ich bin jetzt kein Experte.
Ich würde (wenn nur git als Benutzungsmöglichkeit ausscheidet) je nach Aufwand, ein eigenes SVN-Gateway aufsetzen (Deine lokale Git-Kopie ist ja auch wieder ein Verzweigungspunkt der dezentralen Hierarchie) oder die Revisionen per Hand über die ausgecheckte Version synchronisieren, also den Verzeichnisbaum von zwei Versionskontrollsystemen verwalten lassen.
Soweit ich weiß, kann man auch git mit einem externen SVN-Repository verheiraten (mit CVS funktioniert das leider nur unter bestimmten Voraussetzungen), und dann lokal nur noch git verwenden und gelegentlich Revisionen zum svn hochschieben. Das müsste auch gehen.
Tobias
On 04.06.10 02:55:44, Konrad Rosenbaum wrote:
Die Doku, die ich finden konnte beschreibt prima wie man von SVN auf Git portiert, aber nicht den umgekehrten Weg.
man git-svn
Ich habe: einen Clone des Git-Repos. Ich brauche: eine Kopie des master-Branch plus ein paar Erweiterungen von mir in meinem SVN
Was muss ich jetzt machen?
Zum Auschecken:
git svn clone URL
Dann git benutzen...
Zum Einchecken in svn:
git svn fetch # aktuallisiert das git remote repository (git-svn) git svn rebase # rebase den git HEAD auf git-svn (macht auch git svn fetch) git svn dcommit # schreibt den git HEAD zurueck nach svn
-Robert
On Freitag, 4. Juni 2010 08:55:44 Konrad Rosenbaum wrote:
Ich habe: einen Clone des Git-Repos. Ich brauche: eine Kopie des master-Branch plus ein paar Erweiterungen von mir in meinem SVN
Was muss ich jetzt machen?
Im Allgemeinen ist es aussichtslos, eine Git-Historie in ein SVN zu linearisieren. Andersherum ist es relativ einfach, siehe git-svn (was Robert in seiner Mail beschrieben hat, aber das geht eben in die falsche Richtung).
Am Sinnvollsten (wenn man gezwungen ist, mit Git zu arbeiten), wäre wahrscheinlich, beide Checkouts im selben Verzeichnis zu haben. Du legst dir also einen lokalen SVN-Master an, machst den Initial-Checkout, und kopierst dann den gesamten Git-Klon (inklusive .git-Verzeichnis) rein. Dann stellst du ein, dass die beiden VCS gegenseitig ihre Datenverzeichnisse ignorieren, checkst im Git den Master aus, und commitest das dann ins SVN. Am besten legst du dir bei der Gelegenheit bei dem aktuellen Git-Commit eine Branch an, damit du den wiederfindest.
Dann kannst du im SVN arbeiten, und wenn du deine SVN-Commits dann ins Git pushen möchtest, gehst du per svn up zum ersten Commit nach dem Git-Import, und commitest dann die geänderten Dateien wieder ins Git. Dann holst du mit svn up den nächsten Commit und fügst auch den ins Git ein. Diese Prozedur kann man sicher per Skript automatisieren.
Das ganze Commiten vom SVN nach Git sollte erstmal auf die lokale Branch legen, die du dir beim Import angelegt hast. Am Ende machst du einen Rebase dieser Branch auf den Git-Master, und pushst das ganze dann auf den Git- Server.
Gruß Stefan
P.S. Wahrscheinlich gibts für sowas schon Skripte etc. Tante Google weiß hoffentlich Rat.
On Friday 04 June 2010, Stefan Majewsky wrote:
On Freitag, 4. Juni 2010 08:55:44 Konrad Rosenbaum wrote:
Ich habe: einen Clone des Git-Repos. Ich brauche: eine Kopie des master-Branch plus ein paar Erweiterungen von mir in meinem SVN
Was muss ich jetzt machen?
Im Allgemeinen ist es aussichtslos, eine Git-Historie in ein SVN zu linearisieren.
Muss ja nicht sein. Ich muss nur ab und zu die aktuellste Variante im SVN haben - nach Möglichkeit ohne jedesmal ein svn import machen zu müssen.
Andersherum ist es relativ einfach, siehe git-svn (was Robert in seiner Mail beschrieben hat, aber das geht eben in die falsche Richtung).
Man muss tatsächlich so rum gehen, aber mit etwas kreativem gitten geht es dann:
1) man macht sich einen git clone des leeren SVN Pfades: git svn clone -s http://svnserver/pfad (-s sagt git svn dass man die üblichen trunk/branches/tags verwenden will)
2) man holt sich das originale git-Verzeichnis ran git remote add origin git://gitserver/pfad git pull -v
3) man ignoriert alle Warnungen von wegen default merge Pfad, etc.pp.
4) man merged origin mit lokal: git merge origin/master
5) man pusht local nach SVN: git dcommit -e
6) jetzt kann ich den SVN Pfad so verwenden wie ich will: als external Referenz in einem SVN-basierten Projekt und mit eigenen Modifikationen im SVN
Konrad
Am 4. Juni 2010 08:55 schrieb Konrad Rosenbaum konrad@silmor.de:
ich will ein externes Projekt, das in Git getrackt wird in meinen SVN-Baum importieren und auch einigermaßen synchron halten. Leider hat dieses Projekt keinen eigenen Git-SVN-Gateway, also muss ich selbst synchronisieren.
Nur mal so interessehalber: Warum? Willst Du das externe Projekt in einem bereits bestehendes Repo mitführen oder willst Du auch selbst Änderungen vornehmen?
Eric
On Sunday 06 June 2010, Eric Schaefer wrote:
Am 4. Juni 2010 08:55 schrieb Konrad Rosenbaum konrad@silmor.de:
ich will ein externes Projekt, das in Git getrackt wird in meinen SVN-Baum importieren und auch einigermaßen synchron halten. Leider hat dieses Projekt keinen eigenen Git-SVN-Gateway, also muss ich selbst synchronisieren.
Nur mal so interessehalber: Warum? Willst Du das externe Projekt in einem bereits bestehendes Repo mitführen oder willst Du auch selbst Änderungen vornehmen?
Beides. Um etwas genauer zu sein: ich entwickle an einem recht großen Qt-basierten Projekt[1], das in einem der nächsten Schritte scriptfähig werden soll. Es gibt eine recht gute Extension[2], die alle Qt-Module verscriptet - was mir wiederum eine Menge Arbeit spart. Diese Extension ist aber noch alpha und braucht außerdem noch ein paar Scripte, damit sie auch im korrekten Pfad installiert wird und Pakete[1] für Debian und Windows bekommt, etc.
[1] http://smoke.silmor.de/ [2] http://labs.trolltech.com/page/Projects/QtScript/Generator
Konrad
lug-dd@mailman.schlittermann.de