1

我们目前有几个小型的半相关 SVN 存储库,就提交而言它们是不活动的。但是,有时需要使用它们和/或需要审查它们的提交历史。我们希望将它们全部移动到一个预先存在的 Git 存储库中,因为这些天我们的大部分工作都是在 Git 上完成的......

在做研究时,我想我想要实现的是为每个具有所有提交历史的 SVN 存储库创建一个 Git 子树分支。但是,git-svn 似乎只允许我将 1 个 SVN 存储库与 1 个 Git 存储库相关联,所以我必须先为每个项目创建一个 git 存储库,然后在最终存储库中转换为子树。(我认为)

有没有办法将 SVN 存储库中的历史记录直接合并到我的 Git 存储库中的分支上,以便我可以有效地跳过创建冗余 Git 存储库的步骤?

4

2 回答 2

1

在 git 中一切都变得更容易。我会使用一个工具,比如git2svn将 Subversion 存储库导入 git。

进入 git 后,您可以设置带有分支的新存储库。您可以设置每个分支来跟踪一个转换后的 Subversion 存储库。获取更改集后,您可以使用 清除远程跟踪git remote remove。这为您留下了一个存储库,其中包含来自分支的 Subversion 的各种变更集。

于 2013-05-14T18:17:07.283 回答
0

所以,我想避免额外存储库的原因是我们使用 GitHub 来存储我们的存储库,而我需要创建的额外存储库会使我们超出当前计划的限制。

因此,我发现,诀窍是将所有存储库保持在本地。我知道这是一种可能性,但不确定如何引用本地存储库。事实证明,这再简单不过了!以下是我经历的步骤:

对于每个 SVN 存储库:

git svn clone http://svnhost.com/path/to/svn/repo

这将创建一个本地 Git 存储库,其中包含来自 SVN 的所有历史记录(甚至保留时间戳!!)。接下来,转到要将其合并到的存储库。创建一个分支,并从以下位置拉入代码:

git checkout -b newsvnbranch1
git pull path_to_newsvnbranch1_git_repo

现在,剩下的步骤不是原始问题的一部分,但它们是我需要完成的最终目标 - 所有 SVN 存储库和历史合并在一起,但在它们自己的目录中。

git mv trunk newname1
git checkout master
git merge newsvnbranch1

为每个 SVN 存储库完成这些步骤基本上会使您的原始 Git 存储库具有以下结构:

original
|-newname1  (containing the contents of the first SVN repo)
|-newname2  (containing the contents of the second SVN repo)
|-newname3  (and so on...)

并且,git log现在将显示每个 repo 交织在一起的历史。

于 2013-05-23T13:41:05.703 回答