什么是git-svn-id?

时间:2015-02-23 22:02:34

标签: git git-svn

以下是本地测试存储库中的git-svn-id示例。

git-svn-id: file:///tmp/svnrepo/branches/foobar@6 0f7bc949-3f51-4b04-a2a6-16f580a5904d

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

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

1 个答案:

答案 0 :(得分:4)

它是一个颠覆构造。在subversion中,每个repo都被赋予一个UUID。你可以通过svn info找到一个svn repo的UUID。在下面的示例中,"存储库UUID" line是repo的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)

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


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