SubGit: как исключить ветки?
Я тестирую SubGit как способ перехода с SVN на Git.
То, что я хотел бы сделать, это иметь возможность создавать удаленные ветви в репозитории git, которые могут использовать все пользователи, которые не синхронизируются с SVN.
Я только хочу, чтобы SubGit отслеживал основную ветку и синхронизировал ее с SVN, чтобы у нас была свобода использовать и делиться другими ветками Git.
Есть ли простой способ сделать это?
Спасибо
1 ответ
Идеальным решением было бы указание транка:refs/head /master в конфигурации SubGit, поэтому SubGit синхронизировал бы транк с 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 создает ветки / foo на стороне Subversion для соответствующего родителя коммита A. Если вы предпочитаете не включать сгенерированные SubGit ветки в * ветки /** пространство имен, рассмотрите возможность использования некоторых специальных веток на стороне Subversion:
trunk = trunk:refs/heads/master
branches = gitsvn/branches/*:refs/gitsvn/heads/*
shelves = shelves/*:refs/shelves/*
tags = gitsvn/tags/*:refs/gitsvn/tags/*
В этом случае один и тот же родитель коммита A должен быть отправлен в gitsvn/branch / foo branch.
Это лучшее решение, доступное на данный момент. У нас также есть запрос функции для версии 2.1, который обеспечит идеальное решение для вас, но для его реализации потребуется некоторое время.
Обновление SubGit 3.0:
Начиная с версии 3.0.0 (на данный момент ранняя стадия доступа, загрузка по адресу http://subgit.com/eap) SubGit поддерживает макет одной ветви, поэтому файл конфигурации может выглядеть следующим образом:
Ни багажника, ни веток, ни бирок, ни полок:
[svn] url = http://host.com/repos/project
В этом случае каталог проекта отображается непосредственно в главную ветку в репозитории Git; SubGit игнорирует любые другие ветви и никогда не создает полки, что означает, что анонимные ветви Git не синхронизируются с SVN.
Одиночный багажник, полок нет:
[svn] url = http://host.com/repos/project trunk = trunk:refs/heads/master
В этом случае каталог проекта /trunk сопоставляется с главной веткой в репозитории Git; SubGit игнорирует любые другие ветви и никогда не создает полки.
Одиночный сундук с полками:
[svn] url = http://host.com/repos/project trunk = trunk:refs/heads/master shelves = shelves/*:refs/shelves/*
В этом случае каталог проекта /trunk сопоставляется с главной веткой в репозитории Git; SubGit игнорирует любые другие ветви, но переводит анонимные ветви в полки, как по умолчанию для версий 1.0.x и 2.0.x.
Надеюсь, это поможет.