Git svn clone: ​​Comment reporter l'extraction de l'historique des révisions

J'ai souvent le cas que je veux travailler sur un repository SVN tout de suite. Mais un git svn clone [url] ordinaire git svn clone [url] clone aussi toute l'histoire. Donc je veux accélérer les choses. La première partie consiste à récupérer uniquement la dernière révision dans votre repository 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 l'article StackOverflow: "Comment git-svn clone n dernières révisions de svn"

De cette façon, je suis opérationnel et je peux travailler immédiatement. Mais sans copy locale de l'histoire.

La question est, comment puis-je récupérer l'histoire à partir du repository svn?

Et de preference, cela peut-il être fait en morceaux de, disons 1000 révisions (dans l'ordre inverse). Toute aide est grandement appréciée ici đŸ™‚

Solutions Collecting From Web of "Git svn clone: ​​Comment reporter l'extraction de l'historique des révisions"

J'ai découvert comment cela peut être fait. L'astuce consiste à ne pas utiliser git svn clone . A la place, utilisez git svn init et git svn fetch individuellement. Modifié 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 /twigs 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 

Aucune des réponses suggérées ne fonctionnera. git svn fetch avec une révision n'obtiendra des révisions plus récentes que ce qui est déjà cloné. Vous pouvez utiliser git svn reset pour revenir à une révision plus ancienne et récupérer à partir de là, mais vous devrez ensuite faire un sale boulot pour "greffer" vos révisions plus récentes sur l'tree complet (le SHA1 d'un SVN révision dans git dépend de la parenté entière de la révision). Si vous êtes à l'aise avec les scalpels que git vous propose, allez-y.

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

  • Faites un clone initial des dernières révisions afin de pouvoir travailler immédiatement;
  • Démarrez un autre clone de l'historique complet dans un autre directory / référentiel git;
  • Travaillez dans votre histoire partielle autant que vous le voulez;
  • Lorsque le clone complet est terminé, utilisez une approche telle que http://www.sanityinc.com/articles/relocating-git-svn-repositories/ pour copyr votre travail du référentiel partiel vers le référentiel complet.

Donc, c'est une réponse partielle – comment pouvez-vous ensuite aller chercher l'histoire? Allez le chercher dans un autre repository et copyz ce dont vous avez besoin. Peut-il être fait en morceaux de 1000 dans l'ordre inverse? Avec les scalpels, et beaucoup de patience, ça pourrait , mais ça ne vaut pas la peine. Le fetch complet en cours va dépasser le time de toutes les premières révisions saisies par chaque bloc que vous git svn fetch , et le correctif sera fastidieux.

git svn fetch semble "se souvenir " des révisions que l'on a vues précédemment. J'ai eu du succès en faisant 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 et j'ai commencé à « combler » les lacunes. Cela semble marcher correctement.

Jesper – si votre référentiel n'a pas de révision 1000, il n'y a rien à chercher. Assurez-vous que les numéros de révision que vous utilisez sont valides!