鉴于有许多分支的大型 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:我还看到有人在现有遥控器中添加了新的 fetch:
[svn-remote "svn"]
url = https://svn-repo.com/svn/company
fetch = core/trunk:refs/remotes/trunk
fetch = core/branches/playground:refs/remotes/branches/playground
我不完全确定这是否正确,或者它是否会起作用。我找不到我在哪里看到的。
目前,我坚持使用Option 1,但我真的很想知道最合适的方法。