gpt4 book ai didi

git - 将具有共同历史的两个 svn 存储库迁移到 git

转载 作者:太空狗 更新时间:2023-10-29 13:39:13 25 4
gpt4 key购买 nike

我正在计划将一堆存储库从 svn 迁移到 git。其中两个处于特定状态。

在 svn 仓库中开发了一个项目。由于各种限制,该项目已在某个时候 fork 。 fork 是通过复制 svn repo 制作的。在那之后,这两个项目分别发展。除了主干之外,任何一个 repo 中都不存在分支或标签。

已为原始项目开发了一项重要功能,需要将其移植到分支中。在当前情况下,这可以通过从各种修订中创建补丁并将其应用于 fork 项目来完成。这在当前情况下具有短期简单的优势,但从长远来看会产生许多难以处理的后果。

我们可以有两个不同的 git 存储库并通过 pull 请求进行交叉分支移植,但这可能缺乏可用性(我们没有使用 github)。此外,由于模块化设计重构,有时我们可能希望将 fork 重新集成到父项目中。另一种方法是将两个 svn 存储库 merge 到一个 git 存储库中作为不同的分支,并从那里管理后续 merge (具有它提供的所有优势)。

理想情况下,我想重新创建项目的真实历史,即拥有一个 git 存储库:

  • 一个分支,由直到 fork 的提交组成
  • 两个不同的分支,由父分支和分支提交组成,直到 HEADs

一个有趣的事实可能会有所帮助,以下命令为常见提交生成相同的 SHA1:

git svn clone -s -A svn.authors --no-metadata http://subversion.foo.local/repo/path git_migration

我不关心 --no-metadata 因为它是一种单向迁移。

如果可能的话,我怎样才能达到这样的结果?

最佳答案

由于您有办法为常见提交克隆具有相同哈希值的 SVN 存储库,因此这应该可行。

git svn clone -s -A svn.authors --no-metadata http://subversion.foo.local/repo1/path git_migration
git svn clone -s -A svn.authors --no-metadata http://subversion.foo.local/repo2/path git_migration-2
cd git_migration
git branch repo1 # Branch for first repo
git reset --hard <highest_common_hash> # To have only common history on master
git checkout -b repo2 # Branch for second repo
git pull ../git_migration-2 master

现在您必须在 master 中有共同的历史记录,并为不同的 SVN 存储库提供 2 个分支。

关于git - 将具有共同历史的两个 svn 存储库迁移到 git,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7158478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com