SVN, чтобы Git Миграция со странным ветвлением - PullRequest
0 голосов
/ 21 марта 2019

Я использую KDE svn-all-fast-export для переноса через уродливое хранилище SVN 22 ГБ в git. Старые сопровождающие сделали очень странное ветвление. Я сталкиваюсь с случаем, когда мне нужно сделать 2 ветки для одного коммита.

Дерево выглядит так

trunk
branch/lots-of_branches
tags/lots_of_tags

Пока все хорошо ...

Теперь кто-то создал новую папку с именем «new», скопировав (svn copy) теги верхнего уровня и папку ветви в «new». Я не уверен, как создать ветку верхнего уровня и папку с тегами, а также создать подпапки.

Мои правила следующие:

match /branch/([^/]+)/
  repository myrepo
  branch legacy/branch/\1
end match

match /tags/([^/]+)/
  repository myrepo
  annotated true
  branch refs/tags/legacy/\1
end match

Это приводит к множеству ветвей, называемых legacy / branch / branch_name, но без legacy / branch для случая, описанного выше. Мои вопросы: есть ли способ создать ветку для каждой ветви, а также иметь другую ветку, которая обновляется каждый раз при изменении папки ветви?

Ответы [ 3 ]

0 голосов
/ 21 марта 2019

В терминах pure git-svn вы можете указать несколько мест, где можно найти теги и ветви.Вы должны установить 2 местоположения для веток (одно в ветви и другое в новой / ветви) и два местоположения для тегов (одно в тегах и другое в новых / тегах).

0 голосов
/ 21 марта 2019

@ thekbb Хорошая идея, но я пытаюсь сохранить историю. Мой последний тест - запустить текущий набор правил, пока он не умрет, затем повторно запустить импортер с другим набором, чтобы сгенерировать ссылки верхнего уровня.

Второй набор правил:

match /branch/
  repository myrepo
  branch legacy/branch
end match

match /tags/
  repository myrepo
  branch legacy/tags
end

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

++++++++++++++++++ Обновить ++++++++++++++++++
Это сработало. Второй проход быстрее первого, поскольку он игнорирует все, кроме коммитов, которые касаются / branch или /tags.

0 голосов
/ 21 марта 2019

Вы можете пройти часть пути с символическим указанием ...

git symbolic-ref refs/heads/legacy-another-foo refs/heads/legacy-foo

Имейте в виду, что если вы оформите ссылку, то git не сообщит о своем символическом имени.поэтому после git checkout legacy-another-foo, git status сообщит, что вы находитесь на legacy-foo

Можете ли вы просто отфильтровать устаревшую папку и не импортировать ее?

Извините, ваши предки были "креативны"

...