मैंने देखा है कुछ पुस्तकों और लेखों में कुछ बहुत सुंदर रेखांकन वाली शाखाओं और कमिटों के रेखांकन हैं। मैं git इतिहास की उच्च-गुणवत्ता वाली मुद्रण योग्य छवियां कैसे बना सकता हूं?
मैंने देखा है कुछ पुस्तकों और लेखों में कुछ बहुत सुंदर रेखांकन वाली शाखाओं और कमिटों के रेखांकन हैं। मैं git इतिहास की उच्च-गुणवत्ता वाली मुद्रण योग्य छवियां कैसे बना सकता हूं?
जवाबों:
अद्यतन: इस जवाब से यह ध्यान देने की तुलना में कहीं अधिक ध्यान दिया है। यह मूल रूप से पोस्ट किया गया था क्योंकि मुझे लगता है कि ग्राफ़ अच्छे लगते हैं और उन्हें एक प्रकाशन के लिए इलस्ट्रेटर में खींचा जा सकता है और कोई बेहतर समाधान नहीं था। लेकिन अब इस Q के लिए बहुत अधिक लागू उत्तर मौजूद हैं, जैसे कि फ्रैक्ज़ , जुबब्स या हैरी ली के! प्लीज ऊपर चढ़ जाओ उन !!
अद्यतन 2: मैंने इस उत्तर के बेहतर संस्करण को विज़िटाइजिंग शाखा टोपोलॉजी में git प्रश्न में पोस्ट किया है, क्योंकि यह कहीं अधिक उपयुक्त है। उस संस्करण में शामिल है lg3
, जो लेखक और कमिटरी दोनों जानकारी दिखाता है, इसलिए आपको वास्तव में इसे देखना चाहिए। ऐतिहासिक (और प्रतिनिधि, मैं मानता हूँ) कारणों के लिए इस जवाब को छोड़कर, हालांकि मैं वास्तव में इसे हटाने के लिए लुभा रहा हूं।
मेरे 2 in : मेरे पास दो उपनाम हैं जिन्हें मैं आमतौर पर अपनी ~/.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
इस तरह दिखता है:
और git lg2
इस तरह दिखता है:
#202020
/ #555555
, रेड: #5d1a14
/ #da4939
, ग्रीन: #424e24
/ #a5c261
, येलो: #6f5028
/ #ffc66d
, ब्लू: #263e4e
/ #6d9cbe
, मैजेंटा: #3e1f50
/ #a256c7
, सियान: #234e3f
/ #62c1a1
, और व्हाइट: #979797
/ #ffffff
।
--date=relative
और --abbrev-commit
निरर्थक हैं क्योंकि आप स्पष्ट रूप से %cr
और %h
क्रमशः उपयोग करते हैं।
%C(auto)
( %d
) रिफाइनर्स में संशोधक जोड़ूंगा । देखें stackoverflow.com/questions/5889878/color-in-git-log/…
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
यहाँ उत्तर में से कई महान हैं, लेकिन उन लोगों के लिए जो बस एक साधारण एक लाइन चाहते हैं सेटअप अलाइयस या अतिरिक्त कुछ भी किए बिना उत्तर के लिए, यहाँ यह है:
git log --all --decorate --oneline --graph
हर कोई हर git log
समय नहीं कर रहा होगा , लेकिन जब आपको इसकी आवश्यकता होगी तो बस याद रखें:
" एक कुत्ता " = Git लॉग - एक डालूँगा - घ ecorate - ओ neline - जी Raph
git config --global alias.adog "log --all --decorate --oneline --graph"
--all
इतने लंबे समय से देख रहा हूँ कि मैं (T_T) रोने वाला हूँ!
शाब्दिक आउटपुट के लिए आप कोशिश कर सकते हैं:
git log --graph --abbrev-commit --decorate --date=relative --all
या:
git log --graph --oneline --decorate --all
या: यहां DAG ग्राफ खींचने के लिए एक रेखांकन उर्फ है।
मैं व्यक्तिगत रूप से उपयोग करता हूं gitx
, gitk --all
और gitnub
।
--abbrev-commit --decorate
, और फिर यह एकदम सही है!
--abbrev-commit
अगर आप का उपयोग करने की आवश्यकता नहीं है--oneline
git log --graph --oneline --decorate --date=relative --all
में --date
तर्क बेकार है। मैं लॉग में दिखाई गई कोई तिथि नहीं देख सकता।
Gitgraph.js एक रिपॉजिटरी के बिना सुंदर गिट शाखाओं को आकर्षित करने की अनुमति देता है। बस एक जावास्क्रिप्ट कोड लिखें जो आपकी शाखाओं को कॉन्फ़िगर करता है और इसे ब्राउज़र में कमिट और रेंडर करता है।
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);
या metro
टेम्पलेट के साथ :
या प्रतिबद्ध संदेशों, लेखकों और टैग्स के साथ:
इसे JSFiddle के साथ टेस्ट करें ।
इसे Gbs Grapher के साथ @bsara द्वारा जनरेट करें।
टिकज एंड पीजीएफ के शीर्ष पर निर्मित , gitdags
एक छोटा लाटेकस पैकेज है जो आपको वेक्टर-ग्राफिक्स कम ग्राफ बनाने के लिए सहजता से, और अधिक का उत्पादन करने की अनुमति देता है।
मौजूदा रिपॉजिटरी के कमिट ग्राफ का स्वचालित उत्पादन उद्देश्य नहीं है 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}
:)
latex input.tex
एक डीवीआई उत्पन्न करने के लिए उपयोग कर सकता हूं , और फिर अंत में उपयोग कर सकता हूं। dvisvgm input.dvi
पारदर्शिता के साथ एसवीजी उत्पन्न करना। एसवीजी से पीएसजी जैसे रेखापुंज प्रारूप में परिवर्तित करना काफी आसान है convert -antialias -density 300 -background none input.svg output.png
। वैसे, ये छवियां पूरी पारदर्शिता के साथ अद्भुत दिखती हैं । अभी भी फ़ॉन्ट मुद्दे पर काम कर रहा है ... i.imgur.com/1Xu2Ry5.png
gitdags
रास्ते में है!
Gitg GNOME के लिए Gitk और GitX का एक क्लोन है (यह KDE आदि पर भी काम करता है) जो एक सुंदर रंगीन ग्राफ दिखाता है।
यह सक्रिय रूप से विकसित (2012 के अनुसार) है। यह आप तरह प्रतिबद्ध (ग्राफ नोड्स) या तो कालक्रम के अनुसार या देता है सांस्थितिकी , और छिपाने करता है कि एक चयनित शाखा करने के लिए नेतृत्व नहीं है।
यह बड़े रिपॉजिटरी और जटिल निर्भरता ग्राफ के साथ ठीक काम करता है।
नमूना स्क्रीनशॉट, लिनक्स-गिट और लिनक्स-2.6 रिपोजिटरी दिखाते हुए:
SourceTree वास्तव में अच्छा है। यह एक अच्छे दिखने वाले और मध्यम आकार के इतिहास और शाखा ग्राफ का प्रिंट आउट करता है: (निम्नलिखित कुछ शाखाओं को देखने के लिए प्रायोगिक Git प्रोजेक्ट पर किया गया है)। विंडोज 7+ और मैक ओएस एक्स 10.6+ का समर्थन करता है।
मैंने सिर्फ एक उपकरण लिखा है जो HTML / कैनवस का उपयोग करके बहुत बढ़िया कमिट ग्राफ़ बना सकता है।
और एक jQuery प्लगइन प्रदान करें जो इसे उपयोग करना आसान बनाता है।
[github] https://github.com/tclh123/commits-graph
पूर्वावलोकन:
git-forest
एक उत्कृष्ट पर्ल स्क्रिप्ट है जो मैं एक वर्ष से अधिक समय से उपयोग कर रहा हूं और मैं शायद ही 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"
टर्मिनल पर आउटपुट कैसा दिखता है:
मैंने git लॉग को सुंदर SVG ग्राफ़ में परिवर्तित करने के लिए एक वेब टूल लिखा: बिट-बूस्टर - ऑफलाइन कमिट ग्राफ़ ड्राइंग टूल
आउटपुट को git log --pretty='%h|%p|%d'
सीधे टूल में अपलोड करें और फिर "डाउनलोड ग्राफ.एसवीजी" लिंक पर क्लिक करें।
टूल शुद्ध-क्लाइंट-साइड है, और इसलिए आपका कोई भी Git डेटा मेरे सर्वर के साथ साझा नहीं किया गया है। आप स्थानीय रूप से HTML + JS को भी बचा सकते हैं और इसे "file: ///" URL के उपयोग से चला सकते हैं। Ubuntu 48.04 पर क्रोम 48 और फ़ायरफ़ॉक्स 43 पर सत्यापित।
यह HTML उत्पन्न करता है जिसे सीधे किसी भी पेज (ब्लॉगस्पॉट ब्लॉगिंग इंजन सहित) में पोस्ट किया जा सकता है। यहाँ कुछ ब्लॉग पोस्टों पर एक नज़र डालें:
http://bit-booster.blogspot.ca/
यहाँ उपकरण द्वारा उत्पन्न एक नमूना HTML फ़ाइल का स्क्रीनशॉट है:
एक ग्राफविज़ स्क्रिप्ट के आधार पर जो मैंने एक संबंधित प्रश्न के उत्तर में पाया है , मैंने एक रूबी स्क्रिप्ट को हैक किया है जो एक गिट रिपॉजिटरी का सारांश दृश्य बनाता है। यह सभी रैखिक इतिहास को समाप्त करता है और बस "दिलचस्प" कमिट करता है, यानी जिनके पास कई माता-पिता, कई बच्चे हैं, या एक शाखा या टैग द्वारा इंगित किया गया है। यहाँ ग्राफ़ का एक स्निपेट है जो इसे jquery के लिए उत्पन्न करता है :
गिट-बिग-पिक्चर और ब्रांचमास्टर समान उपकरण हैं जो केवल ग्राफ़ के उच्च-स्तरीय संरचना को दिखाने की कोशिश करते हैं, केवल यह प्रदर्शित करके कि टैग, शाखाएं, मर्ज आदि कैसे संबंधित हैं।
इस सवाल के कुछ और विकल्प हैं।
मैं तीन कस्टम आदेशों को जोड़ दिया है: 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 stree
और git vtree
मैं स्वरूपण के साथ मदद करने के लिए बैश का उपयोग करता हूं।
[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);"'
[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);"'
EDIT: यह git संस्करण 1.9a के साथ काम करता है। रंग मूल्य 'ऑटो' जाहिर तौर पर इस रिलीज में अपनी शुरुआत कर रहा है। यह एक अच्छा जोड़ है क्योंकि शाखा नामों को एक अलग रंग मिलेगा। इससे उदाहरण के लिए स्थानीय और दूरस्थ शाखाओं के बीच अंतर करना आसान हो जाता है।
fatal: bad color value 'auto' for variable '--pretty format'
:(
sed: illegal option -- r
निर्भर करता है कि वे क्या दिखते थे। मैं gitx का उपयोग करता हूं जो इस तरह की तस्वीरें बनाता है:
आप git log --graph
बनाम gitk की तुलना 24-वे ऑक्टोपस मर्ज पर कर सकते हैं (मूल रूप से http://clojure-log.n01se.net/date/2008-12-24.html ):
अधिक विस्तृत पाठ आउटपुट के लिए, कृपया प्रयास करें:
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
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)'"
gitg : एक जीटीके आधारित भंडार दर्शक, नई लेकिन रोचक और उपयोगी है कि
http://git.gnome.org/browse/gitg
मैं इसे वर्तमान में उपयोग
GitX
और उस पर एक बहुत अच्छा लगता है। अनुशंसा
हालांकि कभी-कभी मैं 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
जैसा कि आप देख सकते हैं, लगभग एक कीस्ट्रोके सेविंग एलियासेस है, जो इसके आधार पर है:
गिट के हाल के संस्करण में देखें (1.8.5 और ऊपर) आप प्लेसहोल्डर% d को सजाने में% C (ऑटो) से लाभ उठा सकते हैं
यहां से आपको जो कुछ भी चाहिए उसे अच्छी तरह से समझने के लिए grerevisions के लिए एक अच्छी समझ है (कुछ ऐसा है जैसे मास्टर..विकास, जहां --simplify-merges दीर्घकालिक शाखाओं के साथ मदद कर सकता है)
कमांड लाइन के पीछे की शक्ति आपकी आवश्यकताओं के आधार पर जल्दी से कॉन्फ़िगर होती है (समझते हैं कि एक रेपो एक अद्वितीय कुंजी लॉग कॉन्फ़िगरेशन नहीं है, इसलिए --numstat, या --raw, या --name- स्थिति को जोड़ना कभी-कभी आवश्यक होता है। यहाँ git log और उपनाम तेज, शक्तिशाली और (समय के साथ) सबसे सुंदर ग्राफ जिसे आप प्राप्त कर सकते हैं। इससे भी अधिक, आउटपुट के साथ डिफ़ॉल्ट रूप से एक पेजर के माध्यम से दिखाया गया है (कम कहना) आप हमेशा परिणाम के अंदर जल्दी खोज सकते हैं। आश्वस्त नहीं हैं? आप हमेशा परिणाम पार्स कर सकते हैं gitgraph जैसी परियोजनाओं के साथ
स्लिप के ज़बरदस्त जवाब को थोड़ा घुमाते हुए , आप उसकी एलियासेस का उपयोग सिर्फ एक शाखा में लॉग इन करने के लिए कर सकते हैं:
[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
मैं सुझाव देता हूं कि tig
https://github.com/jonas/tig
, git के लिए बहुत बेहतर कमांड लाइन टूल।
आप macOS पर tig को स्थापित करने के लिए homebrew का उपयोग कर सकते हैं:
$ brew install tig
$ tig
ग्राफ इतिहास को देखने के लिए मेरे पास यह 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
के अलावा के समान है । ध्यान दें कि वाक्यविन्यास, जो Git को प्रतिबद्ध हैश आदि के लिए डिफ़ॉल्ट रंगों का उपयोग करने के लिए कहता है, Git> = 1.8.3 में समर्थित है ।.mailmap
%C(auto)
git log --graph --oneline
बस यह सुनिश्चित करने के लिए कि ऑनलाइनर खो न जाए
GitGraph
आपके Git भंडार के प्रतिबद्ध इतिहास का PNG या SVG प्रतिनिधित्व उत्पन्न करता है।
दित्ता का प्रयास करें । यह किसी भी ASCII आरेख को एक छवि में बदल सकता है। हालाँकि यह ध्यान में नहीं आया कि Git शाखाओं के साथ डिज़ाइन किया गया था, लेकिन मैं परिणामों से प्रभावित था।
स्रोत (txt फ़ाइल):
+--------+
| hotfix |
+---+----+
|
--*<---*<---*
^
|
\--*<---*
|
+---+----+
| master |
+--------+
कमान:
java -jar ditaa0_9.jar ascii-graph.txt
परिणाम:
यह पृष्ठभूमि के रंगों, धराशायी लाइनों, विभिन्न आकृतियों और अधिक का भी समर्थन करता है। उदाहरण देखें ।
यदि आपका रिपॉजिटरी Gitlab पर बैठता है, तो आप इसके ग्राफ प्रतिनिधित्व का उपयोग कर सकते हैं जो आपके ब्राउज़र में SVG के रूप में प्रदान किया गया है।
अपने रिपॉजिटरी के ग्राफ़ दृश्य पर जाएं , जैसे https://gitlab.com/gitlab-org/gitter/webapp/network-develop
ग्राफ को नीचे तक स्क्रॉल करें (यह आलसी लोड करता है!)
एसवीजी तत्व को एक नई फ़ाइल में कॉपी करने के लिए अपने ब्राउज़र के निरीक्षक का उपयोग करें
अपनी पसंद के रेंडरर में इसे खोलें, जैसे इंकस्केप
मैं एक प्रत्यक्ष उपकरण के बारे में नहीं जानता, लेकिन शायद आप डेटा को डॉट फॉर्मेट में निर्यात करने के लिए एक स्क्रिप्ट को हैक कर सकते हैं और इसे ग्राफविज़ के साथ प्रस्तुत कर सकते हैं।
io
आदेशों को बदल कर सरल पर्ल `गिट लॉग '[...] के लिए मेरे लिए काम किया।
brew install perl dot
और उसके बाद cpan common::sense IO::all
निर्भरता प्राप्त करने के लिए। फिर, आउटपुट को एक उपयुक्त कमांड पर, जैसे git-graphviz | dot -Tpng -o repo.png
। हालाँकि, आउटपुट git-big-picture से बहुत अलग नहीं है ।
राफेल वेब ग्राफिक्स लाइब्रेरी के डेमो में से एक के रूप में एक कायरतापूर्ण कमिट ग्राफ है ।
डेमो स्टैटिक है, लेकिन कोड को लेना और डेटा के लाइव सेट के लिए अपने स्टैटिक डेटा को स्वैप करना आसान होना चाहिए - मुझे लगता है कि यह JSON फॉर्मेट में सिर्फ Git कमिट डेटा है।
डेमो यहाँ है: http://dmitrybaranovskiy.github.io/raphael/github/impact.html
गोले के लिए एक अच्छा और साफ दिखने वाला टेबल जैसा गिट ग्राफ़ आउटपुट
ग्राफ के पेड़ के अलावा बेकार के रूप में हैश के साथ
या एक अतिरिक्त कॉलम में
संपादित करें : आप स्पष्टीकरणों को पढ़े बिना तुरंत शुरू करना चाहते हैं? नीचे दिए गए अनुभाग 5 से git उपनाम, स्क्रिप्ट या फ़ंक्शन कोड स्निपेट का उपयोग करें ।
इस प्रश्न के सभी उत्तरों में किसी ने भी अब तक गोले के लिए एक साफ सुथरा दिखने वाला आउटपुट नहीं दिखाया। सबसे पास यह जवाब था कि मैं कहाँ से शुरू हुआ था।
मेरे दृष्टिकोण में मुख्य बिंदु उपयोगकर्ता को दिखाए गए केवल पेड़ के पात्रों को गिनना है। फिर उन्हें व्हॉट्सएप के साथ एक व्यक्तिगत लंबाई में भरें।
गिट के अलावा आपको इन उपकरणों की आवश्यकता है
ज्यादातर किसी भी लिनक्स वितरण के साथ बोर्ड पर।
कोड स्निपेट है
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:]'
हमारे ग्राफ लाइन के अंत में उन्हें जोड़ने की तुलना में। बस!
गिट के पास वाक्यविन्यास के साथ पहले से ही आउटपुट विनिर्देशकों की लंबाई को प्रारूपित करने का एक अच्छा विकल्प है '%><(amount_of_characters,truncate_option)'
, जो बाईं ओर से '>' या दाईं ओर <'' पक्ष को जोड़ता है और प्रारंभ 'ltrunc', 'mtrunc' या अंत से वर्णों को छोटा कर सकता है 'TRUNC'।
यह महत्वपूर्ण है कि Printf cmd के ऊपर इसी git कॉलम के लिए समान लंबाई मान का उपयोग करें।
अपनी खुद की साफ सुथरी मेज़र स्टाइल को अपनी ज़रूरत के हिसाब से स्टाइल करने का मज़ा लें।
अतिरिक्त:
सही लंबाई मान प्राप्त करने के लिए आप निम्नलिखित स्निपेट का उपयोग कर सकते हैं
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 का उपयोग करें।
EDIT 1 : बस ध्यान दें कि अंडरलाइनर चार्टर का उपयोग गिट ट्री में भी किया जाता है और कोड स्निपेट्स को उसी के अनुसार संपादित किया जाता है। यदि अन्य पात्र गायब हैं, तो कृपया एक टिप्पणी छोड़ दें।
EDIT 2 : यदि आप शाखा और टैग प्रविष्टियों के आसपास कोष्ठक से छुटकारा पाना चाहते हैं, तो "कमांड में"% d "के बजाय"% D "का उपयोग करें, जैसे EDIT 3 में।
संपादित करें 3 : शायद "ऑटो" रंग विकल्प वह है जिसे आप शाखा और टैग प्रविष्टियों के लिए सबसे अधिक पसंद करते हैं?
Git कमांड के इस भाग को बदलें (रंग 214 )
%C(214)%>(15,trunc)%D%C(reset)
करने के लिए स्वत:
%C(auto)%>(15,trunc)%D%C(reset)
संपादित करें 4 : या आप उस हिस्से के लिए अपना खुद का रंग मिश्रण पसंद करते हैं, जो कि पलक झपकते हुए एक फैंसी आउटपुट है?
सिर, शाखा के नाम और टैग को स्टाइल करने में सक्षम होने के लिए सबसे पहले हमें अपने git कमांड में "ऑटो" रंग विकल्प की आवश्यकता है जैसे EDIT 3।
फिर हम इन 3 लाइनों को जोड़कर अपने स्वयं के साथ रंग के मूल्यों को बदल सकते हैं
# 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"
हमारे कोड स्निपेट में। प्रतिस्थापन मूल्य ऊपर रंगों का उत्पादन करते हैं।
उदाहरण के लिए सिर का प्रतिस्थापन मूल्य है
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
आपके git प्रोजेक्ट पथ में जो आपके git लॉग आउटपुट से पहली कमिट का उपयोग करता है।
EDIT 5 : जैसा कि सदस्य "एंड्रास डीक" ने उल्लेख किया है, इस कोड का उपयोग करने के कुछ तरीके हैं:
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_tably (tablelike से प्राप्त) को सीधे अपने git प्रोजेक्ट पथ के तहत या जहाँ से आप अपने git प्रोजेक्ट पथ के साथ पहले पैरामीटर के रूप में चाहते हैं।
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) गिट उर्फ के रूप में :
हो सकता है कि सबसे आसान तरीका है अपने .itconfig में एक git उपनाम जोड़ना
[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 लॉग आउटपुट देता है
बहुत अधिक निमिष! बस जो संभव है उसे प्रदर्शित करने के लिए। बहुत कम निर्दिष्ट रंग रंग पुनरावृत्ति की ओर ले जाते हैं।
एक पूर्ण .gitconfig संदर्भ केवल एक क्लिक दूर है।
AGAIN: अपनी खुद की साफ सुथरी मेज़र स्टाइल को अपनी ज़रूरत के हिसाब से स्टाइल करने का मज़ा लें।
कुछ उपनामों में ~ / .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'
OSX उपयोगकर्ताओं के लिए, मैंने @gospes उदाहरण लिया है और इसे grew ( gnu-sed
homebrew के माध्यम से स्थापित) के लिए थोड़ा संशोधित किया है और रंगों को समायोजित किया है (एक काले रंग की पृष्ठभूमि के साथ काम करने के लिए, यह सुनिश्चित नहीं है कि मूल उदाहरण संभवतः जिस तरह से करता है वह कैसे प्रस्तुत कर सकता है। उदाहरण के बाद से यह एक काली पृष्ठभूमि के साथ एक टर्मिनल पर काला पाठ निर्दिष्ट करता है)।
[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 विकल्प है) स्थापित करना है। सबसे आसानी से होमब्रे के साथ किया जाता है, जो सिस्टम-इंस्टॉल किए गए सेड को अधिलेखित नहीं करेगा, बल्कि इसके बजाय "grew" के रूप में gnu sed स्थापित करेगा। उम्मीद है कि यह मदद करता है @ SlippD.Thompson जिन्होंने OSX के बारे में ऊपर टिप्पणी की है वह काम नहीं कर रहा है।