SVN 到 Git 迁移提交历史问题
SVN to Git migration Commit history Issue
我有一个结构糟糕的 SVN 存储库。让我试着给你一张图片。
svn-repo
|
|--branches
| |
| |-- project1
| |-- project2
| |-- tragetProject
| |
| |-- targetProject5.0.0
| |-- targetProject5.0.1
| |-- targetProject5.0.2
| |-- ...
|
|--trunk
|
|-- project1
|-- project2
|-- ...
我要迁移的项目是"targetProject"。每个分支都来自最新的分支,例如。 5.0.1 是 5.0.0 的一个分支。所以 svn 中的每个分支都有其祖先的提交历史。
这是我尝试迁移到 git 的过程。
git svn init [trargetProject5.0.2 Url]
git svn fetch
我的问题是,虽然 svn 分支具有所有提交历史记录,但在获取之后,在 git 本地 master 中只有该分支的提交历史记录,而不是其祖先的提交历史记录。
我需要获取所有历史记录。我尝试更改 git 配置中的 git 分支 url 以获取每个分支的提交,但这也失败了,因为 "git svn rebase" 没有按预期工作。我还需要获取在 svn repo 中创建的新分支的新提交。任何人都可以帮助我或为我提供一种新的方法来处理这个问题吗?谢谢
要在保留所有历史记录的同时将 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
.
好的,我找到了解决方案。
我不想克隆我庞大的仓库的主干,而是想克隆某个分支。所以使用这个命令就可以了。
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
希望这对以后的人有所帮助。
ref https://gist.github.com/trodrigues/1023167#file-gistfile1-txt-L30
我有一个结构糟糕的 SVN 存储库。让我试着给你一张图片。
svn-repo
|
|--branches
| |
| |-- project1
| |-- project2
| |-- tragetProject
| |
| |-- targetProject5.0.0
| |-- targetProject5.0.1
| |-- targetProject5.0.2
| |-- ...
|
|--trunk
|
|-- project1
|-- project2
|-- ...
我要迁移的项目是"targetProject"。每个分支都来自最新的分支,例如。 5.0.1 是 5.0.0 的一个分支。所以 svn 中的每个分支都有其祖先的提交历史。
这是我尝试迁移到 git 的过程。
git svn init [trargetProject5.0.2 Url]
git svn fetch
我的问题是,虽然 svn 分支具有所有提交历史记录,但在获取之后,在 git 本地 master 中只有该分支的提交历史记录,而不是其祖先的提交历史记录。
我需要获取所有历史记录。我尝试更改 git 配置中的 git 分支 url 以获取每个分支的提交,但这也失败了,因为 "git svn rebase" 没有按预期工作。我还需要获取在 svn repo 中创建的新分支的新提交。任何人都可以帮助我或为我提供一种新的方法来处理这个问题吗?谢谢
要在保留所有历史记录的同时将 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
.
好的,我找到了解决方案。
我不想克隆我庞大的仓库的主干,而是想克隆某个分支。所以使用这个命令就可以了。
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
希望这对以后的人有所帮助。
ref https://gist.github.com/trodrigues/1023167#file-gistfile1-txt-L30