Как на 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