为什么很多修订版本会在git-svn中丢失?

时间:2019-05-16 12:23:54

标签: git svn git-svn svn2git

我目前正在尝试使用git-svn将几个项目从svn迁移到git。无论我尝试转换哪个项目,svn修订版都比git commits多得多。我不太了解svn,因此很难弄清楚为什么会发生这种情况。

我基本上遵循this转换指南。 途中的损失从git的18个修订版到9个提交到131个修订版到10个提交不等。这发生在有很多分支以及没有任何分支的项目中。

到目前为止,我已经尝试使用选项--stdlayoutMissing 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历史记录可以吗?

更新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

1 个答案:

答案 0 :(得分:0)

所以今天我学会了(非常感谢eftshift0):

1。 svn日志和git日志显示了不同的内容

genMockFromModule将返回对当前所在子目录所做的所有修订。因此,如果您位于根目录中,它将显示对所有分支,主干和标签所做的所有更改。这与svn log不同,git log仅显示对您当前所在分支所做的提交。如果您知道svn,这似乎很明显,但是我不知道,所以...

2。 --stdlayout做什么

指定--stdlayout意味着git-svn将仅合并在干线,分支或标记中完成的文件和修订。在分支和标签内部,它仅拾取分支和标签(即目录),因此,如果由于某种原因在分支中有其他文件(但在任何实际分支中均没有),则这些文件将不在git存储库中。这也意味着与这些文件相关的修订不会转换为提交。

这两个事实是我的提交与修订版本不同的原因。我希望这一信息有一天对其他人有用:)