【问题标题】:Preserve SVN history of copied TAG when 'git svn clone'ing'git svn clone' 时保留复制标签的 SVN 历史记录
【发布时间】:2012-12-19 18:35:31
【问题描述】:

我正在将一些 SVN 项目迁移到 git。

我想克隆某个标签到它自己的git仓库。

通过在 TAG 路径上执行 git svn clone,我丢失了 svn 复制之前发生的所有历史记录,这首先创建了标签。

有没有办法在新的 git 项目中保留原始历史记录? (我可以在我选择的 IDE 中浏览 SVN 历史记录,因此 SVN 似乎能够提供所需的信息)

提醒:我不想要一个带有类似于 SVN 结构的分支和标签的主干项目。我想要一个单独的项目,只包含 TAG 和附加的所有历史记录(包括创建标签之前的修订)

【问题讨论】:

    标签: git git-svn


    【解决方案1】:

    检查--follow-parent 标志:

     git svn clone --follow-parent https://path.to/svnroot/repo/tags/0.12
    

    编辑:

    但是请注意,git svn 只会看到克隆目录上下文中的内容; svn-tagging 通常涉及将一个目录复制到另一个位置,因此您需要整个目录树(包含“主干”和最终的“tagX”导向器)才能有足够的上下文让 git 工作。 这样做的原因是,git 将拒绝从/向 git 存储库本身之外的路径复制任何内容(这是有道理的)。 svn 可以查看整个历史记录,因为它确实具有完整的上下文(在服务器上,即使您在本地机器上只有部分结帐)

    所以,为了将完整的历史记录到您的 git svn clone 中,您可能确实需要克隆整个项目(即至少包含主干和标签目录的目录)。

    所以接下来的方法是:

    • 对你的 svn 存储库做一个完整的git svn clone,指定trunk/tags/branches 目录(--trunk、--tags 和--branches 标志,如果你有一些特殊设置或使用--stdlayout如果您的 repo 以标准 /trunk、/tags/...、/branches/... 方式组织)

    • 这将为您提供一个带有许多 git 分支和 git 标签的 git 存储库,您可以在其中删除所有不需要的分支/标签(或者只是不将它们推送到服务器)

    【讨论】:

    • 那行不通。我的 git 存储库中的第一个提交仍然是“为 3.4 标签创建标签目录”
    • 更新了答案(并解释了为什么简单的方法不起作用)
    • 感谢您的澄清。我实际上尝试了您的建议,但没有成功。我猜这是因为标签是从主干的一部分创建的(阅读:不是精确的副本)。我最终做的是分别转换主干和标签,并使用嫁接告诉 git,标签在哪里分支。这样做不是很干净,但这是我能找到的唯一方法。
    • 顺便说一句:尽管如此,我仍会将您的答案标记为正确,如果 svn 系统比我处理的系统更健全的话,这应该是正确的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多