我目前正在尝试使用git-svn将几个项目从svn迁移到git。无论我尝试转换哪个项目,svn修订版都比git commits多得多。我不太了解svn,因此很难弄清楚为什么会发生这种情况。
我基本上遵循this转换指南。 途中的损失从git的18个修订版到9个提交到131个修订版到10个提交不等。这发生在有很多分支以及没有任何分支的项目中。
到目前为止,我已经尝试使用选项--stdlayout
(Missing revisions after "git svn clone")。
我也尝试使用svn2git,但是也失败了,可能是因为我的项目似乎没有svn2git所需的基础结构(格式和db文件丢失)。
我想我最终会找到一种使用任何其他可用工具(例如this)来做到这一点的方法,但我真的很想知道为什么会这样。
所以:有人知道为什么当使用git-svn将svn存储库转换为git时,提交历史中没有显示这么多修订吗? git-svn只是有问题,还是有一些修订类型未在git commit历史记录中显示?
此后,我发现svn log
(与git log
相反)显示了历史记录中的所有修订,而不仅仅是主干/主修订。这意味着我认为缺少的许多修订实际上只是在分支中。但是,即使如此,并非所有修订都在提交历史记录中。缺少的是调用svn log
时显示的内容,例如在\branches
内(但不在分支之一内)。 git-svn
可能不会导入它们,因为它们既不影响master也不影响任何分支。虽然这对我现在很清楚,但是我仍然对此意义不知所措。这些修订很重要吗?或者没有它们的git历史记录可以吗?
.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
答案 0 :(得分:0)
所以今天我学会了(非常感谢eftshift0):
genMockFromModule
将返回对当前所在子目录所做的所有修订。因此,如果您位于根目录中,它将显示对所有分支,主干和标签所做的所有更改。这与svn log
不同,git log
仅显示对您当前所在分支所做的提交。如果您知道svn,这似乎很明显,但是我不知道,所以...
指定--stdlayout
意味着git-svn
将仅合并在干线,分支或标记中完成的文件和修订。在分支和标签内部,它仅拾取分支和标签(即目录),因此,如果由于某种原因在分支中有其他文件(但在任何实际分支中均没有),则这些文件将不在git存储库中。这也意味着与这些文件相关的修订不会转换为提交。
这两个事实是我的提交与修订版本不同的原因。我希望这一信息有一天对其他人有用:)