как искать недавнее изменение в указанном файле на архитектуре git - PullRequest
1 голос
/ 04 января 2012

Я хотел бы знать алгоритм, который обнаруживает последние изменения в указанном файле, когда я изучаю архитектуру git core.

вы знаете git log -n1 -- <file> показать коммит, который недавно изменился в указанном файле. узнать последние изменения очень просто. Я случайно хочу реализовать это самостоятельно.

я использую libgit2 для обхода каждого коммита. и я взял несколько дней, но я не могу этого понять. Модель git commit, использующая DAG-подобную структуру, вряд ли будет искать это для меня.

[for example]
o---o---o---o---o---M--[HEAD]
     `-o------M-o-o'
        `-C-o-'

o means: a commit
M means: merge commit
C means: rechange change in the specified file

Каков наилучший способ обнаружить недавние изменения в указанном файле?

1 Ответ

0 голосов
/ 04 января 2012

Вам нужно будет пройти родительские коммиты.Коммиты слияния имеют 2 или более родителей.В конце концов вы получаете общий коммит, который является ветвью.Таким образом, если ваша функция рекурсивно обходит каждого родителя, вам нужно вернуть в качестве возвращаемого значения уже проверенные коммиты, чтобы вы не проходили те же коммиты снова.В качестве альтернативы, если изменение найдено, вы можете вернуть фиксацию, в которой находится изменение, и короткое замыкание.

...