Идеальным решением было бы указание сопоставления trunk:refs/heads/master в конфигурации SubGit., поэтому SubGit будет синхронизировать trunk с master, игнорируя любые другие ветки.
К сожалению, на данный момент SubGit нуждается как минимум в одном сопоставлении веток (версии 1.0.x и 2.0.x). То есть нужно указать что-то вроде этого:
trunk = trunk:refs/heads/master
branches = branches/*:refs/heads/*
shelves = shelves/*:refs/shelves/*
tags = tags/*:refs/tags/*
Поскольку вы не собираетесь синхронизировать все ветки Git, рассмотрите возможность использования специального пространства имен для обхода проблемы:
trunk = trunk:refs/heads/master
branches = branches/*:refs/gitsvn/heads/*
...
Таким образом, если ветку master отправить в центральный репозиторий Git, она будет переведена в trunk. Однако, если кто-то отправляет ветку foo, SubGit игнорирует эту ветку, поскольку refs/heads/foo находится вне области синхронизации.
Проблемы возникают из-за коммитов слияния: если коммит A является результатом слияния ветки foo в master, то SubGit создает branchs/foo на стороне Subversion. для соответствующего родителя коммита A. Если вы предпочитаете не включать ветки, сгенерированные SubGit, в пространство имен *branches/**, рассмотрите возможность использования некоторых специальных ветвей на стороне Subversion:
trunk = trunk:refs/heads/master
branches = gitsvn/branches/*:refs/gitsvn/heads/*
shelves = shelves/*:refs/shelves/*
tags = gitsvn/tags/*:refs/gitsvn/tags/*
В этом случае тот же родитель коммита A должен быть отправлен в ветку gitsvn/branches/foo.
Это лучшее решение, доступное на данный момент. У нас также есть запрос функции для версии 2.1, которая позволила бы вам найти идеальное решение, но это займет некоторое время, прежде чем мы его реализуем.
Обновление SubGit 3.0:
Начиная с версии 3.0.0 (на данный момент стадия раннего доступа, скачать по адресу http://subgit.com/eap) SubGit поддерживает макет с одной веткой, поэтому файл конфигурации может выглядеть следующим образом:
Без ствола, без веток, без тегов и без полок:
[svn]
url = http://host.com/repos/project
В этом случае каталог project сопоставляется напрямую с веткой master в репозитории Git; SubGit игнорирует любые другие ветки и никогда не создает полки, что означает, что анонимные ветки Git не синхронизируются с SVN.
Один багажник, без полок:
[svn]
url = http://host.com/repos/project
trunk = trunk:refs/heads/master
В этом случае каталог project/trunk сопоставляется с веткой master в репозитории Git; SubGit игнорирует любые другие ветки и никогда не создает полки.
Один багажник с полками:
[svn]
url = http://host.com/repos/project
trunk = trunk:refs/heads/master
shelves = shelves/*:refs/shelves/*
В этом случае каталог project/trunk сопоставляется с веткой master в репозитории Git; SubGit игнорирует любые другие ветки, но переводит анонимные ветки на полки, как по умолчанию для версий 1.0.x и 2.0.x.
Надеюсь, это поможет.
person
vadishev
schedule
16.05.2013