Подтвердить что ты не робот

Git svn clone: ​​как отложить выборку истории изменений

У меня часто случается, что я хочу работать в репозитории SVN сразу. Но обычный git svn clone [url] также клонирует всю историю. Поэтому я хочу ускорить процесс. Первая часть - извлечь только последнюю ревизию в ваш репозиторий Git. Я делаю это так:

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

(дополнительная информация в статье StackOverflow: "Как git -svn клонировать последние n изменений из svn"

Таким образом, я работаю и могу работать немедленно. Но без местной копии истории.

Вопрос в том, как мне потом получить историю из репозитория svn?

И желательно, это можно сделать в кусках, скажем 1000 ревизий (в обратном порядке). Любая помощь здесь будет принята с благодарностью:)

4b9b3361

Ответ 1

Я узнал, как это можно сделать. Трюк не использовать git svn clone. Вместо этого используйте git svn init и git svn fetch индивидуально. Изменен пример:

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

Ответ 2

Ни один из предложенных ответов не будет работать. git svn fetch с ревизией будет только получать более новые версии, чем то, что уже клонировано. Вы можете использовать git svn reset, чтобы вернуться к старой версии и получить оттуда, но потом вам придется совершить какую-то грязную работу, чтобы "перевести" ваши новые версии обратно на полное дерево (SHA1 SVN ревизия в git зависит от всего содержимого ревизии). Если вам удобно скальпели, git предлагает вам, пойдите для этого.

Намного проще избежать проблемы.

  • Сделайте первоначальный клон последних нескольких изменений, чтобы вы могли немедленно работать,
  • Начать другой клон полной истории в другой каталог / git репозиторий;
  • Работайте в своей частичной истории столько, сколько хотите;
  • Когда полный клон завершается, используйте такой подход, как http://www.sanityinc.com/articles/relocating-git-svn-repositories/, чтобы скопировать вашу работу из частичного репозитория на полный.

Итак, это частичный ответ - как вы можете получить историю? Заберите его в другое репо и скопируйте то, что вам нужно. Можно ли это сделать в кусках 1000 в обратном порядке? С помощью скальпелей и много терпения он мог, но это вряд ли стоило того. Полная пересылка выполняется вперед, чтобы обойти накладные расходы всех тех первых изменений, которые были захвачены каждым блоком git svn fetch, и исправление будет утомительным.

Ответ 3

git svn fetch, похоже, "помнит" изменения, которые он видел ранее. У меня был успех с диапазонами:

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

Я извлек последние изменения, а затем начал "заполнять" пробелы. Кажется, он работает нормально.

Jesper - если ваш репозиторий не имеет ревизии 1000, тогда нет ничего для его получения. Убедитесь, что номера версий, которые вы используете, действительны!