Nein. Am besten richten Sie einen Spiegel des SVN-Repositorys in einem dedizierten Git-Repository ein.
git svn clone -s http://subversion.example.com/ mysvnclone
cd mysvnclone
git remote add origin [email protected]:project.git
git push origin master
Anschließend können Sie das Git-Repository als Submodul zum ursprünglichen Projekt hinzufügen
cd /path/to/gitproject
git submodule add git://example.com/project.git -- svn-project
git add svn-project
git commit -m "Add submodule"
Es gibt einen konzeptionellen Unterschied zwischen svn: externals und git submodule, der Sie möglicherweise stolpern lässt, wenn Sie sich dem unter dem Gesichtspunkt der Subversion nähern. Das Git-Submodul ist an die von Ihnen angegebene Revision gebunden. Wenn sich "Upstream" ändert, müssen Sie die Referenz Ihres Submoduls aktualisieren.
Wenn wir also mit der Upstream-Subversion erneut synchronisieren:
cd /path/to/mysvnclone
git svn rebase
git push
... das Git-Projekt wird weiterhin die ursprüngliche Revision verwenden, die wir zuvor festgelegt haben. Um auf den svn HEAD zu aktualisieren, müssten Sie verwenden
cd /path/to/gitproject/svn-project
git checkout master
git pull
cd ..
git add svn-project
git commit -m"Update submodule"
Ich habe das gerade durchgemacht. Ich mache etwas ähnliches wie rq, aber etwas anders. Ich habe einen meiner Server so eingerichtet, dass er diese Git-Klone der benötigten SVN-Repos hostet. In meinem Fall möchte ich nur schreibgeschützte Versionen und benötige ein nacktes Repo auf dem Server.
Auf dem Server starte ich:
Dies richtet mein nacktes Repo ein, dann habe ich ein Cron-Skript, um es zu aktualisieren:
Dies erfordert auch fix-svn-refs.sh von http://www.shatow.net/fix-svn-refs.sh. Dies wurde hauptsächlich inspiriert von: http://gsocblog.jsharpe.net/archives/12
Ich bin mir nicht sicher, warum das
git gc
hier gebraucht wird, aber ich konnte nichtgit pull
darauf verzichten.Nach all dem können Sie das Git-Submodul gemäß den Anweisungen von rq verwenden.
quelle
Derzeit git-svn nicht unterstützt svn: externals . Es gibt jedoch zwei weitere Tools, die Ihnen helfen können:
SubGit
SubGit ist eine serverseitige Lösung, die Git den Zugriff auf das Subversion-Repository ermöglicht und umgekehrt. Weitere Informationen finden Sie in der Dokumentation. Im Allgemeinen ist die Verwendung von SubGit jedoch recht einfach:
Der obige Befehl erkennt das Layout der Zweige im SVN-Projekt und erstellt dann ein leeres nacktes Git-Repository, das zum Spiegeln des SVN-Projekts bereit ist. Möglicherweise werden Sie nach Anmeldeinformationen gefragt, es sei denn, diese sind bereits im SVN-Anmeldeinformations-Cache im Verzeichnis ~ / .subversion gespeichert. Sie können auch anpassen
$GIT_REPO/subgit/authors.txt
, um SVN-Autorennamen Git-Identitäten zuzuordnen.In diesem Moment ist das Subversion-Repository mit dem neu erstellten Git-Repository verbunden. SubGit übersetzt die SVN-Revision in Git-Commit bei jedem
svn commit
und Git-Commit in SVN-Revision bei jedemgit push
.Alles, was Sie weiter benötigen, ist, das Git-Repository für Committer verfügbar zu machen. Schauen Sie sich dazu das git-http-backend an. Anschließend können Sie das erstellte Git-Repository als übliches Submodul hinzufügen. SubGit ist auch als Add-On für den Bitbucket-Server erhältlich. Weitere Informationen finden Sie hier . Es ist also nicht erforderlich, externe Tools wie git-svn oder andere zu verwenden.
SubGit ist eine proprietäre Software, die jedoch für kleine Unternehmen (bis zu 10 Committer), akademische und Open-Source-Projekte kostenlos ist.
SmartGit
SmartGit ersetzt git-svn auf der Clientseite. Weitere Informationen zu den Funktionen finden Sie hier .
Insbesondere unterstützt SmartGit sowohl Git-Submodule als auch svn: externals . Sie können diese in Ihrem Repository mischen.
SmartGit ist eine proprietäre Software, die jedoch für den nichtkommerziellen Gebrauch kostenlos ist.
quelle
subgit
( subgit.com/documentation/… ) als auch dassmartgit
unterstützen dassvn:externals
in gleicher Weise durch eine explizite.gitsvnextmodules
Datei in einer Arbeitskopie. Das bedeutet, dass Sie diese Software weiterhin zum Auschecken von externen Geräten verwenden müssen und das Basisdienstprogramm nichtgit
zum Auschecken dieser externen Geräte direkt von einem externen Git-Hub-Server wiegithub
oder verwenden könnengitlab
. Daher können die Quellen, diesnv:externals
auf einen externen Git-Hub-Server übertragen werden, ohne diese Software nicht beobachtet und heruntergeladen werden, was immer noch ein wichtiges Problem darstellt.Zusätzlich zu den Aussagen von rq wäre eine andere Methode die Verwendung des "externen" Projekts eines Drittanbieters ( http://nopugs.com/ext-tutorial ), das die Funktionsweise externer SVN-Referenzen besser nachahmt. Mit externen Geräten können Sie entweder Git- oder SVN-Repositorys verfolgen, und es scheint einfacher zu sein, Ihre Änderungen in diese Repos zu übertragen. Die Projektmitglieder müssen jedoch das separate Paket herunterladen und installieren.
Ich habe noch keine Submodule oder externen Geräte verwendet. Ich habe jedoch einige Stunden damit verbracht, über alle Alternativen zu lesen, und es sieht so aus, als würden externe Geräte besser zu meinen Bedürfnissen passen. Es gibt eine ausgezeichnete Diskussion über diese und andere benutzerdefinierte Methoden in Kapitel 15 von "Versionskontrolle mit Git" von Jon Loeliger ( http://oreilly.com/catalog/9780596520120 ), die ich dringend empfehle.
quelle
Der Kolben wird neu geschrieben, um dies und das Gegenteil zu unterstützen, sowie die vorhandene Subversion-URL in einem Subvresion-Repoistory und git + git.
Überprüfen Sie das Kolben-Github-Repository .
Leider scheint es nicht veröffentlicht worden zu sein.
quelle
Nun, das gibt es
git-remote-testsvn
, also denke ich so etwassollte arbeiten. Macht es?
quelle