2011-04-12 4 views
5

저는 많은 주제 분기를 병합 한 결과를 분석하고 자세한 충돌 보고서를 작성하는 도구를 만들고 있습니다. 다른 경우에 전체 경로를git에서 전체 파일 경로 얻기 merge

Auto-merging thefullpath/to/myfile/default.jsp 

I를 줄 때 나는 그런

Merge made by recursive. 
.../somepath/anotherpath/toolong/default.css  | 2 +- 

로 병합 명령의 출력에서 ​​잘린 파일 이름을 생성합니다 때로는 힘내에서 약간의 문제로 실행했습니다 병합간에 파일을 일치시키기 위해 항상 전체 경로를 사용할 수 있습니다.

+1

'git diff --numstat branchA branchB'는 기계 소비를 위해 사용될 수있다. – knittl

답변

2

귀하의 최종 목표에 다소 혼란 스럽지만 어쨌든 대답을 드릴 수 있다고 생각합니다.

병합이 충돌로 이어질 때, 즉 모든 것이 아직 커밋되지 않은 상태에서 양호한 변경 사항을보고 싶다면 git status --porcelain을 사용해야합니다. 모든 파일과 상태 (병합 충돌 상태 포함)에 대한 기계 가독성 좋은 목록을 제공하며 잘 문서화 된 in the manpage입니다. 사용 사례에 따라 진행 (커밋)하기 전에 병합 결과를 검사 할 수 있도록 git merge --no-commit을 사용할 수도 있습니다. git diff HEAD --numstat을 사용하여 파일별로 추가/제거 된 줄 수를 기계가 읽을 수있는 보고서를 얻을 수도 있습니다.

당신이 사후 병합을 검사 할 경우, 그것은 git diff-tree를위한 아주 좋은 사용 사례의 다음 -c는 DIFF 병합에 알려줍니다

git diff-tree -c --numstat <commit> 

가 부모에 대해 커밋하고 --numstat 당신에게 좋은 기계를 가져옵니다 이전과 같이 읽을 수있는 출력.

마지막으로 매우 자세한 충돌 보고서를 생성하려는 경우 --numstat 대신 -p을 전달하여 완전한 패치 출력을 제공 할 수 있습니다. 이것은 gitk에서 볼 수있는 종류의 패치입니다. 각 행의 시작 부분에 두 개의 문자가 있으며, 각 행에 대해 행이 추가/제거되었는지 여부를 나타냅니다. 한 부모로부터 오는 변경 사항에는 단 하나의 기호 (예 : '+ ', ' -', 공백을 표시하기 위해 따옴표가 추가됨)가 있으며 충돌 해결의 일부로 수동으로 변경된 줄에는 두 개 (--, ++)가 표시됩니다. 당신이 정말로해야만한다면 당신은 그것을 스스로 파싱 할 수 있습니다. (불행하게도 나는 병합 커밋을 위해서 스테로이드에 --numstat 같은 것이 없다고 생각한다.)