Как git-svn клонировать последние N ревизий из репозитория Subversion?

Как создать неглубокую копию с git-svn из репозитория Subversion, например, как вытащить только последние три версии?

на git clone команда может получить последние N ревизий из репозитория Git, если вы используете опцию --depth, т. е. вы получаете неглубокую копию репозитория. Пример:

git clone --depth 3 git://some/repo myshallowcopyrepo

есть ли аналогичный вариант для git-svn?

мои открытия так далеко!--12-->

до сих пор я только нашел здесь N - это пересмотр тянет. Пример:

git svn clone -rN svn://some/repo

согласно документации есть возможность использовать -r$REVNUMBER:HEAD. Я попробовал следующее, чтобы получить последние 3 версии, которые вернули сообщение об ошибке.

$ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo .
revision argument: HEAD~3:HEAD not understood by git-svn

поэтому я заменил HEAD~3 с фактическим номером третьей, но последней редакции 534. Это сработало, но это требует от меня сначала выяснить номер ревизии третье, но последнее обязательство.

$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .

документация

git-clone

git-svn

3 ответов


вы уже обнаружили самый простой способ указать неглубокий клон в Git-SVN, указав номер версии SVN, который вы хотите запустить свой клон (-r$REV:HEAD).

например: git svn clone -s -r1450:HEAD some/svn/repo

структура данных Git основана на указателях в направленном ациклическом графе (DAG), что делает тривиальным возвращение n commits. Но в SVN (и, следовательно, в Git-SVN) вам придется найти номер редакции самостоятельно.


Я часто использую следующее, чтобы получить ограниченное количество ревизий из нашего огромного дерева subversion (мы скоро достигнем версии svn 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

и хороший способ узнать, где началась ветка, - это сделать svn log это и найти первый на ветке (последний, указанный при выполнении):

svn log --stop-on-copy svn://some/repo/branch/some-branch

до сих пор я не нашел хлопот стоит того, чтобы отслеживать все ветви. Для клонирования требуется слишком много времени, а svn и git не работают вместе так хорошо, как хотелось бы. Я склонен создавать файлы исправлений и применять их на клоне git другой ветви svn.


... 7 лет спустя в пустыне проносится перекати-поле ...

Я не был удовлетворен принятым ответом, поэтому я создал несколько сценариев, чтобы сделать это для вас доступно на Github. Они должны помочь всем, кто хочет использовать git svn clone но не хочет клонировать весь репозиторий и не хочет охотиться за конкретной редакцией для клонирования из середины истории (возможно, вы клонируете кучу репозиториев). Здесь мы можем просто клонировать последний N изменения:

использовать git svn clone клонировать последние 50 изменений

# -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

найти предыдущую редакцию N из РЕПО SVN

# -u    The SVN URL to clone
# -l    The limit of revisions

./svn-lookback.sh -u https://server/project/trunk -l 5