Il existe un moyen de synchroniser les dépôts Git et Subversion?

Je veux accéder à un référentiel en utilisant les clients Git et SVN. Une façon dont j'imaginais le faire est de migrer automatiquement dans les deux sens: lorsqu'un utilisateur pousse dans le référentiel GIT, il est également engagé dans le référentiel SVN et vice-versa.

Il y a un outil qui m'aiderait à le faire?

29
demandé sur Jader Dias 2009-05-26 00:11:06

7 réponses

La meilleure façon de le faire est d'utiliser git svn comme un client Subversion. Cela permet une intégration bidirectionnelle entre un dépôt Subversion et un dépôt Git. Une fois que vous avez un dépôt Git, vous pouvez le pousser n'importe où ailleurs pour le publier.

Je le fais régulièrement, au travail il y a un dépôt Subversion qui est le dépôt "maître", et j'utilise habituellement git svn pour y accéder. Parfois, si je fais des choses qui ont besoin de fonctionnalités Subversion plus spécifiques comme la fusion, j'utiliserai le normal svn client contre le référentiel à la place.

20
répondu Greg Hewgill 2009-05-25 20:15:42

Il y a une nouvelle solution qui exécute exactement ce que vous voulez - - - SubGit . C'est concurrent-safe (Je ne peux pas en dire autant des scripts bash basés sur git-svn).

13
répondu Dmitry Pavlenko 2012-05-12 15:38:19

Notre équipe a eu exactement le même problème et après un peu d'expérimentation, nous avons réussi à trouver un pont Git-Subversion qui synchronise les changements entre notre dépôt git team et le dépôt Subversion corporate. Notre utilisation de Git est transparente pour les autres utilisateurs de Subversion.

La configuration est décrite plus en détail à https://github.com/mrts/git-svn-bridge .

Nous utilisons cette configuration en production depuis plus d'un an.

Je suppose que la plus grande mise en garde de la configuration est que le dépôt Git ne suit que le tronc SVN (ou une autre branche unique), ainsi les autres branches git seront écrasées en un commit lors de la fusion dans le tronc. Pour nous, ce n'est pas un problème - nous utilisons des branches de tâches de courte durée et les considérons comme des "unités de travail" légères et éphémères qui peuvent aller à mainline en un seul morceau-et l'historique des branches est conservé dans git.

10
répondu mrts 2012-08-28 08:30:55

, Vous pourriez envisager d'svn2git importer facilement svn à git, et puis son miroir application ruby git2svn.
Plus de détails dans cette question.
Comme mentionné dans les autres réponses, 'git svn 'est obligatoire, mais ces modules ruby vous aident à respecter les" branches/répertoires subversion " tout en ne les ayant pas comme répertoire réel dans Git.

5
répondu VonC 2017-05-23 12:17:41

Vous pouvez également consulter cette solution: http://unethicalblogger.com/posts/2008/10/git_back_subversion_mostly_automagically_part_33 , qui a été utilisé pour synchroniser un repo entre Git et subversion, avec plusieurs développeurs utilisant à la fois git et subversion, et un proxy entre eux pour faire la synchronisation.

4
répondu iconoclast 2010-07-03 03:31:08

J'ai un repos central bare-Git + SVN-Git bridge - un repos avec git svn, suivi SVN dans la branche 'current' et suivi du référentiel GIT dans la branche 'gitcentral'

Ensuite, j'utilise le crochet post-update dans les repos git centraux comme ça:

#!/bin/bash

# Anything inserted into GIT - move it back to SVN

echo
echo '* Pushing data into SVN branch'
cd /home/git/BRIDGE
unset GIT_DIR

# current - svn branch locally and central git branch on project.git repos
# centralgit - unmodified centralgit branch
git fetch /home/git/repositories/project.git/ master:centralgit || (echo "Error while pulling data into bridge repository"; exit 1)
git checkout -b temp centralgit || exit 2
git rebase current || exit 3
git checkout current || exit 4
git reset --hard temp || exit 5
git svn dcommit || exit 6
git branch -D temp || exit 7

echo '* Pushed correctly data into SVN'
exit 0

C'est surtout temporel, mais ça marche...

3
répondu bla 2011-07-03 23:36:01

Un moyen plus facile de le faire serait sûrement d'avoir le dépôt principal en tant que Subversion, mais d'utiliser git-svn localement?

1
répondu Daniel Roseman 2009-05-25 20:16:03