1615 votes

Migrer le référentiel SVN avec histoire à un nouveau dépôt Git

J’ai lu le manuel de Git, FAQ, Git - SVN crash course, etc. et ils sont tous expliquent ceci et cela, mais nulle part vous trouverez une simple instruction comme :

Repository SVN dans :``

Dépôt git en :``

Je ne vous attendez pas qu’elle qui soit simple, et je ne vous attendez pas à une seule commande. Mais je m’attends ne pas à essayer d’expliquer quoi que ce soit - juste pour dire quelles mesures à prendre compte tenu de cet exemple.

1652voto

Casey Points 19286

Créer un utilisateurs de fichiers ( users.txt) pour la cartographie des utilisateurs SVN à GIT:

user1 = First Last Name <email@address.com>
user2 = First Last Name <email@address.com>
...

SVN va s'arrêter si elle constate un manque SVN utilisateur n'est pas dans le fichier. Mais après que vous pouvez mettre à jour le fichier et pick-up où vous l'avez laissé.

Maintenant, tirez sur le SVN de données à partir de la mise en pension:

git svn clone --stdlayout --no-metadata -A users.txt svn://hostname/path dest_dir-tmp

Cette commande va créer un nouveau repo git en dest_dir-tmp et commencez à tirer le repo SVN. Notez que le "--stdlayout" drapeau suppose que vous avez la commune "trunk/branches/tags" svn mise en page. Si votre mise en page diffère, de se familiariser avec --tags, --branches, --trunk options (en général, git svn help).

Toutes les communes protocoles sont autorisés : svn://, http://, https://. L'url devrait cibler les dépôts de base, quelque chose comme http://svn.mycompany.com/myrepo/repository. Qui doit pas inclure /trunk, /tag ou /branches.

Si un nom d'utilisateur n'est pas trouvé, la mise à jour de votre users.txt le fichier:

cd dest_dir-tmp
git svn fetch

Vous pourriez avoir à répéter la dernière commande plusieurs fois, si vous avez un projet de grande envergure, jusqu'à ce que l'ensemble de la Subversion s'engage ont été récupérés:

git svn fetch

Une fois rempli, git va checkout SVN trunk dans une nouvelle direction. Toutes les autres branches sont le programme d'installation comme les télécommandes. Vous pouvez afficher les autres branches du SVN avec:

git branch -r

Si vous voulez garder les autres à distance des branches dans votre pension, vous souhaitez créer une branche locale pour chacun manuellement. Si vous ne le faites pas, les branches n'obtiendrez pas cloné dans l'étape finale.

git checkout -b local_branch remote_branch
# it's ok if local_branch and remote_branch are the same name

Les balises sont importés comme des branches. Vous devez créer une branche locale, faire un tag et supprimer la branche de les avoir comme des balises dans git. De le faire avec le tag "v1":

git checkout -b tag_v1 remotes/tags/v1
git checkout master
git tag v1 tag_v1
git branch -D tag_v1

Cloner votre dépôt GIT-SVN repo dans un récipient propre repo git:

git clone dest_dir-tmp dest_dir
rm -rf dest_dir-tmp
cd dest_dir

Les branches locales que vous avez créé plus tôt à partir de branches distantes va seulement ont été copiés à distance des branches dans le nouveau cloné référentiel. Pour chaque branche que vous souhaitez conserver:

git checkout -b local_branch origin/remote_branch

Enfin, la suppression de la distance à partir de votre propre repo git qui pointe vers le maintenant supprimé temp repo:

git remote rm origin

551voto

jfm3 Points 13666

Magie :

Git et SVN fonctionnent très différemment. Vous devez apprendre Git, et si vous souhaitez effectuer le suivi des changements svn en amont, vous devrez apprendre . La page de manuel a une section de bons exemples :

205voto

Eugene Yokota Points 43213

Proprement Migrer Votre Dépôt Subversion dans un Dépôt Git. Vous devez d'abord créer un fichier de cartes de Subversion commettre des noms d'auteur Git commiters, dire ~/authors.txt:

jmaddox = Jon Maddox <jon@gmail.com>
bigpappa = Brian Biggs <bigpappa@gmail.com>

Ensuite, vous pouvez télécharger la Subversion des données dans un dépôt Git:

mkdir repo && cd repo
git svn init http://subversion/repo --no-metadata
git config svn.authorsfile ~/authors.txt
git svn fetch

Si vous êtes sur Mac, vous pouvez obtenir de l' git-svn de MacPorts en installant git-core +svn.

Si votre dépôt subversion est sur la même machine que souhaitée de votre dépôt git, ensuite, vous pouvez utiliser cette syntaxe pour l'init étape, sinon, tout de même:

git svn init file:///home/user/repoName --no-metadata

74voto

J’ai utilisé le script svn2git et fonctionne comme un charme ! https://github.com/nirvdrum/svn2git

61voto

webmat Points 13359

Je suggère d'être à l'aise avec Git avant d'essayer d'utiliser git-svn en permanence, c'est-àdire SVN comme la centralisation des pensions et de l'utilisation de Git en local.

Cependant, pour une simple migration, avec toute l'histoire, voici les quelques étapes simples:

Initialiser le local repo:

mkdir project
cd project
git svn init http://svn.url

Marque combien de temps vous voulez commencer l'importation des révisions:

git svn fetch -r42

(ou tout simplement "git svn fetch" pour tous les tours)

En fait extraire tout depuis:

git svn rebase

Vous pouvez vérifier le résultat de l'importation avec Gitk. Je ne suis pas sûr si cela fonctionne sur Windows, il fonctionne sur OSX et Linux:

gitk

Lorsque vous avez votre repo SVN cloné localement, vous pouvez le pousser à une centralisation de la repo Git pour faciliter la collaboration.

D'abord, créez votre vide à distance repo (peut-être sur GitHub?):

git remote add origin git@github.com:user/project-name.git

Puis, en option synchroniser votre branche principale de sorte que le pull opération va fusionner automatiquement la distance de maître auprès de votre maître, quand les deux contiennent de nouvelles choses:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

Après, vous avez peut-être envie d'essayer mon très propre git_remote_branch outil, qui permet de traiter avec des branches distantes:

Premier post explicatif: "Git remote branches"

Pour le suivi de la version la plus récente: "le Temps de git collaboration avec git_remote_branch"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X