为什么很多修改在 git-svn 中丢失了?
Why do a lot of revisions get lost in git-svn?
我目前正在尝试使用 git-svn 将几个项目从 svn 移动到 git。无论我尝试转换哪个项目,svn 修订都比 git 提交多得多。我不太了解 svn,所以我很难弄清楚为什么会这样。
我基本上已经按照this指南进行转换了。
git 中的损失从 18 次修订到 9 次提交到 131 次修订到 10 次提交不等。这发生在有很多分支的项目和没有任何分支的项目中。
到目前为止,我已尝试使用选项 --stdlayout
(Missing revisions after "git svn clone")。
我也尝试过使用 svn2git,但是也失败了,可能是因为我的项目似乎没有 svn2git 需要的基础结构(格式和数据库文件丢失)。
我想我最终会通过使用任何其他可用工具(如 this)找到一种方法来做到这一点,但我真的很想知道为什么会这样。
所以:有谁知道为什么在使用 git-svn 将 svn 存储库转换为 git 时,提交历史中没有显示这么多修订? git-svn 是有问题还是有一些修订类型没有显示在 git 提交历史中?
更新
我后来发现 svn log
- 与 git log
相反 - 显示了历史中的所有修订,而不仅仅是 trunk/master 的修订。这意味着许多我认为缺失的修订实际上只是在分支中。然而,即便如此,并非所有修订都在提交历史中。缺少的是调用 svn log
时显示的那些,例如在 \branches
内(但不在其中一个分支内)。 git-svn
可能不会导入它们,因为它们既不影响 master 也不影响任何分支。虽然我现在很清楚这一点,但对于它的重要性我仍然有些不知所措。这些修订是否重要,或者 git 没有它们,历史是否还好?
更新 2
.git/config 文件
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
ignorecase = true
[svn-remote "svn"]
noMetadata = 1
url = svn://TheURL/TheRepository
fetch = trunk:refs/remotes/svn/trunk
branches = branches/*:refs/remotes/svn/*
tags = tags/*:refs/remotes/svn/tags/*
[svn]
authorsfile = /a/file/path/svn/authors-transform.txt
[remote "origin"]
url = https://github.com/User/TheRepository.git
fetch = +refs/heads/*:refs/remotes/origin/*
文件结构:
TheRepository
|
+--branches
| |
| +--branchA
| |
| +--Readme_branch.txt
|
+--trunk
|
+--tags
所以今天我学到了(非常感谢 eftshift0):
1。 svn 日志和 git 日志显示不同的东西
svn log
将 return 对您当前所在的任何子目录所做的所有修改。因此,如果您在根目录中,它将显示对所有分支、主干和标签。这与 git log
不同,后者仅显示对您当前所在分支所做的提交。如果您知道 svn,这可能看起来很明显,但我不知道,所以...
2。 --stdlayout 的作用
指定 --stdlayout
意味着 git-svn
将只包含在主干、分支或标签中完成的文件和修订。在分支和标签内部,它只获取分支和标签(即目录),因此如果出于某种原因在分支中有其他文件(但不在任何实际分支中),这些文件不会在 git 存储库。这也意味着与这些文件相关的修订不会变成提交。
这两个事实是我的提交与修订不同的原因。我希望有一天这些信息对其他人有用:)
我目前正在尝试使用 git-svn 将几个项目从 svn 移动到 git。无论我尝试转换哪个项目,svn 修订都比 git 提交多得多。我不太了解 svn,所以我很难弄清楚为什么会这样。
我基本上已经按照this指南进行转换了。 git 中的损失从 18 次修订到 9 次提交到 131 次修订到 10 次提交不等。这发生在有很多分支的项目和没有任何分支的项目中。
到目前为止,我已尝试使用选项 --stdlayout
(Missing revisions after "git svn clone")。
我也尝试过使用 svn2git,但是也失败了,可能是因为我的项目似乎没有 svn2git 需要的基础结构(格式和数据库文件丢失)。
我想我最终会通过使用任何其他可用工具(如 this)找到一种方法来做到这一点,但我真的很想知道为什么会这样。
所以:有谁知道为什么在使用 git-svn 将 svn 存储库转换为 git 时,提交历史中没有显示这么多修订? git-svn 是有问题还是有一些修订类型没有显示在 git 提交历史中?
更新
我后来发现 svn log
- 与 git log
相反 - 显示了历史中的所有修订,而不仅仅是 trunk/master 的修订。这意味着许多我认为缺失的修订实际上只是在分支中。然而,即便如此,并非所有修订都在提交历史中。缺少的是调用 svn log
时显示的那些,例如在 \branches
内(但不在其中一个分支内)。 git-svn
可能不会导入它们,因为它们既不影响 master 也不影响任何分支。虽然我现在很清楚这一点,但对于它的重要性我仍然有些不知所措。这些修订是否重要,或者 git 没有它们,历史是否还好?
更新 2
.git/config 文件
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
ignorecase = true
[svn-remote "svn"]
noMetadata = 1
url = svn://TheURL/TheRepository
fetch = trunk:refs/remotes/svn/trunk
branches = branches/*:refs/remotes/svn/*
tags = tags/*:refs/remotes/svn/tags/*
[svn]
authorsfile = /a/file/path/svn/authors-transform.txt
[remote "origin"]
url = https://github.com/User/TheRepository.git
fetch = +refs/heads/*:refs/remotes/origin/*
文件结构:
TheRepository
|
+--branches
| |
| +--branchA
| |
| +--Readme_branch.txt
|
+--trunk
|
+--tags
所以今天我学到了(非常感谢 eftshift0):
1。 svn 日志和 git 日志显示不同的东西
svn log
将 return 对您当前所在的任何子目录所做的所有修改。因此,如果您在根目录中,它将显示对所有分支、主干和标签。这与 git log
不同,后者仅显示对您当前所在分支所做的提交。如果您知道 svn,这可能看起来很明显,但我不知道,所以...
2。 --stdlayout 的作用
指定 --stdlayout
意味着 git-svn
将只包含在主干、分支或标签中完成的文件和修订。在分支和标签内部,它只获取分支和标签(即目录),因此如果出于某种原因在分支中有其他文件(但不在任何实际分支中),这些文件不会在 git 存储库。这也意味着与这些文件相关的修订不会变成提交。
这两个事实是我的提交与修订不同的原因。我希望有一天这些信息对其他人有用:)