Non. Votre meilleur pari serait de mettre en place un miroir du référentiel svn dans un référentiel git dédié.
git svn clone -s http://subversion.example.com/ mysvnclone
cd mysvnclone
git remote add origin [email protected]:project.git
git push origin master
Ensuite, vous pouvez ajouter le référentiel git en tant que sous-module au projet d'origine
cd /path/to/gitproject
git submodule add git://example.com/project.git -- svn-project
git add svn-project
git commit -m "Add submodule"
Il existe une différence conceptuelle entre svn: externals et le sous-module git qui peut vous trébucher si vous abordez cela d'un point de vue subversion. Le sous-module git est lié à la révision que vous lui donnez. Si «en amont» change, vous devez mettre à jour la référence de votre sous-module.
Donc, lorsque nous resynchronisons avec la subversion en amont:
cd /path/to/mysvnclone
git svn rebase
git push
... le projet git utilisera toujours la révision d'origine que nous avons validée précédemment. Pour mettre à jour vers svn HEAD, vous devez utiliser
cd /path/to/gitproject/svn-project
git checkout master
git pull
cd ..
git add svn-project
git commit -m"Update submodule"
Je viens de traverser ça. Je fais quelque chose de similaire à rq, mais légèrement différent. J'ai configuré l'un de mes serveurs pour héberger ces clones git des dépôts svn dont j'ai besoin. Dans mon cas, je ne veux que des versions en lecture seule et j'ai besoin d'un dépôt nu sur le serveur.
Sur le serveur que je lance:
Cela configure mon dépôt nu, puis j'ai un script cron pour le mettre à jour:
Cela nécessite également fix-svn-refs.sh de http://www.shatow.net/fix-svn-refs.sh Cela a été principalement inspiré par: http://gsocblog.jsharpe.net/archives/12
Je ne sais pas pourquoi le
git gc
est nécessaire ici, mais je n'ai pas pu m'engit pull
passer.Donc, après tout cela, vous pouvez utiliser le sous-module git en suivant les instructions de rq.
la source
Actuellement, git-svn ne prend pas en charge svn: externals . Mais il existe deux autres outils qui peuvent vous aider:
SubGit
SubGit est une solution côté serveur, il permet d'accéder à Git au référentiel Subversion et vice versa. Vous pouvez vous référer à la documentation pour plus de détails, mais en général, il est assez facile d'utiliser SubGit:
La commande ci-dessus détectera la disposition des branches dans le projet SVN, puis créera un référentiel Git vide, prêt à refléter le projet SVN. Des informations d'identification peuvent vous être demandées à moins qu'elles ne soient déjà stockées dans le cache des informations d'identification SVN dans le répertoire ~ / .subversion. Vous pouvez également ajuster
$GIT_REPO/subgit/authors.txt
pour mapper les noms d'auteur SVN aux identités Git.En ce moment, le référentiel Subversion est connecté au référentiel Git nouvellement créé. SubGit traduit la révision SVN en commit Git à chaque fois
svn commit
et Git commit en révision SVN à chaquegit push
.Tout ce dont vous avez besoin est de rendre le référentiel Git disponible pour les committers. Jetez un œil à git-http-backend pour cela. Ensuite, vous pouvez ajouter le dépôt Git créé en tant que sous-module habituel. SubGit est également disponible en tant que module complémentaire pour le serveur Bitbucket, pour en savoir plus, cliquez ici . Donc, il n'est pas nécessaire d'utiliser des outils externes comme git-svn ou tout autre.
SubGit est un logiciel propriétaire mais il est gratuit pour les petites entreprises (jusqu'à 10 committers), les projets académiques et open source.
SmartGit
SmartGit remplace git-svn côté client. Vous trouverez ici plus d'informations sur ses fonctionnalités .
En particulier, SmartGit prend en charge les sous - modules git et svn: externals , vous pouvez les mélanger dans votre référentiel.
SmartGit est un logiciel propriétaire, mais il est gratuit pour un usage non commercial.
la source
subgit
( subgit.com/documentation/… ) et lesmartgit
supporte lesvn:externals
de la même manière par un.gitsvnextmodules
fichier explicite dans une copie de travail. Ce qui signifie que vous devez toujours utiliser ces logiciels pour extraire les externes et que vous ne pouvez pas utiliser l'git
utilitaire de base pour récupérer ces externes directement à partir d'un serveur hub git externe commegithub
ougitlab
. Ainsi, les sources reliées à unsnv:externals
serveur hub git externe ne seront pas observables et téléchargeables sans ces logiciels, ce qui reste un problème important.En plus de ce que rq a dit, une autre méthode serait d'utiliser le projet tiers "externals" ( http://nopugs.com/ext-tutorial ), qui imite mieux le fonctionnement des références externes svn. Avec les externes, vous pouvez suivre les référentiels git ou svn, et il semble plus facile de pousser vos modifications en amont vers ces dépôts. Cependant, les membres du projet doivent télécharger et installer le package séparé.
Je n'ai pas encore utilisé de sous-modules ou d'externes; cependant, j'ai passé quelques heures à lire sur toutes les alternatives et il semble que les externes conviendront mieux à mes besoins. Il y a une excellente discussion à propos de ces méthodes et d'autres méthodes personnalisées dans le chapitre 15 de «Contrôle de version avec Git», par Jon Loeliger ( http://oreilly.com/catalog/9780596520120 ), que je recommande fortement.
la source
Piston est en cours de réécriture pour prendre en charge cela, et l'inverse, plus l'URL Subversion existante dans un répertoire Subvresion et git + git.
Découvrez le référentiel piston Github .
Malheureusement, il ne semble pas avoir été publié.
la source
Eh bien, il y en a
git-remote-testsvn
, alors je suppose que quelque chose commedevrait marcher. Le fait-il?
la source