什么是 git-svn-id?

Ale*_*ird 5 git git-svn

这是来自本地测试存储库的示例 git-svn-id。

git-svn-id: file:///tmp/svnrepo/branches/foobar@6 0f7bc949-3f51-4b04-a2a6-16f580a5904d
Run Code Online (Sandbox Code Playgroud)

最后一部分是什么?“@6”意味着它是 svn 修订号 6,但之后看起来是一些哈希。每次提交似乎都是一样的。

最后一部分是如何生成的?我假设它是应用于 git repo 的第一次提交的哈希算法。这样 git-svn-id 也可以保证该提交的总祖先相同或不同,给定另一个 git-svn-id。

Ale*_*ird 6

这是一个颠覆结构。在 subversion 中,每个 repo 都有一个 UUID。您可以通过 svn info 找到 svn repo 的 UUID。在下面的示例中,“存储库 UUID”行是存储库的 UUID。

$ svn info
Path: .
Working Copy Root Path: /tmp/svnco
URL: file:///tmp/svnrepo
Relative URL: ^/
Repository Root: file:///tmp/svnrepo
Repository UUID: 0f7bc949-3f51-4b04-a2a6-16f580a5904d
Revision: 6
Node Kind: directory
Schedule: normal
Last Changed Author: ABird
Last Changed Rev: 6
Last Changed Date: 2015-02-23 16:54:45 -0500 (Mon, 23 Feb 2015)
Run Code Online (Sandbox Code Playgroud)

这是似乎读取svn info输出并保存 UUID的 git-svn 代码:https : //github.com/git/git/blob/master/vcs-svn/svndump.c#L356


为了解决我在这个问题中的一些假设:UUID没有包含任何关于 git repo 祖先的信息。根据我的理解,某人可以git svn clone使用相同的 repo,但不包括 repo 的整个历史记录。如果两个 git-svn 存储库之间是这种情况,那么 svn 存储库中的相同点将成为两个存储库中不同的 sha1 哈希值。