Используйте зеркало 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 которые игнорируются.

На самом деле вы не ограничены этими подходами, но вы можете смешивать их в зависимости от ваших потребностей.

Другие вопросы по тегам