Git
Migration vers Git
Recherche…
Migrer de SVN vers Git en utilisant l'utilitaire de conversion Atlassian
Téléchargez l'utilitaire de conversion Atlassian ici . Cet utilitaire nécessite Java, donc assurez-vous que JRE Java Runtime Environment est installé sur la machine sur laquelle vous souhaitez effectuer la conversion.
Utilisez la commande java -jar svn-migration-scripts.jar verify
pour vérifier si votre java -jar svn-migration-scripts.jar verify
manque l'un des programmes nécessaires pour terminer la conversion. Plus précisément, cette commande vérifie les utilitaires Git, subversion et git-svn
. Il vérifie également que vous effectuez la migration sur un système de fichiers sensible à la casse. La migration vers Git doit être effectuée sur un système de fichiers sensible à la casse pour éviter de corrompre le référentiel.
Ensuite, vous devez générer un fichier auteurs. Subversion suit les modifications par le nom d'utilisateur du committer uniquement. Git utilise cependant deux informations pour distinguer un utilisateur: un vrai nom et une adresse électronique. La commande suivante générera un fichier texte mappant les noms d'utilisateur subversion à leurs équivalents Git:
java -jar svn-migration-scripts.jar authors <svn-repo> authors.txt
où <svn-repo>
est l'URL du dépôt de subversion que vous souhaitez convertir. Après avoir exécuté cette commande, les informations d'identification des contributeurs seront mappées dans authors.txt
. Les adresses e-mail seront de la forme <username>@mycompany.com
. Dans le fichier auteurs, vous devrez modifier manuellement le nom par défaut de chaque personne (qui est devenu son nom d'utilisateur par défaut) en leur donnant le nom réel. Assurez-vous également de vérifier l'exactitude de toutes les adresses électroniques avant de continuer.
La commande suivante clone un svn repo en tant que Git:
git svn clone --stdlayout --authors-file=authors.txt <svn-repo> <git-repo-name>
où <svn-repo>
est la même URL de référentiel utilisée ci-dessus et <git-repo-name>
est le nom du dossier dans le répertoire actuel dans lequel cloner le référentiel. Il existe quelques considérations avant d'utiliser cette commande:
- Le
--stdlayout
drapeau de Git ci - dessus indique que vous utilisez une mise en page standard avec letrunk
, lesbranches
ettags
des dossiers. Les référentiels Subversion avec des mises en page non standard nécessitent que vous spécifiiez les emplacements du dossier de la lignetrunk
, de tous les dossiers debranch
/ et de tous les dossiers detags
. Cela peut se faire en suivant l'exemple suivant:git svn clone --trunk=/trunk --branches=/branches --branches=/bugfixes --tags=/tags --authors-file=authors.txt <svn-repo> <git-repo-name>
. - Cette commande peut prendre plusieurs heures, selon la taille de votre dépôt.
- Pour réduire le temps de conversion des référentiels volumineux, la conversion peut être exécutée directement sur le serveur hébergeant le référentiel Subversion afin d'éliminer la surcharge du réseau.
git svn clone
importe les branches subversion (et le tronc) en tant que branches distantes, y compris les balises de subversion (branches distantes préfixées par des tags/
). Pour les convertir en branches et balises réelles, exécutez les commandes suivantes sur un ordinateur Linux dans l'ordre dans lequel elles sont fournies. Après leur exécution, git branch -a
devrait afficher les noms de branche corrects, et git tag -l
devrait afficher les balises du référentiel.
git for-each-ref refs/remotes/origin/tags | cut -d / -f 5- | grep -v @ | while read tagname; do git tag $tagname origin/tags/$tagname; git branch -r -d origin/tags/$tagname; done
git for-each-ref refs/remotes | cut -d / -f 4- | grep -v @ | while read branchname; do git branch "$branchname" "refs/remotes/origin/$branchname"; git branch -r -d "origin/$branchname"; done
La conversion de svn à Git est maintenant terminée! Il suffit de push
votre repo local vers un serveur et vous pouvez continuer à contribuer en utilisant Git ainsi que d' avoir une histoire de version entièrement préservée de svn.
SubGit
SubGit peut être utilisé pour effectuer une importation unique d'un référentiel SVN vers git.
$ subgit import --non-interactive --svn-url http://svn.my.co/repos/myproject myproject.git
Migrer de SVN à Git en utilisant svn2git
svn2git est un wrapper Ruby autour du support SVN natif de git via git-svn .
Exemples
Pour migrer un référentiel svn avec la disposition standard (par exemple, les branches, les balises et le tronc au niveau racine du référentiel):
$ svn2git http://svn.example.com/path/to/repo
Pour migrer un référentiel svn qui n'est pas dans une présentation standard:
$ svn2git http://svn.example.com/path/to/repo --trunk trunk-dir --tags tags-dir --branches branches-dir
Si vous ne souhaitez pas migrer (ou ne pas avoir) de branches, de balises ou de tronc, vous pouvez utiliser les options --notrunk
, --nobranches
et --notags
.
Par exemple, $ svn2git http://svn.example.com/path/to/repo --trunk trunk-dir --notags --nobranches
ne migrera que l'historique des troncs.
Pour réduire l'espace requis par votre nouveau référentiel, vous souhaiterez peut-être exclure les répertoires ou fichiers que vous avez ajoutés une fois que vous n'auriez pas dû (par exemple, répertoire de construction ou archives):
$ svn2git http://svn.example.com/path/to/repo --exclude build --exclude '.*\.zip$'
Optimisation post-migration
Si vous avez déjà quelques milliers de commits (ou plus) dans votre référentiel git nouvellement créé, vous souhaiterez peut-être réduire l'espace utilisé avant de transférer votre référentiel sur une télécommande. Cela peut être fait en utilisant la commande suivante:
$ git gc --aggressive
Remarque: la commande précédente peut durer plusieurs heures sur de grands référentiels (des dizaines de milliers de commits et / ou des centaines de mégaoctets d’historique).
Migration de Team Foundation Version Control (TFVC) vers Git
Vous pouvez migrer du contrôle de version Team Foundation vers GIT en utilisant un outil open source appelé Git-TF. La migration transférera également votre historique existant en convertissant les checkins tfs en git commits.
Pour mettre votre solution dans Git en utilisant Git-TF, suivez ces étapes:
Télécharger Git-TF
Vous pouvez télécharger (et installer) Git-TF à partir de Codeplex: Git-TF @ Codeplex
Cloner votre solution TFVC
Lancer powershell (win) et tapez la commande
git-tf clone http://my.tfs.server.address:port/tfs/mycollection '$/myproject/mybranch/mysolution' --deep
Le paramètre --deep est le mot-clé à noter car il indique à Git-Tf de copier votre historique de vérification. Vous avez maintenant un référentiel git local dans le dossier à partir duquel vous avez appelé votre commande cloe.
Nettoyer
- Ajoutez un fichier .gitignore. Si vous utilisez Visual Studio, l'éditeur peut le faire pour vous, sinon vous pouvez le faire manuellement en téléchargeant un fichier complet à partir de github / gitignore .
- Liaisons de contrôle de source RemoveTFS à partir de la solution (supprimez tous les fichiers * .vssscc). Vous pouvez également modifier votre fichier de solution en supprimant le GlobalSection (TeamFoundationVersionControl) ...... EndClobalSection
Commit & Push
Terminez votre conversion en validant et en transférant votre référentiel local sur votre télécommande.
git add .
git commit -a -m "Coverted solution source control from TFVC to Git"
git remote add origin https://my.remote/project/repo.git
git push origin master
Migration de Mercurial à Git
On peut utiliser les méthodes suivantes pour importer un Repo Mercurial
dans Git
:
- En utilisant l' exportation rapide :
cd
git clone git://repo.or.cz/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD
Utiliser Hg-Git : Une réponse très détaillée ici: https://stackoverflow.com/a/31827990/5283213
Utilisation de l'importateur de GitHub : Suivez les instructions (détaillées) sur GitHub .