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

标签 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 成为一个单独的分支(虽然我想将其用作 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/

相关文章:

git - 在不更改时间戳的情况下修改以前的提交

Git - 使开发和掌握跟踪不同的 repo 。懂事吗?

ms-access - 我需要将 Access 表(一个大表)中的部分数据动态(快速)导入到 Excel 中

database - 如何使用 aerospike 加载程序在 aerospike 中加载嵌套的 csv 文件?

svn - Subversion外部配置中的相对路径

java - 为什么不在java中导入一个包来声明数组

linux - 我从 git 中删除代理但仍然显示错误如何解决?

git - Commit、Commit 和 Push、Commit 和 Sync 之间的区别

linux - 从 svn 命令行获取两个时间戳之间更改的文件

visual-studio - AnkhSVN 中的待定更改仅显示当前解决方案中的文件