git-svn - извлекает удаленную ветку, которая уже существует в svn, когда мой мастер уже является веткой. Объясните это .git / config - PullRequest
10 голосов
/ 15 февраля 2011

Это немного странный вопрос, учитывая, как команда, к которой я присоединился, использует SVN. По сути, хранилище SVN следует стандартной схеме, но ствол действительно не был затронут в течение 1,5 лет или около того, и работа, как правило, происходит только в филиалах и филиалах филиалов. Таким образом, я использовал git-svn для клонирования из ветви, которая представляет активную ветвь для нашего следующего выпуска, и именно это мастер-треки в моем локальном репозитории git. Давайте назовем эту ветку в svn 'release' с этого момента. Использование git-svn для этой цели - просто чудак.

Теперь, кто-то создал ветку функций из «релиза», которую я собираюсь назвать «функцией», которую я хотел бы перенести в локальную мою ветвь, а также сделать коммит. Конечно, я могу сойти с рук, просто клонировав эту ветвь в другой каталог / git-репозиторий локально, но я бы хотел сделать так, чтобы функция «зеркалировалась» в локальной ветке внутри моего локального git-репозитория, чтобы сделать слияние между двое как можно проще. Я видел другие посты на stackoverflow.com, показывающие, как это работает, при условии, что вы использовали git svn init с --stdlayout, но я не делал этого в моем случае по причинам, указанным выше.

Вот мой .git / config

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[svn-remote "svn"]
    url = https://our.svn.server/svn/root/branches/release
    fetch = :refs/remotes/git-svn

Я предполагаю, что мне нужно в моем [svn-remote] разделе branches = $something, но я не знаю, что это за $ что-то в этом случае, и какое заклинание git checkout и других команд мне нужно после того, как я это сделаю изменить на .git / config.

Есть предложения?


Редактировать - Следующие работы:

Итак, я начал с нуля и выполнил следующую команду клона:

git svn clone <a href="https://my.svn.server/svn/root" rel="noreferrer">https://my.svn.server/svn/root</a> -T branches/branch_I_want_as_master -b branches

Который, примерно через 16 часов, наконец-то снес все, что нужно. Результирующий .git / config выглядит так:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[svn-remote "svn"]
    url = https://my.svn.server/svn/root
    fetch = branches/branch_I_want_as_master:refs/remotes/trunk
    branches = branches/*:refs/remotes/*

Так что я знаю, что это работает - я могу git checkout -b name-of-a-branch name-of-a-branch, и это дает мне удаленную ветку в моем локальном git-репо. Предыдущие ответы не были точными ответами, которые мне нужны, но я проголосовал, так как они были полезны.

На данный момент я приму ответ, который просто объясняет, почему это работает, и, возможно, полезную ссылку, которая разбивает, как правильно делать вещи с .git / config.

Ответы [ 2 ]

5 голосов
/ 20 февраля 2011

Ваша конфигурация репозитория должна выглядеть следующим образом:

[svn-remote "svn"]
url = https://our.svn.server/svn/root
fetch = branches/release:refs/remotes/git-svn
branches = branches/release/feature1:refs/remotes/branches/*
branches = branches/release/feature2:refs/remotes/branches/*

url должна указывать на корень вашего репозитория.fetch указывает на ваш ствол (это может быть любая ветка), и может быть любое количество branches записей, которые указывают на вашу функцию ветвей.должен создать ваш репозиторий git из scatch, но этот конфиг работает.

2 голосов
/ 21 февраля 2011

Вы пробовали просто добавить branches=.. в раздел svn-remote? (при условии url баллов непосредственно в вашей release ветке). Вы получите дополнительную release голову, отслеживающую ветку релиза, но затем вы также отследите все остальные ветки, чтобы вы могли проверить их. В качестве бонуса git svn branch (вероятно) будет работать и для создания новых веток!

В качестве примечания вы могли бы просто использовать --stdlayout для клонирования своего репозитория SVN, а затем настроить мастер на отслеживание release вместо trunk. Это тоже не сложно.

...