проблема
Как создать мелкую копию с помощью git-svn из хранилища Subversion, например, как вы извлекаете только последние три ревизии?
Команда git clone
может получить последние n ревизий из репозитория Git, если вы используете эту опцию --depth
, т.е. вы получаете поверхностную копию репозитория. Пример:
git clone --depth 3 git://some/repo myshallowcopyrepo
Есть ли подобная опция для git-svn?
Мои открытия до сих пор
До сих пор я только нашел -rN
вариант, где 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 .
Документация
-s is for --stdlayout which presumes the svn recommended layout for tags, trunk, and branches.
(но у меня не получилось)--depth
дляgit svn
, так как поддержка уже есть. И он уже должен узнать последнюю версию с сервера?Ответы:
Вы уже обнаружили самый простой способ указать мелкий клон в Git-SVN, указав номер ревизии SVN, с которого вы хотите начать свой клон с (
-r$REV:HEAD
).Например:
git svn clone -s -r1450:HEAD some/svn/repo
Структура данных Git основана на указателях в ориентированном ациклическом графе (DAG), что упрощает возврат к
n
коммитам. Но в SVN (и, следовательно, в Git-SVN) вам придется найти номер ревизии самостоятельно.источник
git-svn
удаленный указатель на то же место и используя,git-svn fetch
чтобы получить больше дерева. В этот момент вы должны использовать,git filter-branch
чтобы перевести старое (частичное) дерево в правую ветвь.n
Я часто использую следующее, чтобы получить ограниченное количество ревизий из нашего огромного дерева подрывной деятельности (скоро мы достигнем svn revision 35000).
И хороший способ узнать, с чего началась ветка, - это сделать
svn log
ее и найти первую на ветке (последняя, указанная при выполнении):До сих пор я не нашел трудностей в отслеживании всех ветвей. Требуется слишком много времени, чтобы клонировать, а svn и git работают не так хорошо, как хотелось бы. Я склонен создавать файлы патчей и применять их к клону git другой ветки svn.
источник
cherry-pick
/rebase
между ними. Коммит делает дополнительный шаг (push
затемdcommit
из удаленного репо), но я думаю, что это стоит компромисса.... 7 лет спустя, в пустыне, дует рукава ...
Я не был удовлетворен принятым ответом, поэтому я создал несколько сценариев, чтобы сделать это для вас доступным на Github . Это должно помочь всем, кто хочет использовать,
git svn clone
но не хочет клонировать весь репозиторий и не хочет искать конкретную ревизию для клонирования в середине истории (возможно, вы клонируете кучу репозиториев). Здесь мы можем просто клонировать последние N ревизий:Используйте
git svn clone
для клонирования последних 50 ревизийНайти предыдущую версию N из репозитория SVN
источник