我想将现有的 SVN 存储库转换为非标准布局,如下所示:
/ (root)
/trunk
regular trunk stuff that I would like to make the "master" branch
/folder1
files that I would like to make a separate branch "folder1"
/folder2
files that I would like to make a separate branch "folder2"
/folder3
files that I would like to make a separate branch "folder3"
... 到 git 存储库,保留历史记录。
要注意的是 folder1
、folder2
和 folder3
没有从 trunk
中的某个点分支出来;它们是一组单独的文件,并且它们不在某个方便的子目录中(这就是这个问题与 that one 不同的原因)。
所需的 git 分支布局如下所示:
master -----+------(trunk r1)------(trunk r2)----...
|
folder1 \-----(folder1 r1)----(folder1 r2)---...
|
folder2 \-----(folder2 r1)----(folder2 r2)---...
|
folder3 \-----(folder3 r1)----(folder3 r2)---...
(这些修订号不是实际的 svn 修订号,只是该特定文件夹中的提交号)
我试过使用 git svn
但它似乎希望分支位于一个目录中,每个分支包含一个子文件夹。问题是,如果我这样做,我将不得不使用 /
(根目录)作为分支目录,这将使 trunk
成为一个单独的分支(虽然我想将其用作 master
分支)。
最佳答案
您可以通过编辑 .git/config
文件为 git svn
指定多个“trunks”来完成此操作。
像往常一样初始化你的 git 仓库:
git svn init {url-to-repository} -T trunk
现在,如果你编辑你的 .git/config
文件,你会发现如下所示的部分:
[svn-remote "svn"]
url = {url-to-repository}
fetch = trunk:refs/remotes/trunk
只需添加如下几行,这会将每个文件夹添加为要获取的单个文件夹(而不是要获取的分支文件夹或标签文件夹):
fetch = folder1:refs/remotes/folder1
fetch = folder2:refs/remotes/folder2
...
关于git - 将单独的 SVN 目录导入为 git 分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9642551/