Как добавить ветки в .git / config? - PullRequest
3 голосов
/ 01 марта 2012

ПРИМЕЧАНИЕ. Этот вопрос основан на ветвлении git-svn и НЕ дубликате!

Не делая ничего необычного, когда я проверил наше svn-repo, я получил следующий файл .git / config :

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    autocrlf = false
[svn-remote "svn"]
    url = svn+ssh://my_server/opt/subversion/main/trunk
    fetch = :refs/remotes/git-svn
[color]
    ui = true

Когда я пытаюсь использовать git svn branch Я получаю сообщение:

Unknown branch destination

Причина этого в том, что в .git / config отсутствуют ветви.Я хочу, чтобы ветви пошли в каталог, параллельный транку.Так, например, по этому пути должна быть найдена ветка с именем foo :

svn+ssh://my_server/opt/subversion/main/branches/foo

Если я работаю в отдельной ветке, созданной внутри git с git checkout -b foo, я хочу создать ветку в subversion с помощью:

git svn branch foo

Как мне обновить .git / config , чтобы это работало?Я бы ожидал сообщение, подобное следующему: git svn branch foo :

Copying svn+ssh://my_server/opt/subversion/main/trunk at r8507 to svn+ssh://my_server/opt/subversion/main/branches/foo...

Редактировать: Что если я обновлю раздел svn-remote на:

[svn-remote "svn"]
    url = svn+ssh://my_server/opt/subversion/main
    fetch = trunk:refs/remotes/git-svn
    branches = branches/*:refs/remotes/branches/*

Похоже, что это правильно и, кажется, работает, когда я пытался сделать git svn rebase и git svn branch .Это рабочее решение, или я буду иметь кучу беспорядка, если буду работать с этим новым config какое-то время?

1 Ответ

3 голосов
/ 01 марта 2012

У вас есть проблема, потому что ваш svn-remote.svn.url не является корнем хранилища и для получения нескольких веток он должен быть. Вы можете просто изменить его и запустить fetch, но я не уверен, что git-svn может использовать данные, которые у него уже есть, в таком случае. В любом случае это не будет хуже, чем повторное клонирование.

Ваш конфиг должен выглядеть так. При клонировании вы получаете это, используя опцию -t trunk.

[svn-remote "svn"]
    url = svn+ssh://my_server/opt/subversion/main
    fetch = trunk:refs/remotes/trunk

По умолчанию транк будет передаваться напрямую на пульты, но вы можете вставить какое-то имя между ними, что будет лучше, если у вас есть и другие пульты. У меня обычно есть refs/remotes/svn/trunk.

Если вы предоставили опцию -b, у вас также будет

    branches = branches/*:refs/remotes/branches/*

но если вы этого не сделали, вы можете добавить его вручную в любое время. Это то, что вам нужно, чтобы иметь возможность импортировать ветки и создавать ветки.

Последняя опция -T добавит

    tags = tags/*:refs/remotes/tags/*

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

Для удобства -s опция клонирования является сокращением для -t trunk -b branches -T tags.

...