【问题标题】:How does git-svn behave with svn repositories that have changed layout?git-svn 如何处理已更改布局的 svn 存储库?
【发布时间】:2009-07-20 13:35:09
【问题描述】:

这个问题类似于this onethis one,但场景稍微复杂一些。

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

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

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

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

任何想法将不胜感激。

【问题讨论】:

  • 你问它的表现如何,但也说你已经尝试过了。您观察到的不良行为的具体示例会有所帮助。 Git 通常非常擅长处理复杂的合并,例如,在同一个提交中更改和移动子树。
  • 好的——我试过了。我承认我可能没有完全深入研究结果,但我的肤浅观察肯定是 git-svn 似乎包含了 svn 根目录中的一些目录(即在trunk/branches/tags 目录之外),而不是其他目录。我很困惑为什么。 git 确实有能力处理复杂的合并,但我认为这个问题更多的是关于 git-svn 而不是 git 本身。
  • 使用[svn]标签代替[subversion]标签meta.stackexchange.com/questions/2601/…

标签: svn git repository git-svn


【解决方案1】:

根据我的经验,处理此问题的唯一方法是始终跟踪存储库的位置,并为项目保留在一个位置的每个时间段制作一个单独的 git-svn-clone。

在您为不同的时间阶段创建存储库之后(或至少在您可以打扰的时间段内),您可以将这些存储库移植到一起。

我在这里创建了一个演示此技术的截屏视频:

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

【讨论】:

    猜你喜欢
    • 2012-10-07
    • 1970-01-01
    • 2012-12-06
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多