将subversion repo的一部分转换为git

时间:2015-02-05 09:49:18

标签: git svn migration

首先让我说:我对git有一个非常全面的了解,但只是对颠覆的基本理解。 对: 我的任务是将一个subversion repo移植到git。挑战在于我不需要嵌套项目,而是我需要进一步分离文件夹,并从中创建一个新的git存储库。

subversion repo的结构如下:

http://path/to/repo/
->project1
->project2
  ->tags
    ->path/to/targetProject
  ->branches
    ->path/to/targetProject
  ->trunk
    ->path/to/targetProject

想要的是创建一个新的git存储库,它只包含文件夹" targetProject"项目2。我一直在使用svn2git和git-svn,但到目前为止我只看到了迁移整个project2结构的选项。

2 个答案:

答案 0 :(得分:0)

解决方案位于该链接:http://svnbook.red-bean.com/en/1.7/svn.ref.svndumpfilter.html

这是关于使用svndumpfilter,它构建了一个只包含已过滤的存储库的完整转储存储库的转储,下一个解决了您的问题的示例:

$svndumpfilter include --targets FILE < fullDumpfile > filteredDumpFile

'FILE'的内容是:

/project2
/tags/path/to/project
/branches/path/to/project
/trunk/path/to/project

要获取第一个转储文件,必须运行下一个命令(假设您在svn服务器上)

$svn dump --bypass-prop-validation -q path/to/your/repo > fullDumpFile.dmp

如果您在启动svn中移动项目,可能会对您的过滤器导致依赖性产生一些问题。

答案 1 :(得分:-1)

只需使用git-svn,你可以指定哪个svn dir包含trunk,以防svn repo不使用标准布局:

git svn init <url> --trunk=project2/trunk/path/to/targetProject
git svn fetch

git-svn man page中解释得很清楚。

[编辑] 由于svn没有标签或分支(仅“副本”)的概念,因此在您的情况下,您将无法自动将它们转换为git(因为没有svn目录,其中包含targetProject目录的副本)。但是你可以通过将选定的svn dirs视为targetProject的分支来解决这个问题。初始提取完成后,将以下行添加到您想要的每个分支的.git / config中:

branches = project2/branches/{<branch_name>}/path/to/targetProject:refs/remotes/*

所以最后,部分将如下所示:

[svn-remote "svn"]
    url = https://repo-url
    fetch=project2/trunk/path/to/targetProject
    branches = project2/branches/{branch_one}/path/to/targetProject:refs/remotes/*
    branches = project2/branches/{branch_two}/path/to/targetProject:refs/remotes/*

然后执行git svn fetch。