【发布时间】:2021-10-04 11:42:24
【问题描述】:
我想将我们的 SVN 存储库迁移到 git。
我们当前的存储库是一个巨大的单例堆,包含许多 Visual Studio 解决方案,所有解决方案都位于存储库的单独子目录中。
将其转换为 git 时,我想将 SVN 存储库拆分为每个解决方案的单独 git 存储库,同时维护每个解决方案的历史记录。
我不希望在我们所有未来的git 存储库中保留整个 SVN 存储库的历史记录。在这些未来的git 存储库中,我想要的只是特定子目录的历史记录。
这可能吗?
当前 SVN 存储库文件结构:
svn_base
|-- Solution1
| |-- 1.cs
| |-- 1.csproj
| |-- 1.sln
|-- Solution1
| |-- 2.cs
| |-- 2.csproj
| |-- 2.sln
|-- Solution3
| |-- 3.cs
| |-- 3.csproj
| |-- 3.sln
所需的git 存储库文件结构:
Solution1
|-- .git
|-- 1.cs
|-- 1.csproj
|-- 1.sln
Solution2
|-- .git
|-- 2.cs
|-- 2.csproj
|-- 2.sln
Solution3
|-- .git
|-- 3.cs
|-- 3.csproj
|-- 3.sln
【问题讨论】:
-
使用 git-svn,您可以告诉它主干在哪里(也是您保存分支/标签的目录),因此将每个项目分成自己的单独 git 存储库应该没有问题。
-
我不确定该工具在将 SVN 转换为 Git 并在那里拆分方面有多好 - 也许它很棒。但我知道新的 git-filter-repo 工具很棒,所以如果是我,我会选择 @sk_pleasant-EliasHolzmann 的建议,先将 SVN 转换为一个大的 Git 存储库,然后使用 git-filter-repo 其余的.
-
作为旁注,在不了解您的代码库的情况下,我的直觉是每个 repo 的一个解决方案对于 repo 来说可能有点细化。您没有说明为什么要拆分,但是除非每个都太大,或者您的分类限制某些人查看某些代码,否则我可能会将其留在一个仓库中,直到我有充分的理由拆分出来。 (也许你会。)
-
@sk_pleasant-EliasHolzmann:很好的提示!我尝试了一个示例存储库,
git subtree就像一个魅力。 (不幸的是,这个命令的手册页似乎不见了。) - 如果你想发表你的评论作为答案,我很乐意投票。