【问题标题】:Moving a big Legacy Java Project to Git将大型遗留 Java 项目迁移到 Git
【发布时间】:2026-01-30 22:40:01
【问题描述】:

我有一个结构非常好的大型项目,在我的团队中使用 SVN 进行维护。而且我们不想迁移到 Git——它将进一步与 Teamcity 或 Jenkins 等持续集成服务器集成(尚未决定)。 当我看到 svn 时,我发现因为 svn 允许您从任何地方创建标签 - 它有很多标签,这些标签只包含单个项目。 代码库非常庞大,我将所有代码都导入到一个 git repo 中。一种方法是针对每个项目 - 我可以创建单独的存储库,或者将一些项目合并到一个存储库(不确定)

我想要实现的是我想保留所有历史记录并打破回购,以便它变得易于管理。 (此外,在与 jenkins 集成以在每次提交时自动构建时,它也会有所帮助)

如何确保保留历史记录,拥有所有现有标签,并移至 git

【问题讨论】:

  • 在您的情况下,迁移到 git 的实际原因是什么?

标签: java git svn


【解决方案1】:

git-svn 是帮助进行此迁移的明显解决方案,但在我看来,这更适合从 SVN 到 git 的一次性迁移。

如果您想同时保持 SVN 和 git 存储库处于活动状态并允许对两者进行提交(使它们保持同步),我建议您使用 SubGit

【讨论】:

    【解决方案2】:

    当我们从 svn 迁移到 git 时,我发现 this * 的帖子很有帮助,特别是第二个答案。我从你的描述中假设一切都在一个树干下。这确实使它变得更复杂一些。我之前没有尝试过移动单个项目,但您可以通过以下两种方式之一进行:

    1. 将整个 svn 存储库、标签、分支等迁移到本地 git 存储库(在推送到远程之前)。然后按照 (this) * 帖子中的建议分解项目。这应该为您提供单独的存储库,然后您可以将其推送到远程存储库。

    2. 您可以在运行 svn 到 git 转换并指定单个项目时更改这些步骤,但这似乎很危险且令人困惑,因为标签/分支不一定会对齐。

    【讨论】: