Importing a Subversion repository with a non-standard layout into Git
我试图(永久地)将我的组的Subversion存储库迁移到Git,但在尝试清理其非标准目录结构时遇到了问题。
项目的一些内容包含在主干和分支文件夹中,但不是全部。关于颠覆的项目如下:
1 2 3 4 5 6
| project/trunk/
project/branches/feature_1
project/branches/feature_2
project/libraries
project/crontab
... |
导入后,我希望Git存储库的布局如下:
1 2 3 4
| project/html # the content of the old trunk and branches folders
project/libraries
project/crontab
... |
号
使用适当的选项运行svn2git将正确处理主干和分支目录,但我如何还包括其他文件夹的历史记录?似乎git-filter-branch可以帮上忙,但我不知道该如何使用它。
- (stackoverflow.com/questions/614229/…)可能会有所帮助。
- 为什么不进行"SVN移动"以获得适当的结构,然后执行SVN2Git?你还是有历史的,对吗?
- @版本控制伙伴:导入后,Git存储库会将旧的project/trunk文件夹视为其根目录。导入前将svn moved文件夹放入主干中将有历史记录,但其原始位置仍将在存储库根目录之外,并且将被忽略。
- 我觉得这不会被忽视,但我现在没有时间来验证我的陈述。但是,请访问stackoverflow.com/questions/1292531,这似乎与您的要求类似。
- 当使用git svn或svn2git从svn转换为git时,可能会出现重复的情况,如何更改存储库的基本路径并可能仍然保留分支/标记?
- @Ericnaesseth你说"在导入之前将svn moved文件夹放入主干中……将被忽略。"-这是否意味着git blame对这些文件夹不起作用?就像这个问题问的那样。
将回购的每个主要子文件夹导入到单独的git repo中,然后使用子树合并方法将git repo合并到一个回购中。不过,您最终可能会得到一些重复的提交。
如果您有许多子目录,您可能需要执行一个svnadmin dump,然后svndumpfilter exclude ..两次将您的SVN repo拆分为两个半目录,然后使用子树合并方法重新加入它们。这将比进行许多子树合并具有更清晰的历史。