Вопрос по svn, git, git-svn – Добавьте ветку git после начальной загрузки в тот же svn-remote

16

Я использую git-svn для работы с репозиторием SVN. Я не хочу всего репо, так как в нем много наследства с бинарными файлами. Я отслеживаю только некоторые каталоги.

Вот мой ток.git/config, который работает нормально.

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[svn-remote "svn"]
    url = https://svn.example.com/repository
    fetch = trunk/Python:refs/remotes/trunk
    branches = branches/{stage,prod,stage_with_proxy}/ucapi/:refs/remotes/*
    branches = branches/{active}/Python/:refs/remotes/*

Теперь я хочу добавить новую ветку:

    branches = branches/{fuze_node}/:refs/remotes/*

но когда делаешьgit svn fetch новая ветка не видна git. Это действует так, как будто строки нет в конфиге.

Я знаю, что это можно сделать с новым svn-remote, но я бы предпочел не идти по этому пути.

Вы пробовалиgit svn fetch --allилиgit svn fetch --all -r 10000:HEAD? (послеstackoverflow.com/a/9240692/6309). Или другойgit-svn clone --fetch-all чтобы увидеть, получит ли этот другой клонвсе ветви? VonC
Я пыталсяfetch --all, Не пробовалclone, так как это займет около 2 дней (много истории, svn-сервер на другой стороне планеты) и не хочет делатьclone каждый раз мне нужно добавить ветку. Emil Ivanov

Ваш Ответ

1   ответ
20

последняя извлеченная ревизия в.git/svn/.metadata файл. Он никогда не выбирает ревизии меньше этого значения. Вот почему он не получает ветку, которую вы добавили в config; мерзавец думаетfuze_node ветка уже преобразована.

Однако вы можете получить эту ветку без повторного клонирования всего хранилища:

Добавьте другой svn-remote со всеми ветками, которые вам нужно получить;Удалить старый svn-пульт;Бегатьgit svn fetch -R newer-svn-remote получить ревизии из добавленной ветки.

Ваш конфиг должен выглядеть так:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
# [svn-remote "svn"]
#    url = https://svn.example.com/repository
#    fetch = trunk/Python:refs/remotes/trunk
#    branches = branches/{stage,prod,stage_with_proxy}/ucapi/:refs/remotes/*
#    branches = branches/{active}/Python/:refs/remotes/*
[svn-remote "newer-svn-remote"]
    url = https://svn.example.com/repository
    fetch = trunk/Python:refs/remotes/trunk
    branches = branches/{stage,prod,stage_with_proxy}/ucapi/:refs/remotes/*
    branches = branches/{active}/Python/:refs/remotes/*
    branches = branches/{fuze_node}/:refs/remotes/*

Обратите внимание, что вы должны указать точно такое же отображение веток, как и в старом svn-remote:

    branches = branches/{stage,prod,stage_with_proxy}/ucapi/:refs/remotes/*

Это,ссылки / пультов ДУ / * все еще должен быть на правой стороне сопоставлений. В противном случае git-svn не сможет обнаружить уже преобразованные коммиты и попытается получить их еще раз.

На самом деле есть еще один способ добиться того же. Это включает в себя некоторые манипуляции с внутренними файлами git-svn.

Вы можете просто добавить нужную ветку в.git/config и обновить.git/svn/.metadata файл, так чтопоследняя извлеченная ревизия становится 0:

[svn-remote "svn"]
    reposRoot = https://svn.example.com/repository
    uuid = 8a6ef855-a4ab-4527-adea-27b4edd9acb6
    branches-maxRev = 0
    tags-maxRev = 0

После тогоgit svn fetch будет получать только необходимые ревизии.

для первого подхода, почему бы просто не переименовать svn-remote, добавить новые ветви и извлечь? Nick X
Один из лучших ответов, которые я когда-либо видел здесь. Спасибо вадышев Shaun F

Похожие вопросы