2009-07-20 66 views
6

此问题与this onethis one类似,但情况稍微复杂一些。git-svn如何与svn版本库改变布局?

几年前我开始使用私人svn存储库(我主要用于共享配置文件之类的各种机器之间)。我并不太在意仓库的布局(分支,去哪等),所以它随着时间的推移发生了很大的变化。这当然是一个错误,但现在已经太晚了。最近,我已经将它迁移到更标准的svn trunk/branches/tags布局,主要是使用svn move命令,但是旧的历史记录当然仍然存在于存储库中(坦率地说,这有点乱) 。

我现在想永久地将其转换为git存储库。我尝试过使用git-svn,但它似乎只处理遵循一致的trunk /分支/标记约定的情况(是的,你可以提供其他名称,但每个只有一个,它就会出现)。我的存储库的很多历史记录都有效地存储在存储库的根目录中,例如,标记为/和分支/为子目录。

处理所有这些问题的最佳方法是什么?理想情况下,我希望git仓库最终能够以某种方式访问​​所有历史记录,即使分支和标记在git中没有正确表示为第一级概念。

更具体地说,svn-git如何处理它所提供的trunk/branches/tags子目录之外的文件?到目前为止,我的观察结果是,它有时会错过它们(绝对不行),有时会将它们添加到新的存储库中。

任何想法将不胜感激。

+0

你问它会如何表现,也说你已经试过了。您观察到的不良行为的具体示例会很有帮助。 Git通常非常善于处理复杂的合并,例如,在同一提交中更改和移动子树。 – 2009-07-20 18:26:48

回答

2

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

在您为不同阶段及时创建存储库(或者至少在可能困扰的时候),可以将存储库移植到一起。

我创建了一个截屏在这里展示这种技术:

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