2017-02-15 5 views
1

diffstat 형식의 파일 blob (참고 : 이 아닌은 SHA1)을 SHA1로 가져 오는 방법이 있습니까?git show (diffstat)에서 파일 blob SHA1을 얻으려면 어떻게해야합니까?

내가하고 싶은 것은 git show --stat ${commit}과 같은 일을하지만 파일 이름과 그 커밋에 대해 추가/제거 된 줄 수를 표시하는 대신 해당 BLOB의 SHA1을 볼 수 있기를 바랍니다 파일의 최종 내용

커밋 세트에 의해 변경된 파일의 BLOB SHA1을 누적시키려는 커다란 스크립트의 컨텍스트에서 이것을 실제로 찾고 있습니다. 따라서 쉽게 구문 분석 할 수있는 "plumbing"유형 명령 이상적 일 것입니다. "정상"및 병합 커밋 ("HEAD ^"과 같은 비교 참조가 필요하지 않음)이 필요하지 않은 명령을 사용하고 싶습니다.

답변

3

git diff-tree이 필요합니다. diff-format 페이지가 나타내는 내용에도 불구하고 diff-tree은 단일 트리 참조 (예 : 커밋 SHA1 또는 분기 이름)를 사용할 수 있으며 병합 커밋 인 경우에도 커밋의 모든 부모에 대한 비교를 수행합니다.

diff-format 페이지 출력 형식을 설명합니다. (그냥 같은 자식 쇼는 않습니다)하지만, 여기에 몇 가지 예입니다 : 우리가 --no-commit-id와 커밋 SHA1의 인쇄를 억제하고, 보는 -r를 지정한 다음

$ git diff-tree --no-commit-id -r -c HEAD 
:100644 100644 163e1f7815c5ef7e371bfebd549d6e990a3faa6b 991c88a41f56a0b39dfee85046e6954731294ddb M Home.md 
:100644 100644 d40bd92ec40e486fa4fdda3e8e2740bfb0138a99 160d2d470b9226ed58697b96523a5579ac0dbb9e M building/Tests.md 

상위 디렉토리를 보는 대신 서브 디렉토리 (하위 트리)에 파일을 저장하십시오. 콜론으로 시작하는 출력 행은이 커밋에서 변경된 파일입니다. 두 개의 SHA1은 상위 커밋의 블롭 SHA1과 참조 된 커밋의 파일 내용에 해당하는 BLOB의 최종 SHA1입니다.

-c은 병합의 경우 "결합 된"diff에 필요합니다. diff-tree는 어느 부모와도 다른 파일에 대한 항목을 만들도록 지시합니다. (즉에만 병합 과정 자체에서 변경 한 파일입니다.)

$ git diff-tree --no-commit-id -r -c 2a6c4947dd0dcee69e7aca1c3a0ef92d7e5260f9 # merge commit 
::000000 100644 100644 0000000000000000000000000000000000000000 53650eaf781e1410d8bd6fa4af29748714b7f1d4 285def5637464597883c3f363d67783176f03c2e AM README.txt 
::100644 100644 100644 e7f117c2b117dc3960250442732f0d6acfc212e6 e84b192b1e394efea15804f8de66fc0c7ee87ca7 5ca0469a65e886e56e5aedeb08359ea1627e28dd MM Home.md 

병합 커밋은 각 부모에 해당하는 이상의 항목이있다. 포맷팅 및 제어 방법에 대한 자세한 내용은 diff-formatdiff-tree 매뉴얼 페이지를 참조하십시오.