Как на 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 .
документация
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