Каков наилучший способ клонирования веток после клонирования только ствола в git-svn?
Учитывая большое хранилище Subversion со многими ветками, я хочу начать использоватьgit-svn
клонированиемtrunk
сначала и добавление определенных веток позже. Я видел по крайней мере три способа сделать это, но является ли какой-либо из них "официальным" или есть лучший способ?
Предположим следующий макет:
https://svn-repo.com/svn/company
+--core
| +--trunk
| +--branches
| | +--fastboot
| | +--playground
| +-tags
+--mobile
+--trunk
+--branches
+--tags
Итак, клонировать только ствол (без веток) ревизии 12345 проектаcore
:
$ git svn clone --username=svnuser -r 12345 -Ttrunk https://svn-repo.com/svn/company/core
Это клон проектаcore
в каталог с тем же именем и работаетgit svn rebase
вытянет все изменения (после ревизии 12345). С этой точки зрения.git/config
должно быть что-то вроде этого:
[svn-remote "svn"]
url = https://svn-repo.com/svn/company
fetch = core/trunk:refs/remotes/trunk
Все идет нормально. Теперь, скажем, я хочу добавитьplayground
ветка. Это где это становится немного туманным.
Опция 1: Обновить существующий пульт в.git/config
добавив туда ветку:
[svn-remote "svn"]
url = https://svn-repo.com/svn/company
fetch = core/trunk:refs/remotes/trunk
branches = core/branches/{playground}:refs/remotes/branches/*
На данный момент я смог сделать:
Вытащите в ревизии 23456 веткиplayground
$ git svn fetch -r 23456
Создайте локальную ветку и переключитесь на нее
$ git checkout -b playground branches/playground
Вытащите последние изменения:
$ git svn rebase
Вариант 2: Добавить новый пульт в.git/config
(в дополнение к существующему):
[svn-remote "playground"]
url = https://svn-repo.com/svn/company
fetch = core/branches/playground:refs/remotes/playground
Отсюда шаги похожи наОпция 1:
$ git svn fetch playground -r 23456
$ git checkout -b playground remotes/playground
$ git svn rebase
Вариант 3Я также видел, как кто-то добавляет новую выборку в существующий пульт:
[svn-remote "svn"]
url = https://svn-repo.com/svn/company
fetch = core/trunk:refs/remotes/trunk
fetch = core/branches/playground:refs/remotes/branches/playground
Я не совсем уверен, правильно ли это или даже сработает. Я не могу найти, где я видел это.
В настоящее время я придерживаюсьОпция 1, но мне бы очень хотелось узнать, какой наиболее подходящий способ сделать это.