2015-02-23 2 views
4

Вот пример git-svn-id из локального тестового репо.Что такое git-svn-id?

git-svn-id: file:///tmp/svnrepo/branches/[email protected] 0f7bc949-3f51-4b04-a2a6-16f580a5904d 

Что такое последняя деталь? «@ 6» означает, что это svn-ревизия номер 6, но после этого выглядит как хэш. Кажется, что это одно и то же при каждой фиксации.

Как производится эта последняя часть? Я предполагаю, что это хэш-алгоритм, примененный к первому фиксации git repo. Таким образом, git-svn-id также может гарантировать, что общая родословная этого коммита будет одинаковой или различной с учетом другого git-svn-id.

+1

Немного объяснено здесь: http://www.git-tower.com/blog/an-introduction-to-git-svn/ – Martin

ответ

4

Это подрывная конструкция. В подрывной деятельности каждому репо присваивается UUID. Вы можете найти UUID svn repo через svn info. В приведенном ниже примере строка 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) 

Вот мерзавец-СВН код, который, кажется, читает svn info выход и сохраняет UUID: https://github.com/git/git/blob/master/vcs-svn/svndump.c#L356


Для решения некоторых из моих предположений в вопрос: UUID делает не инкорпорировать любая информация о происхождении git repo. По моему мнению, кто-то может git svn clone тот же репо, но не включает всю историю репо. Если это так между двумя репозиториями git-svn, то одна и та же точка в репозитории svn станет разными хэшами sha1 в двух репозиториях.

+1

Поскольку я собирался прокомментировать ваш вопрос: [этот файл] (https://github.com/git/git/blob/master/contrib/svn-fe/svn-fe.txt#L53) также указывает, что это UUID. –