Как на Git с SVN клон последней ревизии из репозитория Subversion?


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

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

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

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

мои открытия так далеко

пока я нашел только здесь 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 295

3 ответа:

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

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

структура данных Git основана на указателях в направленном ациклическом графе (DAG), что делает его тривиальным для возврата n совершает. Но в 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