31 votes

Git svn clone: Comment différer la récupération de l'historique des révisions

J'ai souvent le cas que je veux travailler sur un référentiel SVN tout de suite. Mais un simple git svn clone [url] aussi des clones de toute l'histoire. Donc, je veux accélérer les choses. La première partie est de récupérer uniquement la dernière révision dans votre dépôt Git. Je le fais comme ça:

URL=http://google-web-toolkit.googlecode.com/svn/trunk/
REV=`svn info $URL |grep Revision: | awk '{print $2}'`
PROJECT_FOLDER=google-web-toolkit-readonly

git svn clone -r$REV:HEAD $URL $PROJECT_FOLDER

(plus d'infos dans la StackOverflow l'article: "Comment git-svn clone n dernières révisions à partir de svn"

De cette façon, je suis en place et en cours d'exécution et permet de travailler immédiatement. Mais sans copie locale de l'histoire.

La question est, comment puis-je ensuite chercher de l'histoire, depuis le dépôt svn?

Et, de préférence, cela peut-il être fait dans des segments de, disons 1000 révisions (en ordre inverse). Toute aide serait grandement appréciée :)

22voto

Jesper Rønn-Jensen Points 15212

J'ai découvert comment cela peut être fait. L'astuce n'est pas d'utiliser git svn clone . À la place, utilisez git svn init et git svn fetch individuellement. Modification de l'exemple:

 URL=http://google-web-toolkit.googlecode.com/svn/trunk/
REV=`svn info $URL |grep Revision: | awk '{print $2}'`
PROJECT_FOLDER=google-web-toolkit-readonly

mkdir $PROJECT_FOLDER
cd !$ #goes into dir named $PROJECT_FOLDER
git svn init -s $URL #-s implies --stdlayout with /trunk /tags /branches
git svn fetch -r $REV

# hack, hack, hack

# or update history (fetch 50 revisions back each loop
for (( r=$REV; r>0; r-=50 )); 
do 
  git svn fetch -r $r:HEAD
done
 

5voto

Chris Nash Points 1753

Aucune des réponses proposées ne fonctionnera. git svn fetch avec une révision permettra de récupérer uniquement les nouvelles versions de ce qui est déjà cloné. Vous pouvez être en mesure d'utiliser git svn reset pour revenir à une ancienne révision et de récupérer à partir de là, mais vous devrez faire le sale boulot par la suite de "greffe" de votre plus récente des révisions de retour sur la totalité de l'arbre (le SHA1 d'une révision SVN à git dépend de l'ensemble de la filiation, de la révision). Si vous êtes à portée de main avec les scalpels git vous offre, aller pour elle.

Il est beaucoup plus facile d'éviter le problème.

  • Faire un clone initial de la dernière quelques révisions, de sorte que vous pouvez obtenir immédiatement au travail;
  • Démarrer un autre clone de l'histoire complète dans un autre répertoire/dépôt git;
  • Travail dans votre partielle de l'histoire autant que vous le souhaitez;
  • Alors que le clone est terminée, procédez comme http://www.sanityinc.com/articles/relocating-git-svn-repositories/ copier votre travail à partir de la partielle de référentiel pour le plein.

Donc, c'est une réponse partielle - comment pouvez-vous la suite chercher de l'histoire? Chercher dans un autre repo et copier ce que vous avez besoin de plus. Peut-il être fait dans des morceaux de 1000 dans l'ordre inverse? Avec le scalpel, et beaucoup de patience, il pourrait, mais il est peu probable que la peine. Le plein d'extraction en marche avant est d'aller plus vite que la surcharge de toutes ces premières révisions saisi par chaque bloc git svn fetch, et la correction sera fastidieux.

0voto

Rob Crawford Points 9

git svn fetch semble "se souvenir " des révisions vues précédemment. J'ai réussi à faire des gammes:

 git svn fetch -r 0:100
git svn fetch -r 100:200
git svn fetch -r 4500
git svn rebase
git svn fetch -r 200:300
 

J'ai récupéré les révisions les plus récentes, puis j'ai commencé à " combler " les lacunes. Cela semble marcher correctement.

Jesper - si votre dépôt n'a pas de révision 1000, alors il n'y a rien à récupérer. Assurez-vous que les numéros de révision que vous utilisez sont valides!

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