2016-08-24 6 views
0

내 오픈 소스 프로젝트에 대해 git에 해당하는 항목을 libgit2으로 이식하려고합니다. git 호출
하나는 매우 이상해 : 모든git log complex pretty 형식을 디코드하십시오.

git log --topo-order --no-color --parents --boundary -z --pretty=format:%m%HX%PX%n%cn<%ce>%n%an<%ae>%n%at%n%s%n%b HEAD --all 

첫째, 난 형식 문자열 흥미로운입니다. X의 의미는 H 이후입니까? 공식 사이트에서 X 지정자를 찾을 수 없습니다./ 두 번째 질문 - libgit2이 복잡한 서식을 사용합니까, 아니면 직접 처리해야합니까?

P. 그러나 나는 그것을 할 수 없다고 확신한다. :)

+2

는'X'는 여기에 부모가 ID를 커밋 래핑하고, 커밋 ID에서 그것을 구분하는 구분자로 보인다. – ElpieKay

답변

2

X은 형식 지정자가 아닙니다.

--pretty=format: 또는 --pretty=tformat:에 대한 인수는 (대부분의 사용자가 tformat 필요하지만,이 코드는 각 커밋 후 NUL 문자를 추가 -z을 사용) 모두 지침을 %m%H단순히 전사되는 문자 텍스트 같은

을 포함 : %x25 해석 동안 여기

$ git log -n 3 --pretty=tformat:hello%x25world 
hello%world 
hello%world 
hello%world 

helloworld 문자열은 단순히 통해 복사되었습니다. "16 진 코드 25 문자 인쇄"는 백분율로 부호 %이고 -n 3git log에게 3 회의 커밋을 기록한 후 중지하겠다고 했으므로 hello%world의 사본이 3 개 있습니다.

문자 적 ​​X 작품 개행 문자가-각각의 커밋 확신 할 수이 출력을 읽고 어떤 것이 시작 %m 인쇄 X를 포함하지 않는 X, %H%P 인쇄 해시 아닌 하나 개의 문자 및 %n 인쇄 때문에 마커 문자 X, 커밋 해시, 또 다른 X 및 각각의 부모 해시에 공백이있는 새 줄.

%s%n%b 시퀀스는 완전히 필요하지 않습니다 (대신 간단히 %B을 사용할 수 있음). 나는 이것이 "비정상적으로 형식화 된"커밋 (단일 제목 줄이 아닌 줄 바꿈, 커밋 본문 뒤의 커밋) 방식을 조정하는지 여부는 확실하지 않습니다. 아마도 그럴 것이다.

는 (나는 libgit2의 아무것도 몰라.)

+0

git 명령에 대한 자세한 설명을 주셔서 감사합니다. libgit2에 대해서 - 나는이 도서관의 저자에게 직접 물어보아야 만한다. – eraxillan