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 -rN
où N
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-svn
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'.
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.
... 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