将单独的SVN目录导入为git分支

时间:2012-03-09 23:55:17

标签: git svn import branch git-svn

我想将现有的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存储库,保留历史记录。

问题是,folder1folder2folder3并未从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}}分支)。

2 个答案:

答案 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文件。这将创建一个分支图,如:

Git Branches

在上面的命令序列中,您将使用将SVN文件解压缩到目录并添加/提交到Git所需的命令和步骤替换每个touch svn-code-here。当您签出主文件时,将看不到任何文件夹目录,您可以使用master作为 trunk 并根据需要切换到文件夹git checkout folder1