首先让我说:我对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结构的选项。
答案 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。