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 описывает, как правильно импортировать ветви и теги.

Другие вопросы по тегам