322 votes

Comment git-svn cloner les n dernières révisions d'un dépôt Subversion?

Problème

Comment voulez-vous créer une copie avec git-svn partir d'un dépôt Subversion, c'est à dire comment tirez-vous que seules les trois dernières révisions?

L' git clone commande pouvez obtenir le dernier n des révisions à partir d'un dépôt Git si vous utilisez l'option --depth, c'est à dire que vous obtenez une copie du référentiel. Exemple:

git clone --depth 3 git://some/repo myshallowcopyrepo

Est-il une option similaire pour git-svn?

Mes découvertes jusqu'à présent

Jusqu'à présent, j'ai trouvé l'option rN où N est la révision de tirer. Exemple:

git svn clone -rN svn://some/repo

Selon la documentation, il y a la possibilité d'utiliser -r$REVNUMBER:de la TÊTE. J'ai essayé ce qui suit pour obtenir les 3 dernières révisions qui a renvoyé un message d'erreur.

$ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo .
revision argument: HEAD~3:HEAD not understood by git-svn

Je l'ai donc remplacé HEAD~3 avec le nombre réel de la troisième, mais de la dernière révision 534. Qui a travaillé, mais qui m'oblige à d'abord le numéro de révision de la troisième, mais le dernier commit.

$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .

La Documentation

git-clone

git-svn

247voto

Paul Points 12977

Vous avez déjà découvert le moyen le plus simple de spécifier un clone peu profond dans Git-SVN, en spécifiant le numéro de révision SVN sur lequel vous voulez démarrer votre clone ( -r$REV:HEAD ).

La structure de données de Git est basée sur des pointeurs dans un graphe acyclique dirigé (DAG), ce qui rend trivial pour revenir en arrière n commits. Mais dans SVN (et donc dans Git-SVN) vous devrez trouver le numéro de révision vous-même.

94voto

Christian Points 7253

Je trouve moi-même à l'aide de la suite souvent à obtenir un nombre limité de révisions de notre grand subversion de l'arbre (nous allons bientôt atteindre révision svn 35000).

# checkout a specific revision
git svn clone -r N svn://some/repo/branch/some-branch
# enter it and get all commits since revision 'N'
cd some-branch
git svn rebase

Et un bon moyen de savoir où se trouve une succursale de la main est de faire un svn log et de trouver le premier sur la branche (le dernier de la liste lorsque vous faites):

svn log --stop-on-copy svn://some/repo/branch/some-branch

Jusqu'à présent, je n'ai pas vraiment trouvé les tracas de la peine dans le suivi de toutes les branches. Il prend trop de temps à cloner et svn et git ne travaillent pas ensemble aussi bien que je le voudrais. J'ai tendance à créer des fichiers de correctifs et de les appliquer sur le git clone d'une autre branche svn.

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