예쁜 자식 분기 그래프


1385

나는 일부 책과 기사에 git 브랜치 및 커밋의 그래프가 정말 아름답습니다. git history의 고품질 인쇄 가능 이미지를 만들려면 어떻게해야합니까?


4
graphiz 그래프를 만들기 위해 파이썬 스크립트를 만들었습니다! 구경하다. github.com/chode/git-graph
Stephan Bechter

4
고품질로 인쇄 가능하게하려면 내 도구 ( bit-booster.com/graph.html )가 "git log"를 SVG로 변환합니다. 자세한 내용은 내 답변을 참조하십시오 .
G. Sylvie Davies

2
자신의 자식 이력을 시각화하는 도구를 찾고 있습니까? 또는 예쁜 "깃 가지"를 그리는 방법이있는 차트 도구를 찾으십니까?
Uri Abramson


5
태그 지정 비순환 그래프는이 질문과 관련이 없기 때문에 삭제했습니다.
Maksim Dmitriev

답변:


1843

업데이트 :이 답변은 가치보다 훨씬 더 주목을 받았습니다. 그래프가 멋져 보이고 Illustrator에서 출판물로 가져갈 수 있기 때문에 원래 게시되었으며 더 나은 솔루션은 없었습니다. 그러나 fracz , Jubobs 또는 Harry Lee 와 같은이 Q에 대한 훨씬 더 적용 가능한 답변이 있습니다 ! 그것들을 공감 해주세요 !!

업데이트 2 : 나는 git question 의 시각화 분기 토폴로지 에이 답변의 개선 된 버전을 게시했습니다 . 이 버전에는 작성자 및 커미터 정보를 모두 표시하는가 포함되어 lg3있으므로 실제로 확인해야합니다. 이 답변을 역사적 (& rep, 나는 인정할 것입니다) 이유로 남겨 두지 만, 나는 그것을 삭제하려고 정말로 유혹하고 있습니다.

내 2 ¢ : ~/.gitconfig파일에 일반적으로 두 개의 별칭이 있습니다.

[alias]
lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all
lg = !"git lg1"

git lg/ git lg1다음과 같습니다 :
자식 lg1

git lg2모양이 맘에 :
자식 lg2


35
그래 보통 및 밝은 / 굵은 색은 다음과 같습니다 : 검정 #202020/ #555555, 빨강 : #5d1a14/ #da4939, 녹색 : #424e24/ #a5c261, 노랑 : #6f5028/ #ffc66d, 파랑 : #263e4e/ #6d9cbe, 자홍색 : #3e1f50/ #a256c7, 청록색 : #234e3f/ #62c1a1, 흰색 : #979797/ #ffffff.
Slipp D. Thompson

3
@Turbo : 저의 경우 터미널 앱 (Terminal.app)의 프로필 설정에서 색상을 변경할 수 있습니다. 사용중인 터미널 앱은 주어진 ANSI 색상에 대해 표시되는 색상 변경을 지원하거나 지원하지 않을 수 있습니다. 또한, 대시 (정확하게 대시)는 option-shift- [하이픈-마이너스 키]로 작성되었습니다. 나는 현재의 모든 플랫폼이 유니 코드로 최신 상태라고 잘못 생각했다고 가정합니다.
슬립 D. 톰슨

3
당신 --date=relative--abbrev-commit당신이 명시 적으로 사용하기 때문에 중복 %cr%h각각.
graywh

6
더 좋은 색상을 얻으려면 %C(auto)수정자를 참조 이름 ( %d)에 추가합니다 . 참조 stackoverflow.com/questions/5889878/color-in-git-log/...
조세프 Eisl

2
좋은 대답입니다. 나는 명령이 더와 --oneline --decorate의 출력처럼 보이도록 수정 한lg = log --graph --abbrev-commit --decorate --format=format:'%C(yellow)%h%C(reset)%C(auto)%d%C(reset) %C(normal)%s%C(reset) %C(dim white)%an%C(reset) %C(dim blue)(%ar)%C (reset)' --all
크레이그 P. Motlin

1196

여기에 많은 답변이 훌륭하지만 별명이나 추가 항목을 설정하지 않고도 포인트 답변에 간단한 한 줄을 원한다면 다음과 같습니다.

git log --all --decorate --oneline --graph

모든 사람이 항상 일을하는 git log것은 아니지만 필요할 때만 다음을 기억하십시오.

" "= 자식 로그 - LL - D ecorate - O neline - g 라프

여기에 이미지 설명을 입력하십시오


252
git config --global alias.adog "log --all --decorate --oneline --graph"
fracz

4
나는 --all오랫동안 울고 싶었다. (T_T) 감사합니다!
Felipe Gerard

2
--oneline이 망할 놈의 1.6.3에 도입되었다 : github.com/git/git/blob/... --pretty = oneline 1.6.3 전에 망할 놈의 버전과 함께 작동합니다
팻 마이런

13
SO에 대한 최고의 답변. 마음을 밝게 해주셔서 감사합니다.
Tobias Feil 2013

4
기본적으로 "--decorate"가 포함되어 있다고 생각합니다. 그러나 나는 어쨌든이 약어를 기억할 것입니다!
JosiahYoder-deactive 제외.

378

텍스트 출력의 경우 다음을 시도해보십시오.

git log --graph --abbrev-commit --decorate --date=relative --all

또는:

git log --graph --oneline --decorate --all

또는 : 다음 은 DAG 그래프를 그리기위한 graphviz 별칭입니다.

나는 개인적으로 사용 gitx, gitk --allgitnub.


14
내가 추가 --abbrev-commit --decorate하고 완벽합니다!
비대칭

6
--abbrev-commit은 --oneline, no?
dwineman

4
@dwineman 예 당신이 --abbrev-commit사용한다면 필요하지 않습니다--oneline
Thomas

2
두 번째 줄 git log --graph --oneline --decorate --date=relative --all에서 --date논쟁은 쓸모없는 것 같습니다 . 로그에 날짜가 표시되지 않습니다.
Lerner Zhang

--oneline을 지정하면 날짜가 표시되지 않습니다
martinkunev

253

Gitgraph.js 는 저장소없이 예쁜 자식 분기를 그릴 수 있습니다. 브랜치를 구성하고 브라우저에서 커밋하고 렌더링하는 Javascript 코드를 작성하십시오.

var gitGraph = new GitGraph({
   template: "blackarrow",
   mode: "compact",
   orientation: "horizontal",
   reverseArrow: true
});

var master = gitGraph.branch("master").commit().commit();
var develop = gitGraph.branch("develop").commit();
master.commit();
develop.commit().commit();
develop.merge(master);

Gitgraph.js로 생성 된 샘플 그래프

또는 metro템플릿으로 :

GitGraph.js 메트로 테마

또는 커밋 메시지, 작성자 및 태그가있는 경우 :

커밋 메시지가있는 GitGraph

JSFiddle로 테스트하십시오 .

@bsara에 의해 Git Grapher 로 생성하십시오 .


3
예, 정말 놀랍습니다! 당신이 바로 그것을 테스트 할 수 있도록 바이올린 jsfiddle.net/guan1oz1에 게시했습니다 .
berkus

14
그러나 화살표는 어린이가 아닌 부모를 가리켜 야합니다.
jub0bs

4
@ Jubobs : 좋은 지적입니다. 그것은 Git을 이해하려는 사람들에게 일반적인 장애물입니다. 그들은 상속이 아닌 시간의 순서에 대해 생각합니다. git의 모든 것이 이전의 것과 관련이 있다는 것을 분명히하면 다른 모든 조각이 제자리에 빠지게됩니다.
슬립 D. 톰슨

6
문서에서 화살표 방향과 관련하여 * @param {Boolean} [options.reverseArrow = false]-화살표가 참이면 조상을 가리 키도록합니다.
Scott

2
참고로,이 게시물을보고 gitgraph.js로 게임을 한 후 기본적으로 UI를 gitgraph.js에 넣는 작은 도구를 만들기로 결정했습니다. 아직 끝나지 않았으며 UI는 내가 원하는 곳이 아니지만 기여를 환영합니다! 살펴 : github.com/bsara/git-grapher
bsara

123

상단에 내장 TikZ 및 PGF , gitdags당신은 쉽게 벡터 그래픽 그래프를 커밋 등을 생산 할 수있는 작은 LaTeX의 패키지입니다.

기존 리포지토리의 커밋 그래프의 자동 생성은 목적 이 아닙니다gitdags . 이 그래프는 교육 목적으로사용됩니다 .

ASCII 커밋 그래프의 대안으로 Git 질문에 대한 답변에 대한 그래프를 생성하는 데 종종 사용합니다.

다음은 간단한 리베이스의 효과를 보여주는 이러한 그래프의 예입니다.

여기에 이미지 설명을 입력하십시오

\documentclass{article}

\usepackage{subcaption}
\usepackage{gitdags}

\begin{document}

\begin{figure}
  \begin{subfigure}[b]{\textwidth}
    \centering
    \begin{tikzpicture}
      % Commit DAG
      \gitDAG[grow right sep = 2em]{
        A -- B -- { 
          C,
          D -- E,
        }
      };
      % Tag reference
      \gittag
        [v0p1]       % node name
        {v0.1}       % node text
        {above=of A} % node placement
        {A}          % target
      % Remote branch
      \gitremotebranch
        [origmaster]    % node name
        {origin/master} % node text
        {above=of C}    % node placement
        {C}             % target
      % Branch
      \gitbranch
        {master}     % node name and text 
        {above=of E} % node placement
        {E}          % target
      % HEAD reference
      \gitHEAD
        {above=of master} % node placement
        {master}          % target
    \end{tikzpicture}
    \subcaption{Before\ldots}
  \end{subfigure}

  \begin{subfigure}[b]{\textwidth}
    \centering
    \begin{tikzpicture}
      \gitDAG[grow right sep = 2em]{
        A -- B -- { 
          C -- D' -- E',
          {[nodes=unreachable] D -- E },
        }
      };
      % Tag reference
      \gittag
        [v0p1]       % node name
        {v0.1}       % node text
        {above=of A} % node placement
        {A}          % target
      % Remote branch
      \gitremotebranch
        [origmaster]    % node name
        {origin/master} % node text
        {above=of C}    % node placement
        {C}             % target
      % Branch
      \gitbranch
        {master}      % node name and text 
        {above=of E'} % node placement
        {E'}          % target
      % HEAD reference
      \gitHEAD
        {above=of master} % node placement
        {master}          % target
    \end{tikzpicture}
    \subcaption{\ldots{} and after \texttt{git rebase origin/master}}
  \end{subfigure}
  \caption{Demonstrating a typical \texttt{rebase}}
\end{figure}

\end{document}

1
@ 좋아 보인다! LaTeX를 전혀 설치하지 않은 Windows 사용자를 고려하십시오. 처음부터 그래프를 만드는 방법?
VonC

1
@VonC 확실하지 않지만 LaTeX를 설치하지 않으려는 경우 ShareLatexWriteLaTeX 등에 그래프를 생성 할 수 있습니다 . 더 많은 시간이 있으면 더 자세히 살펴보고 위키를 확장 할 것입니다. 패키지를 홍보 :)
해주십시오

이것은 좋은 물건입니다! 어느 시점에서 튜토리얼을 작성 하겠지만 지금은 문서 클래스 독립형 (자르기 기능 사용)을 사용하여 그래프를 후 처리 latex input.tex하고 dvi를 생성 한 다음 마지막으로 사용할 수 있다고 언급하고 싶었습니다. dvisvgm input.dvi투명성을 가진 SVG를 생성합니다. SVG에서 PNG와 같은 래스터 형식으로 변환하는 것은 충분히 쉽습니다 convert -antialias -density 300 -background none input.svg output.png. 그런데, 이러한 이미지는 보는 놀라운 전체 투명성. 여전히 글꼴 문제를 해결 중입니다 ... i.imgur.com/1Xu2Ry5.png
vmrob

5
내가하는 방법을 단계별로 쓴 그래서이 작업을 얻는 데는 어느 정도의 시간이 걸렸다 우분투 14.04에 처음부터 작업 gitdags 얻을
ChrisFreeman

1
@AndreaPolci 병합의 예는 github.com/Jubobs/gitdags/issues/3 를 참조하십시오 . 설명서가 준비 중 gitdags입니다!
jub0bs

79

Gitg 는 GNOME 용 Gitk 및 GitX의 복제본입니다 (KDE 등에서도 작동).

적극적으로 개발되었습니다 (2012 년 기준). 커밋 (그래프 노드)을 시간순 또는 토폴로지로 정렬하고 선택한 분기로 연결되지 않는 커밋을 숨길 수 있습니다.

큰 리포지토리와 복잡한 종속성 그래프에서 잘 작동합니다.

linux-git 및 linux-2.6 리포지토리를 보여주는 샘플 스크린 샷 :

리눅스-자식

리눅스 -2.6


60

SourceTree는 정말 좋은 것입니다. 그것은 잘 보이고 중간 크기의 이력과 분기 그래프를 인쇄합니다 : (다음은 일부 분기를보기 위해 실험적인 Git 프로젝트에서 수행됩니다). Windows 7 이상 및 Mac OS X 10.6 이상을 지원합니다.

여기에 이미지 설명을 입력하십시오

http://www.sourcetreeapp.com/


App Store에서도 사용할 수 있으므로 업데이트가 자동으로 작동합니다.
WebOrCode

나는 소스 트리의 그래프를 좋아하지만 오히려 명령 줄을 사용하고 소스 트리의 기본값은 항상 내 위치를 엉망으로 만듭니다.
SgtPooki

SourceTree는 Atlassian 계정을 만들거나 Google 계정을 사용하고 Atlassian에 이메일과 프로필 정보를 얻을 수있는 권한을 부여한다고 주장하고 Mac (OS X El Capitan v 10.11.5)에 설치 한 후 'Clonning'단계에서 실패합니다. "치명적 : 경로 '<path skipped>'에 대한 .gitmodules에 하위 모듈 맵핑이 없습니다."및 "템플릿을 찾을 수 없음 / usr / local / git / share / git-core / templates"라는 이상한 경고가 있습니다. 매우 모호한 메시지는 그리 크지 않습니다.
Dmitry Shevkoplyas

3
그런 다음 제거 후 이전에 부여한 Google 보안 권한을 정리해야합니다. myaccount.google.com/security- > 연결된 앱 및 사이트-> 계정에 연결된 앱-> 앱 관리
Dmitry Shevkoplyas

60

방금 HTML / 캔버스를 사용하여 예쁜 자식 커밋 그래프를 생성 할 수있는 도구를 작성했습니다.

그리고 사용하기 쉬운 jQuery 플러그인을 제공하십시오.

[github] https://github.com/tclh123/commits-graph

시사:

시사


이 그래프를 그리기 위해 미리 포맷 된 데이터를 어떻게 얻습니까?
Olga

3
@ Olga 방금 백엔드 코드를 내 리포지토리에 추가합니다. 당신은 볼 수 있습니다 그것을 GitHub의에.
Harry Lee

56

git-forest1 년 이상 사용해온 훌륭한 펄 스크립트이며 더 이상 git log직접 명령을 사용하지 않습니다 .

이것들은 내가이 스크립트에 대해 좋아하는 것들 중 일부입니다 :

  • 유니 코드 문자를 사용하여 그래프에 선을 그려 그래프 선을보다 연속적으로 보여줍니다.
  • --reverse일반 git log명령으로 는 불가능한 그래프 출력과 결합 할 수 있습니다 .
  • git log내부적으로 사용 하여 커밋 목록을 가져 오므로 전달한 모든 옵션 git log도이 스크립트로 전달할 수 있습니다.

git-forest다음과 같이 사용하는 별칭 이 있습니다.

[alias]
tree = "forest --pretty=format:\"%C(red)%h %C(magenta)(%ar) %C(blue)%an %C(reset)%s\" --style=15 --reverse"

다음은 터미널에서 출력되는 모습입니다.

여기에 이미지 설명을 입력하십시오


3
@ void.pointer-git-forest는 perl 스크립트이고 perl 모듈 의존성이 있기 때문에 그렇지 않습니다. 필요한 perl 모듈이 설치된 상태에서 cygwin에서 git을 실행하는 것이 Windows에서 실제로 원하는 경우 얻을 수있는 가장 좋은 대안 일 수 있습니다 :)
Tuxdude

1
와우, 그 레포에는 많은 훌륭한 도구가 있습니다. 감사!
Eldelshell

1
Win $에서 @MinGW (MSYS) 완벽하게 작동합니다. CPANM 설치; 그런 다음 Git.pm; 별명을 작성하면 준비가 된 것입니다.
Sektor

당신이 사용하는 아주 좋은 터미널 에뮬레이터는 무엇입니까? 나는 그래픽 프롬프트 표시기를 좋아한다.
NH.

이 "스크립트"를 설치하는 방법? 우분투에 있습니다.
user13107

50

git 로그를 예쁜 SVG 그래프로 변환하는 웹 도구를 작성했습니다 : Bit-Booster-Offline Commit Graph Drawing Tool

출력을 git log --pretty='%h|%p|%d'도구로 직접 업로드 한 다음 "download graph.svg"링크를 클릭하십시오.

이 도구는 순수한 클라이언트 측이므로 Git 데이터는 내 서버와 공유되지 않습니다. HTML + JS를 로컬에 저장하고 "file : ///"URL을 사용하여 실행할 수도 있습니다. Ubuntu 12.04의 Chrome 48 및 Firefox 43에서 확인되었습니다.

블로그 스팟 블로깅 엔진을 포함한 모든 페이지에 직접 게시 할 수있는 HTML을 생성합니다. 다음 블로그 게시물을 살펴보십시오.

http://bit-booster.blogspot.ca/

다음은이 도구로 생성 된 샘플 HTML 파일의 스크린 샷입니다.

http://bit-booster.com/graph.html (도구)


1
@Jay 그것은 색깔이 그 특정 가지의 들여 쓰기 수준을 반영하는 것으로 보이며, 가지가 다른 열로 이동하여 색이 바뀔 수 있음을 나타냅니다.
Thorbjørn Ravn Andersen

44

관련 질문대한 답변 에서 찾은 Graphviz 스크립트를 기반으로 git 저장소의 요약보기를 만드는 루비 스크립트 를 해킹했습니다 . 그것은 모든 선형 이력을 제거하고 단지 "흥미로운"커밋, 즉 여러 부모, 여러 자녀가 ​​있거나 지점 또는 태그에 의해 지정된 커밋을 보여줍니다. 다음은 jquery에 대해 생성되는 그래프의 스 니펫입니다 .

jquery 샘플

git-big-pictureBranchMaster 는 태그, 분기, 병합 등의 관계 만 표시하여 그래프의 상위 구조 만 표시하려고하는 유사한 도구입니다.

이 질문 에는 더 많은 옵션이 있습니다.


2
나는 이것을 시도했지만 우리의 저장소 (42 가지, 175 태그, 42.000 커밋)의 출력에서 ​​도트가 올바르게 작동하지 못했습니다 ... 너무 나쁘다 ... 정확히 내가 찾던 것입니다!
Xavier Nodet

1
@XavierNodet, repo가 ​​공개적이거나 오류 메시지 등이 있으면 GitHub에 문제를 제기하십시오. 감사!
Matt McHenry

38

세 개의 맞춤 명령 ( git tree, git stree및)을 추가했습니다 git vtree. 순서대로 진행하겠습니다.

[alias]
    tree = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset) %C(auto)%d%C(reset)\n         %C(black)[%cr]%C(reset)  %x09%C(black)%an: %s %C(reset)'

여기에 이미지 설명을 입력하십시오

git streegit vtree나는 한 사용 bash는 형식에 도움이됩니다.

[alias]
    logx = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset)+%C(dim black)(%cr)%C(reset)+%C(auto)%d%C(reset)++\n+++       %C(bold black)%an%C(reset)%C(black): %s%C(reset)'
    stree = !bash -c '"                                                                             \
        while IFS=+ read -r hash time branch message; do                                            \
            timelength=$(echo \"$time\" | sed -r \"s:[^ ][[]([0-9]{1,2}(;[0-9]{1,2})?)?m::g\");     \
            timelength=$(echo \"16+${#time}-${#timelength}\" | bc);                                 \
            printf \"%${timelength}s    %s %s %s\n\" \"$time\" \"$hash\" \"$branch\" \"\";          \
        done < <(git logx && echo);"'

git_stree


[alias]
    logx = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset)+%C(dim black)(%cr)%C(reset)+%C(auto)%d%C(reset)++\n+++       %C(bold black)%an%C(reset)%C(black): %s%C(reset)'
    vtree = !bash -c '"                                                                             \
        while IFS=+ read -r hash time branch message; do                                            \
            timelength=$(echo \"$time\" | sed -r \"s:[^ ][[]([0-9]{1,2}(;[0-9]{1,2})?)?m::g\");     \
            timelength=$(echo \"16+${#time}-${#timelength}\" | bc);                                 \
            printf \"%${timelength}s    %s %s %s\n\" \"$time\" \"$hash\" \"$branch\" \"$message\";  \
        done < <(git logx && echo);"'

git_vtree


편집 : 이것은 자식 버전 1.9a에서 작동합니다. 색상 값 'auto'는 이번 릴리스에서 분명히 데뷔합니다. 분기 이름이 다른 색상을 갖기 때문에 좋은 추가 기능입니다. 이를 통해 예를 들어 로컬 및 원격 분기를 쉽게 구분할 수 있습니다.


fatal: bad color value 'auto' for variable '--pretty format':(
Swivel

이전 버전의 git으로 밝혀졌습니다. Yum은 저장소에 꽤 구식 버전의 Git이 있습니다. 소스 (1.9)에서 컴파일되었으며 훌륭하게 작동합니다. 너무 예뻐요! 감사합니다 @gospes!
Swivel

OS X에서는 sed: illegal option -- r
안됩니다

@ SlippD.Thompson : 나는 리눅스를 사용하고 있습니다 :). -r은 확장 정규식입니다. sed의 OSX 버전에는 분명히 없습니다. 아마도 sed를 업데이트 할 수 있습니다. 그렇지 않으면 확장 정규식없이 sed 명령을 다시 작성할 수 있습니다.
gospes

1
Mac OS X sed의 경우 -r 대신 -E를 사용하십시오.
Baxter Lopez

37

그들이 어떻게 생겼는지에 달려 있습니다. gitx 를 사용하여 다음 과 같은 그림을 만듭니다.

간단한 음모

git log --graph24 웨이 문어 병합 (원래 http://clojure-log.n01se.net/date/2008-12-24.html ) 에서 gitk와 gitk를 비교할 수 있습니다 .

24 웨이 git octopus merge.  원래 URL은 <code> http://lwn.net/images/ns/kernel/gitk-octopus.png </ code>입니다.


49
재밌 네요. "24 방향 문어 병합"이라고 들었습니다.
dty

4
호기심으로, 누군가 GitX (또는 다른 GUI git 툴) 드로잉 루틴을 독립 실행 파일로 추출하려고 시도 했습니까? 내가 실수하지 않으면 Cocoa를 벡터 PDF 파일로 가져 오는 것이 어렵지 않으며 인쇄 품질이 높은 이미지에 대한 OP의 요구를 충족시킬 것입니다.
Slipp D. Thompson

그들이 물건을 되찾기 전에 스카치를 통해 S3에있었습니다. 나는 아직도 그랬 으면 좋겠다. :(
Dustin

clojure-log.n01se.net/date/2008-12-24.html 에서 링크 된 lwn.net/images/ns/kernel/gitk-octopus.png 의 gitk 버전으로 교체했습니다 . @Dustin : 괜찮습니다. 같은 이미지는 아니지만 비슷한 용도로 사용됩니다. 스크린 샷에서, 그것은 리눅스 커널의 일부인 것 같습니다. 그래서 당신은 커밋을 발견하고 동등한 gitx 스크린 샷을 다시 찍을 수 있다고 생각합니다 ....
naught101

34

더 자세한 텍스트 출력은 다음을 시도하십시오.

git log --graph --date-order -C -M --pretty=format:"<%h> %ad [%an] %Cgreen%d%Creset %s" --all --date=short

$ HOME / .gitconfig에 별명을 쓸 수 있습니다

[alias]
    graph = log --graph --date-order -C -M --pretty=format:\"<%h> %ad [%an] %Cgreen%d%Creset %s\" --all --date=short

29

이것은이 문제에 대한 나의 취향입니다.

스크린 샷 :

스크린 샷

용법:

git hist -현재 지점의 역사를 표시

git hist --all -모든 지점 (리모콘 포함)의 그래프 표시

git hist master devel -두 개 이상의 지점 간의 관계를 보여줍니다

git hist --branches -모든 지역 지점 표시

더하다 --topo-order날짜 대신에 토폴로지 적으로 커밋을 정렬하기 위해 (이 별칭의 기본값)

혜택:

  • 평범한 것 같아 --decorate다른 브랜치 이름에 대해 별도의 색상으로
  • 커미터 이메일 추가
  • 커밋 상대 날짜와 절대 날짜를 추가합니다
  • 날짜별로 커밋을 정렬합니다

설정:

git config --global alias.hist "log --graph --date-order --date=short \
--pretty=format:'%C(auto)%h%d %C(reset)%s %C(bold blue)%ce %C(reset)%C(green)%cr (%cd)'"


28

때로는 gitg 사용하지만 항상 명령 줄로 돌아옵니다.

[alias]
    #quick look at all repo
    loggsa = log --color --date-order --graph --oneline --decorate --simplify-by-decoration --all
    #quick look at active branch (or refs pointed)
    loggs  = log --color --date-order --graph --oneline --decorate --simplify-by-decoration
    #extend look at all repo
    logga  = log --color --date-order --graph --oneline --decorate --all
    #extend look at active branch
    logg   = log --color --date-order --graph --oneline --decorate
    #Look with date
    logda  = log --color --date-order --date=local --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ad%Creset %C(auto)%d%Creset %s\" --all
    logd   = log --color --date-order --date=local --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ad%Creset %C(auto)%d%Creset %s\"        
    #Look with relative date
    logdra = log --color --date-order --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ar%Creset %C(auto)%d%Creset %s\" --all
    logdr = log --color --date-order --graph --format=\"%C(auto)%h%Creset %C(blue bold)%ar%Creset %C(auto)%d%Creset %s\"  

    loga   = log --graph --color --decorate --all

    # For repos without subject body commits (vim repo, git-svn clones)
    logt  = log --graph --color --format=\"%C(auto)%h %d %<|(100,trunc) %s\"
    logta  = log --graph --color --format=\"%C(auto)%h %d %<|(100,trunc) %s\" --all        
    logtsa = log --graph --color --format=\"%C(auto)%h %d %<|(100,trunc) %s\" --all --simplify-by-decoration 

보시다시피, 다음을 기준으로 키 입력을 저장하는 별칭이 거의 있습니다.

  • -색상 : 선명한 모습
  • -그래프 : 부모를 시각화
  • -날짜 순서 : repo를 가장 잘 이해할 수있는 모습
  • -장식 : 누가 누구인가
  • --oneline : 커밋에 대해 알아야 할 모든 것
  • -장식 별 단순화 : 첫 번째 모양의 기본 사항 (태그, 관련 병합, 분기)
  • --all :이 옵션을 사용하거나 사용하지 않고 모든 별칭으로 키 입력 저장
  • --date = relative (% ar) : repo의 활동 이해 (때로는 지점이 마스터 근처에서 커밋이 거의 없지만 몇 개월 전에 그로부터 커밋되는 경우가 있음)

최신 버전의 git (1.8.5 이상)에서 장식 자리 표시 자 % d에서 % C (auto)를 활용할 수 있습니다.

여기에서 필요한 것은 gitrevisions를 잘 이해하는 것입니다 . 를 것을 필터링하는 것입니다 (master..develop와 같이 --simplify-merges는 장기 브랜치를 도울 수 있습니다)

명령 행의 힘은 필요에 따라 신속하게 구성하는 것입니다 (리포지토리는 고유 한 키 로그 구성이 아님을 이해하므로 --numstat 또는 --raw 또는 --name-status를 추가해야하는 경우가 있습니다) 여기 git log 별칭은 빠르고 강력하며 (시간이 지남에 따라) 가장 아름다운 그래프를 보여줍니다. 더 많은 결과는 페이저를 통해 기본적으로 출력 결과로 표시되므로 결과 내에서 항상 빠르게 검색 할 수 있습니다. gitgraph 와 같은 프로젝트


아주 좋아요 이것을 내 구성에 추가합니다. 그러나 % Cred % d % Creset을 % C (auto) % d % Creset으로 변경하여 원격 또는 로컬 지점 이름에 다른 색상을 지정할 것을
권장

17

Slipp의 굉장한 대답을 약간 조정 하면 그의 별칭을 사용하여 하나의 지점 만 기록 할 수 있습니다.

[alias]
lgBranch1 = log --graph --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative
lgBranch2 = log --graph --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(bold white)— %an%C(reset)' --abbrev-commit
lg = !"git lg1"

--all당신 을 떠나서 지금 할 수 있습니다

git lgBranch1 <branch name>

또는

git lgBranch1 --all

15

tig https://github.com/jonas/tig , git 용 훨씬 나은 명령 줄 도구를 제안 합니다.

homebrew를 사용하여 macOS에 tig를 설치할 수 있습니다.

$ brew install tig
$ tig

여기에 이미지 설명을 입력하십시오


14

그래프 기록을 보려면 이 git log별칭 이 ~/.gitconfig있습니다.

[alias]
l = log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'

이것을 배치하면 git l다음과 같이 출력됩니다.

여기에 이미지 설명을 입력하십시오

Git 2.12 +에서는 log.graphColors구성 옵션을 사용하여 그래프의 선 색상을 사용자 지정할 수도 있습니다 .

로그 형식 --oneline에 대해서는 저자 이름 (존중 .mailmap)과 상대 저자 날짜 가 추가 된 것과 비슷 합니다 . %C(auto)커밋 해시 등에 기본 색상을 사용하도록 Git에 알려주 는 구문은 Git> = 1.8.3 에서 지원됩니다 .


1
git log --graph --oneline oneliner가 길을 잃지 않도록 단지
tsenapathy

왼쪽에 지점 이름을 넣는 방법이 있습니까?
anaval

12

당신은 시도 했 gitkgitk --all? 그러나 기능으로 인쇄 / 저장 img가 없습니다.


3
gitk는 효율적이지만 매우 아름답지는 않습니다.
Johan

그것이 내장되어 있다는 사실로 인해 즐겁고 번거 로움이 없습니다. 특히 --all모든 가지를 보여줍니다.
BcK


11
git -c core.pager='less -SRF' log --oneline --graph --decorate

이것은 내 터미널 변형이며 여기의 많은 답변과 비슷합니다. less줄 바꿈을 방지하기 위해 전달 된 플래그를 조정하고 싶습니다 .

예제 출력

명령이 약간 성가 시므로 빠른 액세스를 위해 별칭으로 설정했습니다.


8

ditaa 사용해보십시오 . ASCII 다이어그램을 이미지로 변환 할 수 있습니다. Git 브랜치를 염두에두고 설계되지 않았지만 결과에 깊은 인상을 받았습니다.

소스 (txt 파일) :

        +--------+
        | hotfix |
        +---+----+
            |
--*<---*<---*
       ^ 
       |
       \--*<---*
               |
           +---+----+
           | master |
           +--------+

명령:

java -jar ditaa0_9.jar ascii-graph.txt

결과:

여기에 이미지 설명을 입력하십시오

또한 배경색, 파선, 다양한 모양 등을 지원합니다. 예제를 참조하십시오 .


1
비슷한 맥락에서 casual-effects.com/markdeep 은 손으로 배열 한 아스키 아트 다이어그램을 꾸미는 데 매우 강력합니다.
Beni Cherniavsky-Paskin

7

리포지토리가 Gitlab에있는 경우 브라우저에서 SVG로 렌더링되는 그래프 표현을 사용할 수 있습니다.

  • 저장소의 그래프보기로 이동하십시오 (예 : https://gitlab.com/gitlab-org/gitter/webapp/network/develop)

  • 그래프를 맨 아래로 스크롤하십시오 (게으른로드 커밋!)

  • 브라우저의 속성을 사용하여 SVG 요소를 새 파일로 복사하십시오

  • 선택한 렌더러에서 엽니 다 (예 : Inkscape)

여기에 이미지 설명을 입력하십시오


6

직접 도구에 대해서는 모르지만 스크립트를 해킹하여 데이터를 도트 형식으로 내보내고 graphviz로 렌더링 할 수 있습니다.


github.com/gugod/bin/blob/master/git-graphviz을 사용해보십시오 . 나는 회사 환경에 모든 의존성을 가지고 있지 않았기 때문에 그 io명령을 간단한 perl`git log [...]`명령으로 바꾸는 것이 나에게 효과적이었다.
로스 로저스

당신이 맥에있어,이 스크립트를 시도하려는 경우와 펄을 잡을 수 brew install perl dot다음 cpan common::sense IO::all종속성을 얻을 수 있습니다. 그런 다음 출력을 적절한 명령으로 파이프하십시오 git-graphviz | dot -Tpng -o repo.png. 그러나 출력은 git-big-picture와 크게 다르지 않습니다 .
jrhorn424

6

Raphael 웹 그래픽 라이브러리 의 데모 중 하나로 펑키 한 Git 커밋 그래프가 있습니다.

데모는 정적이지만 코드를 가져 와서 정적 데이터를 라이브 데이터 세트로 스왑 할 수 있어야합니다 .Jit은 JSON 형식의 데이터를 커밋한다고 생각합니다.

데모는 여기 있습니다 : http://dmitrybaranovskiy.github.io/raphael/github/impact.html


1
GitHub의 영향 그래프에 사용 된 것과 동일한 그래프 코드입니다. (예 : github.com/DmitryBaranovskiy/raphael/graphs/impact )
Slipp D. Thompson

@ 스벤 : 지적 해 주셔서 감사합니다. 이 답변은 5 세이므로 더 나은 해결책이있을 수 있음을 명심하십시오.하지만 깨진 링크가 수정되었습니다.
Spudley


6

쉘을위한 멋지고 깔끔한 테이블 형 git 그래프 출력

그래프 트리 외에 해시로 평소와 같이

그래프 트리 외에 해시로 평소와 같이

또는 여분의 열에

또는 여분의 열에

편집 : 설명을 읽지 않고 바로 시작 하시겠습니까? 아래 EDIT 5 섹션의 git alias, script 또는 function code snippets를 사용하십시오 .

이 질문에 대한 모든 대답에서 지금까지 쉘에 대한 깨끗한 테이블처럼 보이는 출력을 보여주지 못했습니다. 가장 가까운 곳은 제가 처음 시작한 곳 에서 나온 답 입니다.

내 접근 방식의 핵심은 사용자에게 표시된 트리 문자 만 계산하는 것입니다. 그런 다음 공백으로 개인 길이로 채우십시오.

자식 외에는이 도구가 필요합니다.

  • grep
  • printf
  • sed
  • 순서
  • tr
  • 화장실

대부분의 리눅스 배포판에 내장되어 있습니다.

코드 스 니펫은

while IFS=+ read -r graph hash time branch message;do

  # count needed amount of whitespaces and create them
  whitespaces=$((9-$(sed -nl1000 'l' <<< "$graph" | grep -Eo '\\\\|\||\/|\ |\*|_' | wc -l)))
  whitespaces=$(seq -s' ' $whitespaces|tr -d '[:digit:]')

  # show hashes besides the tree ...
  #graph_all="$graph_all$graph$(printf '%7s' "$hash")$whitespaces \n"

  # ... or in an own column
  graph_all="$graph_all$graph$whitespaces\n"
  hash_all="$hash_all$(printf '%7s' "$hash")  \n"

  # format all other columns
  time_all="$time_all$(printf '%12s' "$time") \n"
  branch_all="$branch_all$(printf '%15s' "$branch")\n"
  message_all="$message_all$message\n"
done < <(git log --all --graph --decorate=short --color --pretty=format:'+%C(bold 214)%<(7,trunc)%h%C(reset)+%C(dim white)%>(12,trunc)%cr%C(reset)+%C(214)%>(15,trunc)%d%C(reset)+%C(white)%s%C(reset)' && echo);

# paste the columns together and show the tablelike output
paste -d' ' <(echo -e "$time_all") <(echo -e "$branch_all") <(echo -e "$graph_all") <(echo -e "$hash_all") <(echo -e "$message_all")

필요한 공백을 계산하려면

  sed -nl500 'l' <<< "$graph"

트리 문자 만 선택하는 것보다 모든 문자 (한 줄에 500까지)를 가져 오려면 : * | / \ _ 및 공백

  grep -Eo '\\\\|\||\/|\ |\*|_'

마지막으로 그것들을 세고 우리가 선택한 길이 값에서 결과를 뺍니다.이 예제에서는 9입니다.

우리가 사용하는 계산 된 양의 공백을 만들기 위해

  seq -s' ' $whitespaces

위치 번호를 잘라

  tr -d '[:digit:]'

그래프 선 끝에 추가하는 것보다 그게 다야!

Git에는 이미 구문으로 출력 지정자의 길이형식화 하는 멋진 옵션 이 있습니다.'%><(amount_of_characters,truncate_option)' 은 왼쪽 '>'또는 오른쪽 '<'측면에서 공백을 추가하고 시작 'ltrunc', 중간 'mtrunc'또는 끝에서 문자를자를 수 있습니다 '트렁크'.

그것은 인 중요한 해당 자식 열의 동일한 길이 값의 printf cmd를 사용하는 것이 상술의.

자신 만의 테이블처럼 보이는 출력물을 원하는대로 스타일링 할 수 있습니다.

특별한:

올바른 길이 값을 얻으려면 다음 스 니펫을 사용할 수 있습니다

while read -r graph;do
    chars=$(sed -nl1000 'l' <<< "$graph" | grep -Eo '\\\\|\||\/|\ |\*|_' | wc -l)
    [[ $chars -gt ${max_chars:-0} ]] && max_chars=$chars
done < <(git log --all --graph --pretty=format:' ')

위의 올바른 길이 값으로 $ max_chars를 사용하십시오.


편집 1 : 밑줄 문자가 자식 트리에서도 사용되며 위의 코드 스 니펫을 적절하게 편집합니다. 다른 문자가 없으면 의견을 남겨주세요.


편집 2 : 분기 및 태그 항목 주위의 대괄호를 제거하려면 EDIT 3과 같이 git 명령에서 "% d"대신 "% D"를 사용하십시오.


편집 3 : "자동"색상 옵션이 분기 및 태그 항목에 가장 선호되는 옵션 일 수 있습니다.

git bracketless 자동 컬러 헤드 및 태그 테이블과 같은 쉘 출력

git 명령 의이 부분을 변경하십시오 (색상 214 )

%C(214)%>(15,trunc)%D%C(reset)

자동

%C(auto)%>(15,trunc)%D%C(reset)


편집 4 : 또는 깜박이는 헤드가있는 멋진 출력 인 해당 부분에 대한 자신의 색상 혼합을 좋아합니까?

자식 트리 멋진 스타일 테이블 같은 출력

헤드, 브랜치 이름 및 태그를 스타일링하려면 먼저 EDIT 3과 같이 git 명령에 "auto"색상 옵션이 필요합니다.

그런 다음이 세 줄을 추가하여 알려진 색상 값을 자체 색상 값으로 바꿀 수 있습니다

 # branch name styling
 branch=${branch//1;32m/38;5;214m}
 # head styling
 branch=${branch//1;36m/3;5;1;38;5;196m}
 # tag styling
 branch=${branch//1;33m/1;38;5;222m}

줄 직전

 branch_all="$branch_all$(printf '%15s' "$branch")\n"

코드 스 니펫에서. 대체 값은 위의 색상을 생성합니다.

예를 들어 head의 대체 값은

3;5;1;38;5;196

여기서 3; 이탤릭체, 5의 약자; 깜박임의 경우 1; 38; 5; 196이며 색상의 경우. 자세한 정보는 여기에서 시작하십시오. 참고 :이 동작은 자주 사용하는 터미널에 따라 다르므로 사용하지 못할 수 있습니다.

그러나 원하는 색상 값을 선택할 수 있습니다.

자식 색상 값과 ANSI에 해당하는 개요

여기에 이미지 설명을 입력하십시오

git color / style 옵션이 있는 목록은 여기에 있습니다 .

정확한 색상을 위해 콘솔에 출력이 필요한 경우 (위의 그림은 스택 오버 플로우에 의해 축소됨)

for ((i=0;i<=255;i++));do
  while IFS='+' read -r tree hash;do 
    echo -e "$(printf '%-10s' "(bold $i)") $hash  $(sed -nl500 'l' <<< "$hash"|grep -Eom 1 '[0-9;]*[0-9]m'|tr -d 'm')"
  done < <(git log --all --graph --decorate=short --color --pretty=format:'+%C(bold '$i')%h%C(reset)'|head -n 1)
done

자식 로그 출력에서 ​​첫 번째 커밋을 사용하는 자식 프로젝트 경로에.


편집 5 : "Andras Deak"멤버가 언급했듯이이 코드를 사용하는 방법에는 몇 가지가 있습니다.

1) 별명으로 :

별칭은 매개 변수를 허용하지 않지만 함수는 허용 하므로 .bashrc에 정의하십시오.

   function git_tably () {
     unset branch_all graph_all hash_all message_all time_all max_chars

     ### add here the same code as under "2) as a shell-script" ###

   }

git 프로젝트 경로 바로 아래 또는 git 프로젝트 경로를 첫 번째 매개 변수로 사용하려는 곳 어디에서나 git_tably (테이블에서 파생 됨) 함수를 호출하십시오.

2) 쉘 스크립트 :

git 프로젝트 디렉토리를 첫 번째 매개 변수로 전달하는 옵션과 함께 사용하거나 비어 있으면 정상 동작과 같이 작업 디렉토리를 가져옵니다. 전체적으로 우리는

# edit your color/style preferences here or use empty values for git auto style
tag_style="1;38;5;222"
head_style="1;3;5;1;38;5;196"
branch_style="38;5;214"

# determine the max character length of your git tree
while IFS=+ read -r graph;do
  chars_count=$(sed -nl1000 'l' <<< "$graph" | grep -Eo '\\\\|\||\/|\ |\*|_' | wc -l)
  [[ $chars_count -gt ${max_chars:-0} ]] && max_chars=$chars_count
done < <(cd "${1:-"$PWD"}" && git log --all --graph --pretty=format:' ')

# create the columns for your prefered tablelike git graph output
while IFS=+ read -r graph hash time branch message;do

  # count needed amount of whitespaces and create them
  whitespaces=$(($max_chars-$(sed -nl1000 'l' <<< "$graph" | grep -Eo '\\\\|\||\/|\ |\*|_' | wc -l)))
  whitespaces=$(seq -s' ' $whitespaces|tr -d '[:digit:]')

  # show hashes besides the tree ...
  #graph_all="$graph_all$graph$(printf '%7s' "$hash")$whitespaces \n"

  # ... or in an own column
  graph_all="$graph_all$graph$whitespaces\n"
  hash_all="$hash_all$(printf '%7s' "$hash")  \n"

  # format all other columns
  time_all="$time_all$(printf '%12s' "$time") \n"
  branch=${branch//1;32m/${branch_style:-1;32}m}
  branch=${branch//1;36m/${head_style:-1;36}m}
  branch=${branch//1;33m/${tag_style:-1;33}m}
  branch_all="$branch_all$(printf '%15s' "$branch")\n"
  message_all="$message_all$message\n"

done < <(cd "${1:-"$PWD"}" && git log --all --graph --decorate=short --color --pretty=format:'+%C(bold 214)%<(7,trunc)%h%C(reset)+%C(dim white)%>(12,trunc)%cr%C(reset)+%C(auto)%>(15,trunc)%D%C(reset)+%C(white)%s%C(reset)' && echo);

# paste the columns together and show the tablelike output
paste -d' ' <(echo -e "$time_all") <(echo -e "$branch_all") <(echo -e "$graph_all") <(echo -e "$hash_all") <(echo -e "$message_all")

3) 자식 별칭으로 :

아마도 가장 편안한 방법은 .gitconfig에 git alias를 추가하는 것입니다.

[color "decorate"]
    HEAD = bold blink italic 196
    branch = 214
    tag = bold 222

[alias]
    count-log = log --all --graph --pretty=format:' '
    tably-log = log --all --graph --decorate=short --color --pretty=format:'+%C(bold 214)%<(7,trunc)%h%C(reset)+%C(dim white)%>(12,trunc)%cr%C(reset)+%C(auto)%>(15,trunc)%D%C(reset)+%C(white)%s%C(reset)'
    tably     = !bash -c '"                                                                                                    \
                  while IFS=+ read -r graph;do                                                                                 \
                    chars_count=$(sed -nl1000 \"l\" <<< \"$graph\" | grep -Eo \"\\\\\\\\\\\\\\\\|\\||\\/|\\ |\\*|_\" | wc -l); \
                    [[ $chars_count -gt ${max_chars:-0} ]] && max_chars=$chars_count;                                          \
                  done < <(git count-log && echo);                                                                             \
                  while IFS=+ read -r graph hash time branch message;do                                                        \
                    chars=$(sed -nl1000 \"l\" <<< \"$graph\" | grep -Eo \"\\\\\\\\\\\\\\\\|\\||\\/|\\ |\\*|_\" | wc -l);       \
                    whitespaces=$(($max_chars-$chars));                                                                        \
                    whitespaces=$(seq -s\" \" $whitespaces|tr -d \"[:digit:]\");                                               \
                    graph_all=\"$graph_all$graph$whitespaces\n\";                                                              \
                    hash_all=\"$hash_all$(printf \"%7s\" \"$hash\")  \n\";                                                     \
                    time_all=\"$time_all$(printf \"%12s\" \"$time\") \n\";                                                     \
                    branch_all=\"$branch_all$(printf \"%15s\" \"$branch\")\n\";                                                \
                    message_all=\"$message_all$message\n\";                                                                    \
                  done < <(git tably-log && echo);                                                                             \
                  paste -d\" \" <(echo -e \"$time_all\") <(echo -e \"$branch_all\") <(echo -e \"$graph_all\")                  \
                                <(echo -e \"$hash_all\") <(echo -e \"$message_all\");                                          \
                '"

git tably모든 프로젝트 경로에서 전화하는 것보다 .

힘내는 머리, 태그를 변경할 수 있도록 강력 ... 직접 등 위에 표시하고 여기에서 가져옵니다 .

또 다른 멋진 옵션 은 가장 선호하는 트리 색상을 선택하는 것입니다

[log]
    graphColors = bold 160, blink 231 bold 239, bold 166, bold black 214, bold green, bold 24, cyan

그것은 미친 듯이 보이지만 항상 테이블 모양의 git log 출력을 제공합니다.

fanciest_git_tree_tablelike_image

너무 깜박임! 가능한 것을 보여주기 위해. 지정된 색상이 너무 적 으면 색상이 반복됩니다.

한 번의 클릭으로 완전한 .gitconfig 참조가 가능합니다.

다시 : 당신의 필요에 따라 자신의 깨끗한 테이블처럼 보이는 출력 스타일을 재미있게 보내십시오.


이 bash 스 니펫이 멋진 git log-like 명령으로 어떻게 변환되는지 설명해야합니다. 링크 된 답변을보고 용도를 ​​알아낼 수 있지만 답변은 독립적이어야합니다.
Andras Deak

git log cmd를 자세하게 설명해야합니까? 아니면 당신이 누락 된 것을 예를 들어 주시겠습니까?
onemorequests

참고 : awesome git log 명령의 출력은이 스 니펫에서 터미널에서 테이블과 같은 출력을 수신하는 데 사용됩니다. 따라서, 당신이 언급 한 것처럼 다른 길;)
onemorequesties

필요할 때마다 20 줄의 bash를 입력하지 않는 것으로 나타났습니다. 이것을 bash 함수 또는 자식 별칭으로 정의하는 것이 좋습니다. 대부분의 독자는 쉽게 사용할 수 있도록 코드를 완성하려고하지 않습니다. 그게 내 뜻이야 경로에 임의의 sh 파일에 코드를 넣으면 나를 무시할 수 있습니다.
Andras Deak

1
내가 참조. 조언 해 주셔서 감사합니다. 답변을 수정하고 이러한 별칭을 추가하겠습니다. 일반적으로 언급 한대로 "long"명령에 파일을 사용합니다. 그러나 여기에 쓰여진 두 가지 방법이 훨씬 편안하다는 데 동의합니다.
onemorequests

5

~ / .oh-my-zsh / plugins / git / git.plugin.zsh의 일부 별칭

gke='\gitk --all $(git log -g --pretty=%h)'
glg='git log --stat'
glgg='git log --graph'
glgga='git log --graph --decorate --all'
glgm='git log --graph --max-count=10'
glgp='git log --stat -p'
glo='git log --oneline --decorate'
glog='git log --oneline --decorate --graph'
gloga='git log --oneline --decorate --graph --all'
glol='git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --abbrev-commit'
glola='git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --abbrev-commit --all'

4

OSX 사용자의 경우 @gospes 예제를 가져 와서 gsed ( gnu-sedhomebrew를 통해 설치)에 맞게 약간 수정 하고 색상을 조정했습니다 (검은 색 배경으로 작동하도록 원래 예제가 어떻게 작동하는지 확실하지 않음) 예를 들어 검정색 배경의 터미널에 검은 색 텍스트를 지정하므로).

[alias]
    # tree, vtree, stree support
    logx = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset)+%C(bold black)(%cr)%C(reset)+%C(auto)%d%C(reset)++\n+++       %C(bold black)%an%C(reset)%C(bold black): %s%C(reset)'
    tree = log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset) %C(auto)%d%C(reset)\n         %C(bold black)[%cr]%C(reset)  %x09%C(bold black)%an: %s %C(reset)'
    stree = !bash -c '" \
    while IFS=+ read -r hash time branch message; do \
        timelength=$(echo \"$time\" | gsed -r \"s:[^ ][[]([0-9]{1,2}(;[0-9]{1,2})?)?m::g\"); \
        timelength=$(echo \"16+${#time}-${#timelength}\" | bc); \
        printf \"%${timelength}s    %s %s %s\n\" \"$time\" \"$hash\" \"$branch\" \"\"; \
    done < <(git logx && echo);"' | less -r
    vtree = !bash -c '" \
    while IFS=+ read -r hash time branch message; do \
      timelength=$(echo \"$time\" | gsed -r \"s:[^ ][[]([0-9]{1,2}(;[0-9]{1,2})?)?m::g\"); \
      timelength=$(echo \"16+${#time}-${#timelength}\" | bc); \
      printf \"%${timelength}s    %s %s %s\n\" \"$time\" \"$hash\" \"$branch\" \"$message\"; \
    done < <(git logx && echo);"' | less -r

OSX의 핵심은 먼저 gnu sed (-r 옵션이 있음)를 설치하는 것입니다. homebrew를 사용하면 시스템 설치 sed를 덮어 쓰지 않고 대신 "gsed"로 gnu sed를 설치합니다. OSX가 작동하지 않는다고 위에서 언급 한 @ SlippD.Thompson이 도움이되기를 바랍니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.