SVN 到 Git 迁移提交历史记录问题



我有一个结构糟糕的SVN存储库。让我试着给你一个形象。

svn-repo
|
|--branches
|     |
|     |-- project1
|     |-- project2
|     |-- tragetProject
|               |
|               |-- targetProject5.0.0
|               |-- targetProject5.0.1
|               |-- targetProject5.0.2
|               |-- ...
|
|--trunk
|
|-- project1
|-- project2
|-- ...

我要迁移的项目是"目标项目"。每个分支都派生自最新的分支,例如。5.0.1 是 5.0.0 的一个分支。因此,svn 中的每个分支都有其祖先的提交历史记录。

这是我为了迁移到 git 而尝试的过程。

git svn init [trargetProject5.0.2 Url]
git svn fetch

我的问题是,尽管 svn 分支具有所有提交历史记录,但在获取后,在 git 本地主服务器中,只有该分支的提交历史记录,而不是它的祖先。

我需要获取所有历史记录。我尝试更改 git config 中的 git 分支 url 以获取每个分支的提交,但这也失败了,因为"git svn rebase"没有按预期工作。我还需要获取在 svn 存储库中创建的可能新分支的新提交。任何人都可以帮助或为我提供一种新的方法来解决这个问题吗?谢谢。

好的,我已经找到了解决方案。

我不想克隆我巨大存储库的树干,而是克隆某个分支。因此,使用此命令可以解决问题。

git svn clone -T branches/tragetProject/tragetProject5.0.2 http://example.com/PROJECT

这将克隆当前分支,并在每个父分支中搜索所有提交历史记录。

因为我的 svn 存储库很大,并且所有分支都链接在一起,所以这个命令需要很长时间才能完成,并且会从旧分支获取不需要的提交。通过在末尾添加-r<revision>:HEAD,您可以将克隆调查限制为特定修订版。

因此,命令变为:

git svn clone -T branches/tragetProject/tragetProject5.0.2 http://example.com/PROJECT -r40000:HEAD

希望这对将来的某人有所帮助。

参考文献 https://gist.github.com/trodrigues/1023167#file-gistfile1-txt-L30

要在保留所有历史记录的同时将 SVN 迁移到 Git,您可以使用以下命令:

git svn clone <svn-repo URL> --branches=branches --tags=tags --trunk=trunk

现在,所有提交历史记录都保存在 git 存储库中。默认情况下,只有本地分支master,但您可以通过git branch -r查找其他分支。

git branch -r命令的输出看起来像origin/branch1.然后,您需要做的就是通过git branch -b <local Branch name> <remote branchname>在本地签出所有分支。

如上例所示,要在本地结帐branch1,您可以使用命令git checkout -b branch1 origin/branch1

最新更新