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
다음과 같이 보입니다.
git lg2
다음과 같이 보입니다.
와 git 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 lg
0.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를 얻을 수 있기 때문에 ls
git 저장소를 포함하는 디렉토리에 대한 " " 와 거의 같습니다 .
일반적인 단축키, /
검색 등이 있습니다.
(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
간결한 방법을 보여주는 이 블로그 게시물 을 찾았 습니다 .
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
내가 사용한 gitg
및 GitKraken
리눅스 플랫폼. 둘 다 커밋 트리를 이해하는 것이 좋습니다.
참고 URL : https://stackoverflow.com/questions/1838873/visualizing-branch-topology-in-git
'Development Tip' 카테고리의 다른 글
변수가 있는지 어떻게 확인합니까? (0) | 2020.09.28 |
---|---|
Java에서 String을 InputStream으로 어떻게 변환합니까? (0) | 2020.09.28 |
Chrome 개발자 도구에서 마우스 오버 상태를 참조하세요 (0) | 2020.09.28 |
다른 브랜치에서 Git에 브랜치 만들기 (0) | 2020.09.28 |
MySQL의 여러 열에 대한 고유 제약 조건을 어떻게 지정합니까? (0) | 2020.09.28 |