SVN для Git миграции История коммитов Проблема - PullRequest
0 голосов
/ 24 августа 2018

У меня плохо структурированный репозиторий SVN. Позвольте мне попытаться дать вам изображение.

svn-repo
|
|--branches
|     |
|     |-- project1
|     |-- project2
|     |-- tragetProject
|               |
|               |-- targetProject5.0.0
|               |-- targetProject5.0.1
|               |-- targetProject5.0.2
|               |-- ...
|
|--trunk
      |
      |-- project1
      |-- project2
      |-- ...

Проект, который я хочу перенести, это "targetProject". Каждая ветка получена из последней ветки, например. 5.0.1 это ветка от 5.0.0. Таким образом, каждая ветка в SVN имеет историю коммитов своего предка.

Это процесс, который я пытался перенести на git.

git svn init [trargetProject5.0.2 Url]
git svn fetch

Моя проблема в том, что хотя ветка svn имеет всю историю коммитов, после выборки в git local master есть только история коммитов этой ветки, а не ее предков.

Мне нужно получить всю историю. Я попытался изменить URL-адрес ветви git в git config, чтобы получить коммиты для каждой ветви, но это также не удалось, так как «git svn rebase» не работал должным образом. Мне также нужно получить новые коммиты, возможно, новой ветки, созданной в SVN-репо. Кто-нибудь может помочь или предоставить мне новый способ справиться с этим? Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Хорошо, я нашел решение.

Вместо клонирования ствола моего огромного репо я хотел клонировать определенную ветку. Таким образом, использование этой команды делает свое дело.

git svn clone -T branches/tragetProject/tragetProject5.0.2 http://example.com/PROJECT

Это клонирует текущую ветвь, а также ищет у каждого родителя всю историю коммитов.

Поскольку мое репозиторий svn огромно и все ветви связаны друг с другом, этой команде потребовалось бы много времени, чтобы получить нежелательные коммиты из старых веток. Добавляя -r<revision>:HEAD в конце, вы ограничиваете расследование клона определенной ревизией.

Итак, команда становится:

git svn clone -T branches/tragetProject/tragetProject5.0.2 http://example.com/PROJECT -r40000:HEAD

Надеюсь, это поможет кому-то в будущем.

ref https://gist.github.com/trodrigues/1023167#file-gistfile1-txt-L30

0 голосов
/ 25 августа 2018

Чтобы перенести SVN в Git с сохранением всех историй, вы можете использовать команду:

git svn clone <svn-repo URL> --branches=branches --tags=tags --trunk=trunk

Теперь все истории коммитов хранятся в git repo. По умолчанию там есть только локальная ветвь master, но другие ветки можно найти по git branch -r.

И вывод команды git branch -r выглядит как origin/branch1. Тогда вам просто нужно проверить все филиалы локально по git branch -b <local Branch name> <remote branchname>.

Как в примере выше, чтобы оформить локально оформление branch1, вы можете использовать команду git checkout -b branch1 origin/branch1.

...