157 votes

Est-il possible d’avoir un dépôt subversion comme un sous-module git ?

Est-il possible d’ajouter un dépôt subversion comme un sous-module git dans mon dépôt git ?

Quelque chose comme : git-svn sous-module ajouter https://svn.foo.com/svn/proj--stdlayout svn-projet

https://svn.foo.com/svn/proj pointe vers un dépôt subversion.

Je sais il n’y a git-svn qui permet d’interagir avec un dépôt subversion. Donc je pense, peut-être il y a un moyen à la Caisse un dépôt subversion avec git-svn et utilisez-la comme un sous-module.

129voto

richq Points 29694

Pas de. Votre meilleur pari serait de créer un miroir du dépôt svn dans un dépôt git.

git svn clone -s http://subversion.example.com/ myclone
cd myclone
git remote add origin git@example.com:project.git
git push origin master

Vous pouvez ensuite ajouter le dépôt git comme un sous-module dans le 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 y a une différence conceptuelle entre la propriété svn:externals et git sous-module qui peut vous passionner si vous vous approchez de ce à partir d'une subversion point de vue. Le git sous-module est rattachée à la révision que vous lui donnez. Si "en amont" des changements, vous devez mettre à jour votre sous-module de référence.

Donc, quand on se resynchroniser avec l'amont de la subversion:

cd /path/to/myclone
git svn rebase
git push

... le projet git utilisera toujours l'original de la révision que nous avons commis plus tôt. Pour mettre à jour le svn de la TÊTE, vous auriez à utiliser

cd /path/to/gitproject/svn-project
git checkout master
git pull
cd ..
git add svn-project
git commit -m"Update submodule"

8voto

sherbang Points 2675

Je suis juste allé à travers cela. Je suis en train de faire quelque chose de similaire à rq, mais légèrement différente. J'ai d'installation de l'un de mes serveurs pour héberger ces git clones de la svn repos dont j'ai besoin. Dans mon cas, je veux seulement en lecture seule versions, et ont besoin d'un nu repo sur le serveur.

Sur le serveur j'ai exécuter:

GIT_DIR=<projectname>.git git init
cd <projectname>.git/
GIT_DIR=. git svn init svn://example.com/trunk
GIT_DIR=. git svn fetch
git gc

C'est ma nu repo, alors j'ai un script cron pour mettre à jour:

#!/usr/bin/python

import os, glob

GIT_HOME='/var/www/git'

os.chdir(GIT_HOME)
os.environ['GIT_DIR']='.'
gits = glob.glob('*.git')
for git in gits:
  if not os.path.isdir(git):
    continue
  os.chdir(os.path.join(GIT_HOME, git))
  if not os.path.isdir('svn/git-svn'):
    #Not a git-svn repo
    continue

  #Pull in svn updates
  os.system('git svn fetch && git gc --quiet')
  #fix-svn-refs.sh makes all the svn branches/tags pullable
  os.system('fix-svn-refs.sh')
  #Update the master branch
  os.system('git fetch . +svn/git-svn:master && git gc --quiet')`

Cela nécessite aussi fix-svn-refs.sh à partir de http://www.shatow.net/fix-svn-refs.sh Cela a été principalement inspiré par: http://gsocblog.jsharpe.net/archives/12

Je ne suis pas sûr pourquoi l' git gc est nécessaire ici, mais je n'étais pas capable de faire un git pull sans elle.

Alors, après tout cela, vous pouvez utiliser git sous-module suivant rq ses instructions.

6voto

vadishev Points 1840

Actuellement git-svn ne prend pas en charge la propriété svn:externals. Mais il y a deux autres outils qui peuvent vous aider à:

  1. SubGit

    SubGit est solution côté serveur, il permet Git accès au dépôt Subversion, et vice versa. Donc, si vous avez un accès local à la Subversion de la disposition par https://svn.foo.com/svn/projvous pouvez installer SubGit. Vous pouvez vous référer à la documenation pour plus de détails, mais en général c'est assez facile à utiliser SubGit:

    $ subgit configure $SVN_REPOS
    

    Par défaut, configurer commande définit le dépôt Git de chemin de $SVN_REPOS/.git, mais vous pouvez ajuster $SVN_REPOS/conf/subgit.conf le fichier pour modifier ce chemin d'accès, ajouter plus de dépôts Git pour chaque projet dans le repository Subversion, filtre branches, tags, etc. Vous pouvez également ajuster $SVN_REPOS/conf/authors.txt à la carte svn, les noms d'auteur git identités.

    $ subgit install $SVN_REPOS
    $ ... let initial translation complete ... 
    $ TRANSLATION SUCCESSFUL
    

    En ce moment, vous avez le référentiel Subversion et de ses Git homologue qui sont synchronisé en permanence, c'est à dire SubGit traduit immédiatement révision svn vers git commit sur chaque svn commit et git commit en révision svn sur chaque git push.

    Tout ce que vous avez besoin est de rendre le dépôt Git de la disposition des participants. Jetez un oeil à git-http-backend . Ensuite, vous pouvez ajouter créé dépôt Git comme d'habitude sous-module. Donc, il n'est pas nécessaire d'utiliser tous les outils externes comme git-svn ou autre.

    SubGit est closed-source logiciel, mais il est gratuit pour les projets open-source.

  2. SmartGit

    SmartGit remplace git-svn sur le côté client. Plus d'informations sur ses fonctionnalités que vous pouvez trouver ici.

    En particulier SmartGit prend en charge à la fois submodules et svn:externals, vous pouvez les mélanger dans votre référentiel.

    SmartGit est un logiciel propriétaire, mais il est gratuit pour les non-utilisation commerciale.

4voto

pcuenca Points 41

En plus de ce que rq dit, une autre méthode est d'utiliser le tiers "externes" (projet http://nopugs.com/ext-tutorial), qui imite la façon dont svn références externes de travail. Avec des externes, vous pouvez suivre ces git ou svn dépôts, et il semble plus facile de pousser vos modifications en amont de ces titres. Cependant, elle nécessite des membres du projet de télécharger et d'installer le paquet séparé.

Je n'ai pas utilisé submodules ou externes; cependant, j'ai passé quelques heures à lire sur toutes les solutions de rechange et il ressemble externes vont être un meilleur ajustement pour mes besoins. Il est une excellente discussion sur ces 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 vivement.

0voto

Otto Points 5166

Piston est être réécrit pour prendre en charge et l’inverse, ainsi que l’URL de Subversion existant en Subvresion repoistory et git + git.

Découvrez le dépôt Github de piston.

Malheureusement, il ne semble pas avoir été libéré.

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