2012-01-04 3 views
1

git 핵심 아키텍처를 배우면서 지정된 파일의 최근 변경 사항을 감지하는 알고리즘을 알고 싶습니다.git 아키텍처에서 지정된 파일의 최근 변경 사항을 찾는 방법

git log -n1 -- <file>은 지정된 파일에서 최근 변경 사항이있는 커밋을 표시합니다. 최신 변경 사항을 아는 것은 매우 간단합니다. 나는 자연스럽게 그것을 스스로 구현하고 싶다.

i는 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 

지정한 파일의 최근 변경 사항을 감지하는 가장 좋은 방법은 무엇입니까?

+0

이 ** [질문] (http://stackoverflow.com/questions/8481914/git-log-1-fullpath-myfile-with-libgit2/8484744#8484744) ** 동일한 제목을 다루고 있습니다. – nulltoken

+0

통고 주셔서 고마워, 나는 거기로 이동할 것이다. 이 문제는 간단하지만 병합 커밋이 나타날 때 약간 어려워 보입니다. – chobie

답변

0

부모가 걸어 가야합니다. 병합 커밋에는 2 명 이상의 부모가 있습니다. 결국 분기점 인 공통 커밋이 끝납니다. 따라서 함수가 각 부모를 재귀 적으로 호출하면 이미 커밋 된 값을 다시 반환하여 동일한 커밋을 다시 트래버스하지 않아야합니다. 또는 변경 사항이 발견되면 변경 사항을 수용하고 단락 아웃하는 커밋을 반환 할 수 있습니다.

+0

간단하게 소개해 주셔서 감사합니다. 내가 지정한 파일에서 변경을 발견했을 때 각각의 커밋을 걷기 위해 멈췄다. 음, 공통 커밋을 찾고 각 커밋이 커밋 된 시간을 확인합니다. – chobie