지난 번 포스트에서 git log --graph가 한글로 표시될 때 줄바꿈 문제를 언급했었다.



이 때 사용한 git log 옵션은 다음과 같은데,


git log --graph --oneline --abbrev-commit --decorate [--all]


이번에는 --decorate 옵션 사용시 tag가 너무 많아서 보기가 힘들 때의 정리 tip이다.


우선 LESS 환경변수에 -S 옵션을 추가한다.

-S 옵션은 --chop-long-lines 옵션으로 긴 줄을 접어서 아래로 내리는(fold) 대신 잘라(chop)버린다.


-S option, see also the man-page.

    http://superuser.com/questions/272818/how-to-turn-off-word-wrap-in-less 참조


그러면 길게 한 줄로 내용이 표시되는데 decorate 의 표시 순서가 {hash, refs, log} 순이어서 log가 나오지 않는 문제가 발생한다.


* ca5f427 (tag: merge_18500, tag: VA-v2.0.0.0.8-rc3, tag: VA-v2.0.0.0.8-rc2, tag: VA-v2.0.0.0.8-rc1, tag: MII-v2.0.0.0.7-rc3.DB99  <-- log가 없음


이제 --decorate 대신 --format 옵션을 사용하여 decorate 옵션에 의해 생기는 화면과 유사하게 만들어 줄 차례다.


format 옵션에서 사용되는 변수 중 deocrate에 유사한 포멧은 "%h %d %s" 이다.

이 중 %d가 refs를 담당하고 있으니, 순서를 바꾸어 "%h %s %d"로 하면 log도 보이고 tag도 일부 보이는 상태가 된다.


* ca5f427 R #19294 kernel header include 경로 수정  (tag: merge_18500, tag: VA-v2.0.0.0.8-rc3, tag: VA-v2.0.0.0.8-rc2, tag: VA-v2   <-- log가 등장, tag는 여전히 일부만 출력


그냥 그대로 두면, 색깔이 너무 칙칙하다. 색은 format 옵션에 %C(색)으로 주고 %Creset 으로 취소 가능한데, docerate와 같이 tag, branch, remote 별로 다른 색을 주려면 git 버전이 1.8.3 이상이어야 한다.

As of git 1.8.3 (May 24, 2013), you can use %C(auto) to decorate %d in the format string of git log.

From the release notes:

 * "git log --format" specifier learned %C(auto) token that tells Git
   to use color when interpolating %d (decoration), %h (short commit
   object name), etc. for terminal output.)

    http://stackoverflow.com/questions/12694510/how-to-emulate-git-log-decorates-different-colors-per-branch-type 참고

    http://stackoverflow.com/a/16844346/55948 참고


따라서 다음과 같이,


"%C(auto)%h%Creset %C(auto)%s%Creset %C(auto)%d%Creset"


옵션을 주면 색색의 옷을 입은 log를 볼 수 있다.


완성된 git log 는 다음과 같다.


git log --graph --format="%C(auto)%h%Creset %C(auto)%s%Creset %C(auto)%d%Creset" [--all]


@ 주의할 점


 - refs는 tag, remote_branch, local_branch 순으로 표시되므로 tag가 많이 있으면 branch  정보가 가려져서 보이지 않는다. 기존 --deocrate 옵션과 병행하여 branch 정보를 빼 먹지 말자.

 - format 옵션에서 이미 oneline 옵션과 abbrev-commit 옵션을 override 하므로 graph 옵션만 넣으면 된다.

 - git 버전이 1.8.3 이하인 경우 %C(auto)가 먹지 않으므로 (auto) 자리에 직접 색을 넣든지 색을 빼든지 하도록 한다.



+ Recent posts