git-svn: Перенос репозитория SVN с ветвями на разных иерархических уровнях

Я переношу много репозиториев 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/

Как вы можете видеть, у нас есть ветви не только на верхнем уровне / ветвей / (например, 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 :

fatal: 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: команда возвратила ошибку: 128

Я вижу, что я могу создать ветку lvl2 / lvl3 / lvl3branch1, потому что Git рассматривает lvl2 / lvl3 - ветвь, что неверно. Вероятно, строка ниже в .git / config вызывает проблему:

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

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

Всего 1 ответ


Я нашел решение, мы можем использовать подстановочные знаки (*) также для фильтрации имен каталогов. Вот .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/*

Есть идеи?

10000