git-svn: миграция репозитория SVN с ветвями на разных уровнях иерархии - PullRequest
0 голосов
/ 01 октября 2018

Я перенес много Git-репозиториев в своей компании, и все было хорошо, пока я не столкнулся с репозиторием с очень специфическим макетом для филиалов:

/trunk/
/branches/
/branches/lvl1branch1
/branches/lvl1branch2
/branches/lvl1branch3
/branches/lvl2/lvl2branch1
/branches/lvl2/lvl2branch2
/branches/lvl2/lvl2branch
/branches/lvl2/lvl3/lvl3branch1
/branches/lvl2/lvl3/lvl3branch2
/branches/lvl2/lvl3/lvl3branch3
/tags/

Как видите, у нас нет филиаловтолько на верхнем уровне / branch / (например, lvl1branch1 ), но только на двух других уровнях (например, lvl2 / lvl2branch1 и lvl2 / lvl3/lvl3branch3).

Это мой .git / config :

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
[svn-remote "svn"]
    url = https://myrepourl/
    fetch = test/trunk:refs/remotes/origin/trunk
    branches = test/branches/*:refs/remotes/origin/*
    branches = test/branches/lvl2/*:refs/remotes/origin/lvl2/*
    branches = test/branches/lvl2/*/*:refs/remotes/origin/lvl2/*/*

И я получаю эту ошибку при попытке запустить git svn fetch команда:

неустранимо: update_ref не удалось для ref 'refs / remotes / origin / lvl2 / lvl3 / lvl3branch1': невозможно заблокировать ref 'refs / remotes / origin / lvl2 / lvl3/ lvl3branch1 ':' refs / remotes / origin / lvl2 / lvl3 'существует;Невозможно создать 'refs / remotes / origin / lvl2 / lvl3 / lvl3branch1' update-ref -m r1638 refs / remotes / origin / lvl2 / lvl3 / lvl3branch1 e421f7d976832aa2efe84da02378e7f89eb55c26: 10 * ** 1025 может возвращаться ошибка: 128видите, я могу создать ветку lvl2 / lvl3 / lvl3branch1 , потому что Git рассматривает lvl2 / lvl3 - ветвь, что не соответствует действительности.Возможно, следующая строка в .git / config вызывает проблему:

branches = test/branches/RT-Delivery/*:refs/remotes/origin/lvl2/*

Как я могу сказать Git, чтобы он не читал lvl2 / lvl3 как ветку?Полагаю, я столкнусь с той же проблемой с lvl2 , который не является веткой.Есть ли способ добавить исключения?

1 Ответ

0 голосов
/ 02 октября 2018

Я нашел решение, мы можем использовать подстановочные знаки (*) также для фильтрации имен каталогов.Вот .git / config :

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
[svn-remote "svn"]
    url = https://svn.it.volvo.net/svn/rtdms_tools/
    fetch = test/trunk:refs/remotes/origin/trunk
    branches = test/branches/lvl1*:refs/remotes/origin/*
    branches = test/branches/lvl2/lvl2*:refs/remotes/origin/lvl2/*
    branches = test/branches/lvl2/lvl3/*:refs/remotes/origin/lvl2/lvl3/*

Например, чтобы убедиться, что мы получим ветви только на первом уровне (те, которые начинаются с "lvl1")вместо

branches = test/branches/*:refs/remotes/origin/*

мы можем использовать

branches = test/branches/lvl1*:refs/remotes/origin/*
...