Используйте зеркало subgit для односторонней синхронизации
У меня есть настройка subgit для зеркалирования одного репозитория сборок svn для git. Я хотел бы только использовать svn->git way. В любом случае, у меня нет прав на фиксацию в svn repo, поэтому subgit приходит с сообщениями об ошибках при попытке синхронизироваться с svn (git->svn). Есть ли способ сделать это?
1 ответ
Невозможно поддерживать передачу некоторых веток Git, не переводя их в SVN, при этом синхронизируя их с ветвями SVN. Таким образом, решение будет работать с одним набором веток Git, в то же время синхронизируя другой набор веток с SVN. Эти синхронизированные ветви должны периодически вручную объединяться с ветвями первого набора. Есть несколько способов сделать это с помощью SubGit.
Подход 1. Используйте отдельное пространство имен. Например, вы можете синхронизировать refs/heads/svn/*
а также refs/tags/svn/*
в SVN при работе с refs/heads/*
, Для этого используйте следующие параметры в файле конфигурации SubGit:
trunk = trunk:refs/heads/svn/master
branches = branches/*:refs/heads/svn/*
tags = tags/*:refs/tags/svn/*
shelves = shelves/*:refs/shelves/svn/*
Поэтому, когда вы клонируете такой репозиторий, SVN trunk
переводится на refs/remotes/origin/svn/master
и вы должны периодически сливать эту ветку вручную, используя git merge
иметь свой местный refs/heads/master
быть более или менее современным с SVN.
Подход 2. Начиная с SubGit 3.0 (или версии 3.0.0-EAP, пока она не будет выпущена), вы можете ограничить все ветви, которые вы синхронизируете с SVN, одной или несколькими ветками (другие варианты веток / тегов / полок удалены):
trunk = trunk:refs/heads/master
branches = branches/branch1:refs/heads/branch1
branches = branches/branch2:refs/heads/branch2
После этого refs/heads/branch1
, refs/heads/branch2
, а также refs/heads/master
будет синхронизирован с SVN, и refs/heads/branch3
не будет
Подход 3. Начиная с SubGit 3.0 (или версии 3.0.0-EAP до ее выпуска), вы можете исключить одну или несколько веток из синхронизации:
trunk = trunk:refs/heads/master
branches = branches/*:refs/heads/*
tags = tags/*:refs/tags/*
shelves = shelves/*:refs/shelves/*
excludeBranches = branches/nosync1
excludeBranches = branches/nosync2
Эта конфигурация синхронизирует все refs/heads/*
Кроме refs/heads/nosync1
а также refs/heads/nosync2
потому что если бы они были синхронизированы, они были бы переведены в branches/nosync1
а также branches/nosync2
которые игнорируются.
На самом деле вы не ограничены этими подходами, но вы можете смешивать их в зависимости от ваших потребностей.