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

Problème

comment créer une copie superficielle avec git-svn à partir d'un dépôt Subversion, par exemple, comment extraire seulement les trois dernières révisions?

la commande git clone peut obtenir les dernières n révisions d'un dépôt Git si vous utilisez l'option --depth , c'est-à-dire que vous obtenez une copie superficielle du dépôt. Exemple:

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

Existe-t-il une option similaire pour git-svn?

mes découvertes jusqu'à présent

Jusqu'à présent, je n'ai trouvé que l'option -rNN est la révision à tirer. Exemple:

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

selon la documentation il y a la possibilité d'utiliser -r$REVNUMBER:HEAD . J'ai essayé ce qui suit pour obtenir les 3 dernières révisions qui ont retourné 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

donc j'ai remplacé HEAD~3 par le nombre réel de la troisième et dernière révision 534. Cela a fonctionné, mais cela exige que je trouve d'abord le numéro de révision de l'avant-dernier engagement.

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

Documentation

git-clone

git-svn

295
demandé sur Lernkurve 2009-04-14 14:58:07

3 réponses

vous avez déjà trouvé le moyen le plus simple de spécifier un clone superficiel dans Git-SVN, en spécifiant le numéro de révision SVN auquel vous voulez lancer votre clone ( -r$REV:HEAD ).

par exemple: git svn clone -s -r1450:HEAD some/svn/repo

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

217
répondu Paul 2017-07-23 17:27:03

je me retrouve souvent à utiliser ce qui suit pour faire sortir un nombre limité de révisions de notre énorme arborescence subversion (nous arrivons bientôt à svn revision 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ù une branche a commencé est de faire un svn log et de trouver le premier sur la branche (le dernier indiqué quand faire):

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

jusqu'à présent, je n'ai pas vraiment trouvé le tracas en vaut la peine en traçant toutes les branches. Il prend trop de temps cloner, svn et git ne marchent pas aussi bien que je le voudrais. J'ai tendance à créer des fichiers patch et à les appliquer sur le clone git d'une autre branche svn.

85
répondu Christian 2010-02-27 19:26:26

... 7 ans plus tard, dans le désert, un tumbleweed coups par ...

Je n'étais pas satisfait de la réponse acceptée, donc j'ai créé des scripts pour le faire pour vous disponible sur Github . Ceux-ci devraient aider toute personne qui veut utiliser git svn clone mais ne veut pas cloner l'ensemble du dépôt et ne veut pas chasser pour une révision spécifique de cloner à partir du milieu de l'histoire (peut-être que vous clonez un tas de les pensions de titres). Ici, nous pouvons simplement cloner les dernières révisions:

utiliser git svn clone pour cloner les 50 dernières révisions

# -u    The SVN URL to clone
# -l    The limit of revisions
# -o    The output directory

./git-svn-cloneback.sh -u https://server/project/trunk -l 50 -o myproj --authors-file=svn-authors.txt

trouver la révision n précédente à partir d'un SVN repo

# -u    The SVN URL to clone
# -l    The limit of revisions

./svn-lookback.sh -u https://server/project/trunk -l 5     
27
répondu jonathan.cone 2016-02-26 20:31:32