git-log의 색상


106

실행 git log --decorate --pretty=oneline하면 출력에 다음과 같은 항목이 있습니다.(HEAD, refs/published/master, master) 에 채색 이 있습니다.

또한 gitconfig에 다음이 있습니다.

[color "branch"]
    current = yellow reverse
    local = yellow
    remote = green

다음과 같은 사용자 지정 형식을 수행 할 때 이러한 색상을 어떻게 복제합니까?

git log --decorate --stat --graph --pretty=format:"%d %Cgreen%h%Creset (%ar - %Cred%an%Creset), %s%n"

답변:


91

자식 1.8.3 (5 월 (24), 2013)로, 당신이 사용할 수있는 %C(auto)장식 %d의 형식 문자열에 git log.

로부터 릴리스 노트 :

 * "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.)

60

git log --decorate기본적으로 넣어 것입니다 :

  • 청록색의 HEAD
  • 붉은 외딴 가지
  • 녹색 태그

그리고 통해 변경할 수 있습니다 color.decorate구성을 .

그러나이 git log --format구체적으로 표시하는 방법은 제공하지 않습니다 HEAD 또는 리모컨 또는 지점 : 세 가지를 통해 표시됩니다 %d가능한 한 색상.


로 업데이트 할 수 있습니다 2013, 아래 언급 에 의해 Elad 샤 하르 (upvoted), 1.8.3 이벤트를 한 번 더 옵션을 이눔 :

git log –format이제 터미널 출력을 %C(auto)위해 %d(장식), %h(짧은 커밋 객체 이름) 등을 해결할 때 Git에게 색상을 사용하도록 지시 하는 토큰을 자랑합니다 .

Atlassian 블로그 게시물 에서는이 기능이 형식 ( git rebase, git count-objects) 및 색상 ( git branch -vv) 에 중점을 둔 다른 여러 기능의 일부라고 설명합니다.

이것은 출력이 터미널 1에 사용되지 않을 때 자동으로 색상을 비활성화하는 auto,reset1.8.2 이전 버전에 추가 되었습니다.

%C(auto,blue)Hello%C(auto,reset)

참고 : git 2.4+ (2015 년 2 분기)는 브랜치 이름 주변의 색상을 더 잘 재설정 할 것입니다.
참조 5ee8758을 투입 하여 (Junio C 하마노 gitster) :

log --decorate: 다음 항목에 "커밋"색상을 누출하지 마십시오.

" git log --decorate"에서 다음과 같은 커밋 헤더를 볼 수 있습니다.

commit ... (HEAD, jc/decorate-leaky-separator-color)

여기서 " commit ... ("는에서 color.diff.commit, " HEAD"에서 color.decorate.head, " ,"에서 color.diff.commit, 분기 이름을 입력 color.decorate.branch한 다음 " )" 을 닫 습니다.color.diff.commit .

HEAD 및 로컬 브랜치 이름을 본문 텍스트와 같은 색으로 칠하고 싶다면 (아마도 청록색과 초록색이 흑백 터미널에서 너무 희미해서 읽을 수 없기 때문일 것입니다), 이렇게 말하고 싶지 않을 것입니다.

[color "decorate"]
    head = black
    branch = black

왜냐하면 white-on-black 터미널에서 동일한 구성을 재사용 할 수 없기 때문입니다. 당신은 순진하게 기대할 것입니다

[color "decorate"]
    head = normal
branch = normal

하지만 안타깝게도 그렇지 않습니다. 장식 요소 사이의 여는 괄호 또는 쉼표와 동일한 색상으로
문자열 " HEAD"및 분기 이름을 그립니다 .
이는 코드가 "접두사"를 고유 한 색상으로 인쇄 한 후 색상 재설정을 잊어 버리기 때문입니다.


git 2.5 (2015 년 2 분기)에서 버그가 수정되었습니다.

참조 429ad20을 투입 하여 Junio C 하마노 ( gitster) 5 월 13 일 2015 년
(에 의해 합병 Junio C 하마노 - gitster-fd70780 커밋 2015 년 5 월 22 일)을

log: 장식 이름을 너무 빨리 줄이지 마십시오.

log --decorate현재 브랜치의 끝에 커밋을 보여주는 " "Git 2.4의 개선 사항 (예 : " HEAD -> master")은 --decorate = full과 함께 작동하지 않았습니다.


망할 놈의 2.9.x + (Q3 2016) 또 다른 버그가 해결됩니다 명예 color=auto를 들어%C(auto)


Git 2.10.2 (2016 년 10 월)는 커밋 82b83da (2016 년 9 월 29 일) 및 René Scharfe (``)의 커밋 c99ad27 (2016 년 9 월 17 일 )로 다른 버그를 수정했습니다 . (Merged by Junio ​​C Hamano -- in commit 76796d4 , 28 Oct 2016)
gitster

pretty: 재설정 추가 방지 %C(auto) 출력이 비어있는 경우

%C(auto)자동 색상이 의도 한대로 표시되도록 색상 및 속성을 재설정하는 이스케이프 시퀀스를 내 보냅니다 .
그만 그 출력 strbuf이 비어있는 경우 , 즉 때%C(auto) 형식 문자열의 시작 부분에 나타날 그러면 재설정 할 필요가없고 출력에 몇 바이트를 저장하기 때문입니다.

pretty: %C(auto)모든 속성을 재설정 하자

색상 및 속성 을 재설정 %C(auto)하여 완전 자동 제어를 활성화합니다. 그렇지 않으면 굵게 또는 반전과 같은 속성이 이전 %C자리 표시 자 에서 여전히 유효 할 수 있습니다 .


3
--decorate 및 --pretty = "... stuff"를 사용할 방법이 없습니까?
NorthIsUp 2011

8
@NorthlsUp : --decorate반면 자신의 구현 및 구성을 갖고있는 것 같아요 --pretty통해 이벤트 같은 정보 %d는 컬러 구성의 같은 세분화 된 수준 가질 수 없습니다 의미로 하나 개의 블록을 --pretty당신이 가지고보다가 --decorate.
VonC

"git log"뒤에 "--decorate"를 추가 할 때 내가 볼 수있는 유일한 차이점은 저장소가 "refs / heads / ..."또는 "refs / remotes ..."로 시작한다는 것입니다. 색상은 어느 쪽이든 나타납니다. 그 원인이 무엇인지 아십니까? 내가 묻는 이유는 내 .gitconfig에 색상 속성이 표시되지 않기 때문입니다. 내 "color.decorate"속성을 어디서 찾을 수 있는지 궁금합니다. 내 .gitconfig 파일에서 볼 수 없습니다.
J Woodchuck

@JWoodchuck Try git config --show-origin -l: 모든 구성 을 볼 있습니다. 그런 다음 "색상"을 grep 할 수 있습니다.
VonC

네, 색상을 구할 때 아무것도 표시되지 않아 설정이 표시되는 위치를 너무 신비롭게 만듭니다.
J Woodchuck

9

괄호로 묶습니다.

%C(...): color specification, as described in color.branch.* config option

그래서 %C(yellow reverse)작동합니다.


1
정답 %d은 아닙니다. 모든 가지가 이렇게 보일 수 있습니다 (HEAD, master).이 경우 머리는 파란색이고 마스터는 녹색이어야합니다 (기본 색상이라고 생각합니다). 여기서 %C(yellow)%d%Creset모두 같은 색상을 만들 것입니다.
NorthIsUp 2011

2
오, 개별 장식을 채색합니다. 불가능하다고 생각합니다. 로그 항목을 렌더링하는 코드는 기본적으로 두 번 구현됩니다.
Josh Lee

1
너무 나쁜이 가능하지 ... 내가 할 싶어요git log --decorate --oneline --date=...
mgalgs

8

config 옵션 log.decorate은 로그의 기본 장식을 활성화 / 비활성화 할 수 있습니다.

git config --global log.decorate full

완료되면 color.decorate.*색상을 가지고 놀 수 있습니다.


3
log.decorate=full참조 이름이 접두사 ( refs/heads/등) 와 함께 인쇄되도록합니다 . log.decorate=short더 유용하다고 생각 합니다.
musiphil 2014

1
매우 유용한 설정, 나 또한 좋아하지만 short이 아닌full
토마스 레베

4

일부는 이것을 사용하기를 원할 수 있습니다. %C(colorname) 이것은 색상 구성을 변경할 필요가 없습니다.

예 : 저자 이름을 노란색으로 채색

--pretty=format:"%C(yellow)%an%Creset"

일반 ANSI 색상은 https://en.wikipedia.org/wiki/ANSI_escape_code에서 작동합니다.

  • 검정
  • 빨간
  • 초록
  • 노랑
  • 푸른
  • 마젠타
  • 청록색
  • 하얀
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.