Git-svn - import full history
проблема
By default git svn clone imports history only from branch creation onwards, despite the fact, that history for files is present in SVN repository prior branch creation.
Our SVN branch was created by svn copy
, если это имеет значение.
Мои попытки
я пробовал --no-minimize-url
а также --follow-parent
, но безуспешно. Produced Git repository is same as without these params, starting from branch creation.
Желаемый результат
Git repository with full history from SVN repository creation.
Обновить
My actual command line was
git svn clone http://svnserver/repo/dir1/dir2/project
What helped was -T
argument with resulting command:
git svn clone http://svnserver/repo/ -T dir1/dir2/project
2 ответа
По умолчанию git svn clone импортирует историю только после создания ветки, несмотря на то, что история для файлов присутствует в хранилище svn до создания ветки.
Да. это правда. git svn
будет пытаться импортировать ветки как ветки, если так сказано. Из справочной страницы git-svn:
При клонировании SVN-репозитория, если не используется ни один из вариантов описания макета репозитория (--trunk, --tags, --branches, --stdlayout), git svn clone создаст git-репозиторий с полностью линейной историей, где ветви и теги отображаются в виде отдельных каталогов в рабочей копии.
Если вы передадите URL для одной ветви git svn clone
(вместо URL верхнего уровня) вы получите только линейную историю для этой ветви. Это, наверное, то, что вы видите.
Если вам нужна полная история, используйте параметры макета хранилища, упомянутые выше, и передайте URL верхнего уровня. затем git svn
попытается создать ветки git для веток SVN и попытается дать им правильную историю, возвращаясь к их созданию.
Обратите внимание, что это даст вам полный репозиторий со всеми ветками. Если вам нужны только некоторые ветки, вам нужно изменить конфигурацию, как описано на странице руководства:
Также можно извлечь подмножество ветвей или тегов, используя разделенный запятыми список имен в фигурных скобках. Например:
[svn-remote "huge-project"] url = http://server.org/svn fetch = trunk/src:refs/remotes/trunk branches = branches/{red,green}/src:refs/remotes/branches/* tags = tags/{1.0,2.0}/src:refs/remotes/tags/*
Смотрите git-svn (1).
http://git-scm.com/book/en/Git-and-Other-Systems-Migrating-to-Git описывает, как правильно импортировать ветви и теги.