我想将现有的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
成为一个单独的分支(虽然我想将它用作{{ 1}}分支)。
答案 0 :(得分:4)
您可以通过修改git svn
文件为.git/config
指定多个“中继”来执行此操作。
正常初始化您的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
...
答案 1 :(得分:2)
我得到的印象是,您确实有四个单独的存储库,您希望在单个git存储库中跟踪它们,每个存储库都在自己的分支上。不完全是如何使用git但您可以尝试此配置设置:
mkdir repo
cd repo
git init .
touch README
git add README
git commit -m "Initial repository"
git checkout -b folder1
mkdir folder1
touch folder1/svn-code-here # Add SVN files to folder1
git add folder1
git commit -m "folder1 branch"
git checkout master
git checkout -b folder2
mkdir folder2
touch folder2/svn-code-here # Add SVN files to folder2
git add folder2
git commit -m "folder2 branch"
git checkout master
git checkout -b folder3
mkdir folder3
touch folder3/svn-code-here # Add SVN files to folder3
git add folder3
git commit -m "folder3 branch"
git checkout master
touch svn-trunk-code-here # Add SVN files to trunk
git add svn-trunk-code-here
git commit -m "trunk started"
这将创建三个文件夹分支,只创建初始 trunk 主服务器中的共享README文件。这将创建一个分支图,如:
在上面的命令序列中,您将使用将SVN文件解压缩到目录并添加/提交到Git所需的命令和步骤替换每个touch svn-code-here
。当您签出主文件时,将看不到任何文件夹目录,您可以使用master作为 trunk 并根据需要切换到文件夹git checkout folder1
。