2009-10-12 7 views
31

J'ai souvent l'impression que je veux travailler immédiatement sur un dépôt SVN. Mais un git svn clone [url] clone aussi l'histoire entière. Donc je veux accélérer les choses. La première partie consiste à récupérer uniquement la dernière révision dans votre dépôt Git. Je le fais comme ceci:Git svn clone: ​​Comment différer l'extraction de l'historique des révisions

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'informations dans l'article StackOverflow:.. "How to git-svn clone last n revisions from svn"

De cette façon, je suis opérationnel et peut travailler immédiatement, mais sans copie locale de l'histoire

la question est, comment puis-je chercher après l'histoire du dépôt svn?

Et de préférence, cela peut être fait en morceaux, disons 1000 révisions (dans l'ordre inverse). Toute aide ici serait grandement appréciée :)

+0

J'ai trouvé la solution suivante utile http://stackoverflow.com/a/2348596/429476 –

Répondre

21

J'ai découvert comment cela peut être fait. L'astuce est de ne pas utiliser git svn clone. Au lieu de cela, 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 /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 
+3

cela ne semble pas fonctionner pour moi, ça revient juste quand j'essaye de faire git svn fetch -r 1000: HEAD – Verhogen

+0

Ce n'est pas pour moi non plus, ainsi que la solution proposée par Rob Crawford ci-dessous. Pour moi, la question initiale reste sans réponse. – sthiers

+2

@verhogen - 'git svn fetch -r 1000: HEAD' signifie" récupérer toutes les révisions commençant à rev 1000 jusqu'à la HEAD actuelle ". Si vous avez, disons, 800 révisions dans votre SVN, cela ne cherchera rien. Si vous aviez des révisions de 50 Ko, cela irait bien au-delà de ce que vous aviez prévu. –

0

git svn fetch semble « rappeler » les révisions qu'il a vu précédemment. J'ai eu le succès avec des gammes qui font:

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'alla chercher les révisions les plus récentes, puis a commencé « remplissage » les lacunes. Cela semble marcher correctement. Jesper - Si votre dépôt 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!

+1

pas sûr de ce que cela accomplit. il réussit, mais un journal git ne vous montrera rien de plus que votre fetch initial et en avant. –

5

Aucune des réponses suggérées ne fonctionnera. git svn fetch avec une révision récupérera seulement les révisions plus récentes que ce qui est déjà cloné. Vous pourrez peut-être 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 nouvelles révisions sur l'arbre complet (le SHA1 d'une révision SVN dans git dépend de toute la parenté de la révision). Si vous êtes à portée de main avec les scalpels 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 répertoire/référentiel git; Travaillez dans votre histoire partielle autant que vous le voulez;
  • Lorsque le clonage complet est terminé, utilisez une approche similaire à http://www.sanityinc.com/articles/relocating-git-svn-repositories/ pour copier votre travail du référentiel partiel vers le plein. Donc, c'est une réponse partielle - comment pouvez-vous récupérer l'histoire par la suite? Allez le chercher dans un autre dépôt et copiez ce dont vous avez besoin. Peut-il être fait en morceaux de 1000 dans l'ordre inverse? Avec les scalpels, et beaucoup de patience, il pourrait, mais cela ne vaut pas la peine.Le fetch complet en cours va dépasser les frais généraux de toutes les premières révisions saisies par chaque bloc git svn fetch, et le correctif deviendra fastidieux.

  • Questions connexes