Development Tip

Git에서 분기 토폴로지 시각화

yourdevel 2020. 9. 28. 10:21
반응형

Git에서 분기 토폴로지 시각화


나는 내 컴퓨터에서 고립 된 상태로 자식을 가지고 놀고 있는데, 내 모든 브랜치와 커밋에 대한 정신적 모델을 유지하는 것이 어렵다는 것을 알았다. 내가 git log있는 곳에서 커밋 이력을보기 위해 a 수행 할 수 있다는 것을 알고 있지만, 지점을 설명하기 위해 모든 곳에서 사용되는 것처럼 보이는 이러한 ascii 맵과 같은 전체 지점 지형도를 볼 수있는 방법이 있습니까?

      .-A---M---N---O---P
     /     /   /   /   /
    I     B   C   D   E
     \   /   /   /   /
      `-------------'

누군가가 와서 내 저장소를 선택하려고 시도하는 것이 정확히 무슨 일이 일어나고 있는지 알아내는 데 어려움을 겪을 것 같습니다.

AccuRev의 스트림 브라우저에 영향을받은 것 같습니다 .


git log --graph또는 gitk. (둘 다 수락 --all하면 현재 분기가 아닌 모든 분기가 표시됩니다.)

편집 : 브랜치 이름 및 압축보기의 경우 다음을 시도하십시오.git log --graph --decorate --oneline


나는 보통 사용

git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"

색상 포함 (쉘이 Bash 인 경우) :

git log --graph --full-history --all --color \
        --pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"

이렇게하면 다음과 같은 텍스트 기반 표현이 인쇄됩니다.

* 040cc7c       (HEAD, master) Mannual is NOT built by default
* a29ceb7       Removed offensive binary file that was compiled on my machine and was hence incompatible with other machines.
| * 901c7dd     (cvc3) cvc3 now configured before building
| * d9e8b5e     More sane Yices SMT solver caller
| | * 5b98a10   (nullvars) All uninitialized variables get zero inits
| |/
| * 1cad874     CFLAGS for cvc3 to work succesfully
| *   1579581   Merge branch 'llvm-inv' into cvc3
| |\
| | * a9a246b   nostaticalias option
| | * 73b91cc   Comment about aliases.
| | * 001b20a   Prints number of iteration and node.
| |/
|/|
| * 39d2638     Included header files to cvc3 sources
| * 266023b     Added cvc3 to blast infrastructure.
| * ac9eb10     Initial sources of cvc3-1.5
|/
* d642f88       Option -aliasstat, by default stats are suppressed

(을 사용할 수는 git log --format=oneline있지만 커밋 메시지를 숫자에 묶어 IMHO가 덜 예쁘게 보입니다).

이 명령에 대한 바로 가기를 만들려면 ~/.gitconfig파일 을 편집 할 수 있습니다.

[alias]
  gr = log --graph --full-history --all --color --pretty=tformat:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s%x20%x1b[33m(%an)%x1b[0m"

그러나 Sodel the Vociferous가 주석에서 언급 했듯이 이러한 긴 형식 지정 명령은 기억하기 어렵습니다. 일반적으로 ~/.gitconfig파일에 넣을 수 있으므로 문제가되지 않습니다 . 그러나 구성 파일을 수정할 수없는 원격 시스템에 로그인해야하는 경우가 있으면 더 간단하지만 더 빠르게 버전을 입력 할 수 있습니다.

git log --graph --oneline

일반적으로 파일에 던지는 3 개의 별칭 (빠른 사용을위한 4 개의 별칭 별칭)~/.gitconfig있습니다.

[alias]
    lg = !"git lg1"
    lg1 = !"git lg1-specific --all"
    lg2 = !"git lg2-specific --all"
    lg3 = !"git lg3-specific --all"

    lg1-specific = 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(auto)%d%C(reset)'
    lg2-specific = 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(auto)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
    lg3-specific = 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 cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)%n''          %C(white)%s%C(reset)%n''          %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)'

git lg/ git lg1다음과 같이 보입니다.

자식 lg1

git lg2 다음과 같이 보입니다.

자식 lg2

git lg3모양이 맘에 :

자식 lg3

참고 : 답변 은 여기에있는 것보다 훨씬 더 적절하기 때문에 stackoverflow.com/questions/1057564/pretty-git-branch-graphs 의 답변에서 복사되고 개선되었습니다 . 역사적 이유로 다른 질문에 사본을 남겼습니다. 지금은 닫혔으며 답변은 다른 답변에서 참조됩니다.


이러한 레시피 (git log 또는 gitk 기반)에 추가 --simplify-by-decoration하여 히스토리의 흥미롭지 않은 선형 부분을 축소 할 수 있습니다 . 이렇게하면 훨씬 더 많은 토폴로지를 한 번에 볼 수 있습니다. 이제이 옵션 없이는 이해할 수없는 큰 역사를 이해할 수 있습니다!

이 글이 잘 알려지지 않은 것 같아서 게시 할 필요성을 느꼈습니다. 히스토리 시각화에 대한 대부분의 Stack Overflow 질문에는 나타나지 않으며, 내가 그것을 원한다는 것을 알고 나서도 찾기 위해 꽤 많은 검색이 필요했습니다! 드디어이 데비안 버그 리포트 에서 찾았습니다 . Stack Overflow에 대한 첫 번째 언급은 Antoine Pelisse의 답변 인 것 같습니다 .


Gitk 읽을 때 가끔 고통 스럽습니다.

여기에 이미지 설명 입력

GitVersionTree 를 작성 하도록 동기를 부여하십시오 .

여기에 이미지 설명 입력


"내 시간의 99.999 %는 히스토리를보고 git lg0.001 %는 git log"

유용 할 수있는 2 개의 로그 별칭을 공유하고 싶습니다. (.gitconfig에서 구성)

[Alias]
     lg = log --graph --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
     hist = log --graph --full-history --all --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
  • git lg 현재 지점 내역을 볼 수 있습니다.
  • git hist 전체 지점 역사를 볼 수 있습니다.

을 (를 git log) 사용하여 다음을 수행하는 것이 좋습니다.

 git log --graph --oneline --branches

(또한 --all과 함께 사용하면 원격 분기도 볼 수 있습니다.)

최신 Git 릴리스에서 작동 : 1.6.3 이후 도입 ( 2009 년 5 월 7 일 목요일 )

  • --pretty=<style>명령의 로그 계열에 대한 " "옵션의 철자가 " --format=<style>" 로 표시 될 수 있습니다 .
    또한 --format=%formatstring대한 간략하다 --pretty=tformat:%formatstring.

  • " --oneline"은 " "의 동의어입니다 --pretty=oneline --abbrev-commit.

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix
| | * 8183707 a first bug10 fix
| |/
| * e727105 a second evol for 2.0
| * 473d44e a main evol
|/
* b68c1f5 first evol, for making 1.0

로그 표시 범위 (커밋 수)를 제한 할 수도 있습니다.

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all -5
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix

(마지막 5 개 커밋 만 표시)


현재 선택한 솔루션에 대해 내가 싫어하는 점은 다음과 같습니다.

 git log --graph

너무 많은 정보를 표시했습니다 (빠른 요약 만보고 싶을 때).

PS D:\git\tests\finalRepo> git log --graph
* commit 4919b681db93df82ead7ba6190eca6a49a9d82e7
| Author: VonC <vonc@laposte.net>
| Date:   Sat Nov 14 13:42:20 2009 +0100
|
|     a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <vonc@laposte.net>
| Date:   Sat Nov 14 13:41:50 2009 +0100
|
|     a first bug10 fix
|

gitk 훌륭하지만 다른 창을 위해 쉘 세션을 나가도록 강제하는 반면 마지막 n 커밋을 빠르게 표시하는 것으로 충분합니다.


명쾌한 방식으로 토폴로지를 보여주는 크로스 플랫폼 GUI 인 Gitkraken을 살펴보십시오 .

토폴로지

다음 은 몇 가지 고급 기능에 대한 빠른 비디오 자습서 입니다.


Gitg 는 OS X 용 Gitx와 유사한 Linux 용 훌륭한 도구입니다. 저장소의 트리 구조 내부 어딘가에서 명령 줄에서 'gitg'를 실행하면됩니다 (gitx와 동일).


"git-big-picture"가 매우 유용하다는 것을 알았습니다 : https://github.com/esc/git-big-picture

gitk와 친구들이 생성하는 다소 선형적인 "1 차원"보기 대신 도트 / 그래프 시각화를 사용하여 예쁜 2D 그래프를 만듭니다. -i 옵션을 사용하면 분기점과 병합 커밋을 표시하지만 그 사이에있는 모든 것은 제외합니다.


좋은 웹 기반 도구는 ungit 입니다. node.js 및 git이 지원하는 모든 플랫폼에서 실행됩니다. 읽는 것보다 쉬운 일을 찾는 사람들을 위해 어떻게 작동하는지 비디오 가 있습니다 .

여기에 이미지 설명 입력


BranchMaster를 살펴보십시오 .

나는 그것들 사이의 모든 커밋을 한 줄로 축소하여 복잡한 분기 구조를 시각화하기 위해 작성했습니다. 숫자는 커밋 수를 나타냅니다.

여기에 이미지 설명 입력


Giggle 은 멋진 그래프를 그립니다.


Tortoise Git 에는 "Revision Graph"라는 도구가 있습니다. Windows를 사용하는 경우 repo-> Tortoise Git-> Revision Graph를 마우스 오른쪽 버튼으로 클릭하면됩니다.


아무도 언급하지 않았 tig습니까? "BranchMaster"처럼 가지를 접지 않지만 ...

빠르고 터미널에서 실행됩니다.

매우 빠르기 때문에 (+ 키보드 제어) 훌륭한 UX를 얻을 수 있기 때문에 lsgit 저장소를 포함하는 디렉토리에 대한 " " 와 거의 같습니다 .

https://jonas.github.io/tig/

일반적인 단축키, /검색 등이 있습니다.

개정 그래프

(ps.이 스크린 샷의 배경에있는 터미널입니다. 요즘에는 더 좋아 보이지만 제 컴퓨터는 스크린 샷을 찍는 것을 거부합니다. 죄송합니다)

(pps. 나는 gitkraken도 사용하고 정말 명확한 시각화를 가지고 있지만 tig) 보다 훨씬 무겁습니다.


다음 별칭을 사용합니다.

[alias]
    lol = log --graph --decorate --pretty=oneline --abbrev-commit
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all

위에서 본 별칭보다 색 구성표에 더 많은 정보가 있습니다. 또한 꽤 흔한 것 같아서 다른 사람의 환경에 존재하거나 설명하지 않고도 대화에서 언급 할 수있는 기회가있을 수 있습니다.

스크린 샷과 전체 설명은 여기 : http://blog.kfish.org/2010/04/git-lola.html


그래프 기록을 보려면 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 에서 지원됩니다 .


Mac 사용자의 경우 무료 오픈 소스 도구 GitUp : http://gitup.co/를 확인하십시오 (말장난 의도 없음).

저는 그래프가 표시되는 방식이 마음에 들었고 제가 본 다른 도구보다 더 명확합니다.

프로젝트 위치 : https://github.com/git-up/GitUp

GitUp 스크린 샷


간결한 방법을 보여주는 이 블로그 게시물찾았 습니다 .

git log --oneline --abbrev-commit --all --graph --decorate --color

일반적으로 위의 명령에 대한 별칭을 만듭니다.

alias gl='git log --oneline --abbrev-commit --all --graph --decorate --color'

그리고 간단하게 사용하십시오 gl.

별칭을 git config에 추가 할 수도 있습니다. [alias]에~/.gitconfig 다음 줄을 열고 추가합니다 .

[alias]
        lg = log --oneline --abbrev-commit --all --graph --decorate --color

다음과 같이 사용하십시오. git lg


.gitconfig를 통해 개인적으로 가장 좋아하는 별칭은 다음과 같습니다.

graph = log --graph --color --all --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"

VSCode 텍스트 편집기를 사용하는 경우 D. Jayamanne Git History Extension고려하십시오 .

여기에 이미지 설명 입력


Gitx는 OS X를 사용하는 경우 환상적인 시각화 도구입니다.


또 다른 git log 명령. 이것은 고정 너비 열이 있습니다 .

git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short

이전 게시물이지만 SmartGit. Tortoise HG 브랜치 시각화를 매우 연상 시키며 비상업적 인 용도로 무료입니다.


Windows에는 사용할 수있는 매우 유용한 도구가 있습니다. git 확장. GUI 도구이며 git 작업을 매우 쉽게 만듭니다.

또한 오픈 소스입니다.

http://gitextensions.github.io


시도 --simplify-by-decoration했지만 모든 병합이 표시되지 않습니다. 그래서 대신 헤더에 "\"및 "/"기호가없는 줄을 잘라 내고 항상 그 직후에 분기를 나타내는 "("가있는 줄을 유지합니다. 분기 기록을 표시 할 때 일반적으로 커밋 주석에 관심이 없습니다. 나는 그것들도 제거하고 다음과 같은 쉘 별칭으로 끝납니다.

gbh () { 
    git log --graph --oneline --decorate "$@" | grep '^[^0-9a-f]*[\\/][^0-9a-f]*\( [0-9a-f]\|$\)\|^[^0-9a-f]*[0-9a-f]*\ (' | sed -e 's/).*/)/'
}

더 복잡하게 만들 수 있습니까?

간단한 git log --all --decorate --oneline --graph (A Dog = --All --Decorate --Oneline --Graph 기억)


Git 공식 사이트에는 일부 타사 플랫폼 별 GUI 도구가 있습니다. 여기를 누르십시오 git GUI Tools for Linux Platform

내가 사용한 gitgGitKraken리눅스 플랫폼. 둘 다 커밋 트리를 이해하는 것이 좋습니다.

참고 URL : https://stackoverflow.com/questions/1838873/visualizing-branch-topology-in-git

반응형