git-svn如何处理布局改变的svn仓库?

6
这个问题与这个问题这个问题类似,但场景稍微复杂一些。
我几年前开始使用私有svn仓库(主要用于各个机器之间共享配置文件等)。我对仓库的布局(分支,目录等)并不是很在意,所以随着时间的推移它发生了很多变化。当然,这是一个错误,但现在为时已晚。最近,我将其迁移到了更标准的svn trunk/branches/tags布局,主要使用svn move命令,但旧的历史记录仍然存在于仓库中(而且实际上有点混乱)。
现在,我想永久地将其转换为git仓库。我尝试使用git-svn,但它似乎只能处理遵循一致的trunk/branch/tag约定的情况(是的,你可以提供替代名称,但每个名称似乎只能提供一个)。例如,我的仓库历史记录中很多内容实际上在仓库的根目录下(即trunk),而tags/和branches/则是子目录。
如何处理所有这些的最佳方法是什么?理想情况下,我希望我最终得到的git仓库至少以某种方式访问所有历史记录,即使分支和标记在git中没有被完全表示为一流概念。
更具体地说,svn-git如何处理它所提供的trunk/branches/tags子目录之外的文件?迄今为止,我的观察是它有时会漏掉它们(绝对不行),而其他时候则将它们添加到新仓库中。
感谢任何想法。

你问它会表现如何,但也说你已经尝试过了。提供你观察到的不良行为的具体示例将会很有帮助。Git通常非常擅长处理复杂的合并操作,例如在同一次提交中更改和移动子树。 - Greg Bacon
好的 - 我已经尝试过了。我承认我可能没有完全深入地研究结果,但我的肤浅观察确实是git-svn似乎包括了一些来自svn根目录(即trunk/branches/tags目录之外)的目录,但不包括其他目录。我对此感到困惑。Git确实能够处理复杂的合并,但我认为这个问题更多地涉及到git-svn而不是git本身。 - Andrew Ferrier
请使用 [svn] 标签代替 [subversion] 标签。http://meta.stackexchange.com/questions/2601/batch-retag-request-merge-svn-and-subversion - Brad Gilbert
1个回答

3

根据我的经验,处理这个问题的唯一方法是跟踪存储库的位置,并为项目在一个位置保留的每个时期创建单独的git-svn克隆。

在为不同时间段创建了存储库之后(或者至少尽可能远),您可以将这些存储库接合在一起。

我已经创建了一个演示这种技术的视频教程:

http://blog.tfnico.com/2010/10/gitsvn-6-grafting-together-svn-history.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接