सुंदर गिट शाखा रेखांकन


1385

मैंने देखा है कुछ पुस्तकों और लेखों में कुछ बहुत सुंदर रेखांकन वाली शाखाओं और कमिटों के रेखांकन हैं। मैं git इतिहास की उच्च-गुणवत्ता वाली मुद्रण योग्य छवियां कैसे बना सकता हूं?


4
मैंने एक ग्राफिफ़ ग्राफ बनाने के लिए एक पायथन स्क्रिप्ट बनाई है! जरा देखो तो। github.com/chode/git-graph
Stephan Bechter

4
यदि आप उच्च-गुणवत्ता वाले और प्रिंट करने योग्य चाहते हैं, तो मेरा टूल ( bit-booster.com/graph.html ) "git log" को SVG में रूपांतरित करता है। अधिक जानकारी के लिए, मेरा उत्तर देखें ।
जी सिल्वी डेविस

2
क्या आप अपने खुद के गिट इतिहास की कल्पना करने के लिए एक उपकरण की तलाश कर रहे हैं - या - एक चार्टिंग टूल जो सुंदर "गेल शाखाओं" को आकर्षित करने का एक तरीका है?
उरी अब्रामसन १ '


5
क्योंकि यह इस सवाल का अप्रासंगिक है मैं टैग निर्देशित-अचक्रीय-रेखांकन को हटा देंगे
Maksim Dmitriev

जवाबों:


1843

अद्यतन: इस जवाब से यह ध्यान देने की तुलना में कहीं अधिक ध्यान दिया है। यह मूल रूप से पोस्ट किया गया था क्योंकि मुझे लगता है कि ग्राफ़ अच्छे लगते हैं और उन्हें एक प्रकाशन के लिए इलस्ट्रेटर में खींचा जा सकता है और कोई बेहतर समाधान नहीं था। लेकिन अब इस 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 lg1

और git lg2इस तरह दिखता है:
git lg2


35
हाँ मैं करता हूँ। सामान्य और उज्ज्वल / बोल्ड रंग हैं: ब्लैक #202020/ #555555, रेड: #5d1a14/ #da4939, ग्रीन: #424e24/ #a5c261, येलो: #6f5028/ #ffc66d, ब्लू: #263e4e/ #6d9cbe, मैजेंटा: #3e1f50/ #a256c7, सियान: #234e3f/ #62c1a1, और व्हाइट: #979797/ #ffffff
स्लिप डी। थॉम्पसन

3
@ टर्बो: मेरे लिए, रंग मेरे टर्मिनल ऐप (Terminal.app) के लिए प्रोफ़ाइल सेटिंग्स में परिवर्तनशील हैं। आप जिस टर्मिनल ऐप का उपयोग कर रहे हैं, वह बदलते हुए एएनएसआई रंगों के लिए कौन से रंगों का प्रदर्शन कर रहा है या नहीं, इसका समर्थन नहीं कर सकता है। इसके अलावा, डैश (एम डैश, सटीक) ऑप्शन-शिफ्ट- [हाइफ़न-माइनस की] के साथ बनाया गया था। मुझे लगता है कि मैंने गलत तरीके से मान लिया कि सभी मौजूदा प्लेटफॉर्म यूनिकोड के साथ अप-टू-स्नफ थे।
स्लिप डी। थॉम्पसन

3
आपके --date=relativeऔर --abbrev-commitनिरर्थक हैं क्योंकि आप स्पष्ट रूप से %crऔर %hक्रमशः उपयोग करते हैं।
ग्रेव

6
मैं अच्छे रंगों को प्राप्त करने के लिए %C(auto)( %d) रिफाइनर्स में संशोधक जोड़ूंगा । देखें stackoverflow.com/questions/5889878/color-in-git-log/…
जोसेफ इलेक्शन

2
बहुत बढ़िया जवाब। मैंने कमांड को संशोधित करने के लिए --online --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
क्रेग पी। मोटलिन

1196

यहाँ उत्तर में से कई महान हैं, लेकिन उन लोगों के लिए जो बस एक साधारण एक लाइन चाहते हैं सेटअप अलाइयस या अतिरिक्त कुछ भी किए बिना उत्तर के लिए, यहाँ यह है:

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

हर कोई हर git logसमय नहीं कर रहा होगा , लेकिन जब आपको इसकी आवश्यकता होगी तो बस याद रखें:

" एक कुत्ता " = Git लॉग - एक डालूँगा - ecorate - neline - जी Raph

यहां छवि विवरण दर्ज करें


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

4
मैं --allइतने लंबे समय से देख रहा हूँ कि मैं (T_T) रोने वाला हूँ!
फेलिप जेरार्ड

2
--ऑनलाइन को Git 1.6.3 में पेश किया गया था: github.com/git/git/blob/… --pretty = online 1.6.3 से पहले Git संस्करणों के साथ काम करेगा
Pat Myron

13
एसओ पर सबसे अच्छा जवाब। यह प्रकाशस्तंभ रखने के लिए धन्यवाद।
टोबियास फीट

4
मुझे लगता है कि "--decorate" अब डिफ़ॉल्ट रूप से शामिल है। लेकिन मैं वैसे भी इस तरह संक्षिप्त याद करेंगे!
योशिय्याहोडर-निष्क्रिय को छोड़कर ..

378

शाब्दिक आउटपुट के लिए आप कोशिश कर सकते हैं:

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

या:

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

या: यहां DAG ग्राफ खींचने के लिए एक रेखांकन उर्फ ​​है।

मैं व्यक्तिगत रूप से उपयोग करता हूं gitx, gitk --allऔर gitnub


14
मैं जोड़ूंगा --abbrev-commit --decorate, और फिर यह एकदम सही है!
असममित

6
--अम्ब्रेव-कमिट का अर्थ है --ऑनलाइन, नहीं?
dwineman

4
@dwineman हाँ, --abbrev-commitअगर आप का उपयोग करने की आवश्यकता नहीं है--oneline
थॉमस

2
ऐसा लगता है कि आपकी दूसरी पंक्ति git log --graph --oneline --decorate --date=relative --allमें --dateतर्क बेकार है। मैं लॉग में दिखाई गई कोई तिथि नहीं देख सकता।
लर्नर जांग

दिनांक प्रदर्शित नहीं किया जाता है जब --online निर्दिष्ट किया जाता है
marinkunev

253

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);

Gitgraph.js के साथ उत्पन्न नमूना ग्राफ

या metroटेम्पलेट के साथ :

GitGraph.js मेट्रो थीम

या प्रतिबद्ध संदेशों, लेखकों और टैग्स के साथ:

GitGraph प्रतिबद्ध संदेशों के साथ

इसे JSFiddle के साथ टेस्ट करें ।

इसे Gbs Grapher के साथ @bsara द्वारा जनरेट करें।


3
हाँ, यह पूरी तरह से अद्भुत है! इसे फिडेल jsfiddle.net/guan1oz1 में पोस्ट करें ताकि आप तुरंत इसका परीक्षण कर सकें।
बर्कस

14
तीर माता-पिता को इंगित करना चाहिए, हालांकि, बच्चों को नहीं।
जुब्स

4
@ जुबब्स: अच्छी बात है। Git को समझने की कोशिश कर रहे लोगों के लिए यह एक आम बाधा है: वे विरासत के बजाय समय के अनुक्रम के बारे में सोचते हैं। यह स्पष्ट करना कि (लगभग) git में सब कुछ कुछ के सापेक्ष है, इससे अन्य सभी टुकड़े गिरने में मदद मिलती है।
स्लिप डी। थॉम्पसन

6
डॉक्स से तीर की दिशा के बारे में: * @param {बूलियन} [options.reverseArrow = false] - यदि सच है तो पूर्वजों के लिए तीर को इंगित करें
स्कॉट

2
FYI करें, इस पोस्ट को देखने और gitgraph.js के साथ खेलने के बाद, मैंने मूल रूप से gitgraph.js पर UI डालने के लिए एक छोटा टूल बनाने का निर्णय लिया। यह समाप्त नहीं हुआ है, और यूआई वह नहीं है जहां मैं चाहता हूं कि यह अभी तक हो, लेकिन योगदान का स्वागत है! एक नज़र डालें: github.com/bsara/git-grapher
bsara

123

टिकज एंड पीजीएफ के शीर्ष पर निर्मित , 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}

1
@यह अच्छा दिखता है! मैं इसका उपयोग करने के बारे में कुछ पंक्ति भी चाहूंगा: एक विंडोज उपयोगकर्ता पर विचार करें, जिसके पास कोई लाटेक्स नहीं है। खरोंच से ग्राफ कैसे उत्पन्न करें?
VonC

1
@VonC मुझे यकीन नहीं है, लेकिन अगर आप LaTeX स्थापित नहीं करना चाहते हैं, तो आप ShareLatex और WriteLaTeX , और पसंद पर अपने रेखांकन का उत्पादन करने में सक्षम हो सकते हैं । मैं इसे :)
देखूंगा

यह बढ़िया सामान है! मैं किसी बिंदु पर एक ट्यूटोरियल लिखूंगा, लेकिन अभी के लिए, मैं सिर्फ यह उल्लेख करना चाहता था कि आप डॉक्युमेंटक्लास स्टैंडअलोन (मैं फसल सुविधा का उपयोग करता हूं) का उपयोग करके अपने ग्राफ़ को पोस्ट-प्रोसेस कर सकता हूं, latex input.texएक डीवीआई उत्पन्न करने के लिए उपयोग कर सकता हूं , और फिर अंत में उपयोग कर सकता हूं। dvisvgm input.dviपारदर्शिता के साथ एसवीजी उत्पन्न करना। एसवीजी से पीएसजी जैसे रेखापुंज प्रारूप में परिवर्तित करना काफी आसान है convert -antialias -density 300 -background none input.svg output.png। वैसे, ये छवियां पूरी पारदर्शिता के साथ अद्भुत दिखती हैं । अभी भी फ़ॉन्ट मुद्दे पर काम कर रहा है ... i.imgur.com/1Xu2Ry5.png
vmrob

5
इस काम को करने में मुझे थोड़ा
क्रिसफ्रेमैन

1
@AndreaPolci एक मर्ज के उदाहरण के लिए github.com/Jubobs/gitdags/issues/3 देखें । के लिए प्रलेखन gitdagsरास्ते में है!
जुबस

79

Gitg GNOME के ​​लिए Gitk और GitX का एक क्लोन है (यह KDE आदि पर भी काम करता है) जो एक सुंदर रंगीन ग्राफ दिखाता है।

यह सक्रिय रूप से विकसित (2012 के अनुसार) है। यह आप तरह प्रतिबद्ध (ग्राफ नोड्स) या तो कालक्रम के अनुसार या देता है सांस्थितिकी , और छिपाने करता है कि एक चयनित शाखा करने के लिए नेतृत्व नहीं है।

यह बड़े रिपॉजिटरी और जटिल निर्भरता ग्राफ के साथ ठीक काम करता है।

नमूना स्क्रीनशॉट, लिनक्स-गिट और लिनक्स-2.6 रिपोजिटरी दिखाते हुए:

लिनक्स Git

लिनक्स 2.6


60

SourceTree वास्तव में अच्छा है। यह एक अच्छे दिखने वाले और मध्यम आकार के इतिहास और शाखा ग्राफ का प्रिंट आउट करता है: (निम्नलिखित कुछ शाखाओं को देखने के लिए प्रायोगिक Git प्रोजेक्ट पर किया गया है)। विंडोज 7+ और मैक ओएस एक्स 10.6+ का समर्थन करता है।

यहां छवि विवरण दर्ज करें

http://www.sourcetreeapp.com/


यह ऐप स्टोर में भी उपलब्ध है, इसलिए अपडेट स्वचालित रूप से काम करना चाहिए।
WebOrCode

मुझे सॉर्सेट्री का ग्राफ बहुत पसंद है, लेकिन मैं इसके बजाय कमांड लाइन का उपयोग करता हूं, और सॉर्सेट्री की चूक हमेशा ही अपने रेपोस के साथ गड़बड़ करती है।
SgtPooki

SourceTree आपसे आग्रह करेगा कि आप Atlassian खाता बनाएं (या अपने Google खाते का उपयोग करें और अपने ईमेल और प्रोफ़ाइल की जानकारी प्राप्त करने के लिए Atlassian को कुछ अनुमतियाँ दें), और Mac (OS X El Capitan v 10.11.5) पर स्थापित होने के बाद यह 'क्लोन' कदम पर विफल हो जाता है: "घातक: कोई 'सबमॉड्यूल मैपिंग नहीं मिला। पथ के लिए .itmodules' <path skipped> '" और एक अजीब चेतावनी: "टेम्पलेट नहीं मिले / usr / स्थानीय / git / शेयर / git-core / टेम्पलेट्स"। बहुत अस्पष्ट संदेश, इतना महान नहीं।
दिमित्री शेव्कोप्लस 16

3
और फिर अनइंस्टॉल करने के बाद अपने Google सुरक्षा विशेषाधिकारों को पहले से तय करने की भूल न करें: myaccount.google.com/security -> कनेक्ट किए गए एप्लिकेशन और साइटें -> आपके खाते से जुड़े ऐप्स -> प्रबंधित ऐप्स
दिमित्री शेव्कोप्लस

60

मैंने सिर्फ एक उपकरण लिखा है जो HTML / कैनवस का उपयोग करके बहुत बढ़िया कमिट ग्राफ़ बना सकता है।

और एक jQuery प्लगइन प्रदान करें जो इसे उपयोग करना आसान बनाता है।

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

पूर्वावलोकन:

पूर्वावलोकन


अच्छा लग रहा है, आप इस ग्राफ को आकर्षित करने के लिए पूर्वनिर्मित डेटा कैसे प्राप्त करते हैं?
ओल्गा

3
@ ओल्गा मैं सिर्फ अपने रेपो में बैकएंड कोड जोड़ता हूं। आप इसे जीथब पर देख सकते हैं ।
हैरी ली

56

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"

टर्मिनल पर आउटपुट कैसा दिखता है:

यहां छवि विवरण दर्ज करें


3
@ void.pointer - हाँ यह नहीं होगा क्योंकि गिट-फ़ॉरेस्ट एक पर्ल स्क्रिप्ट है और इसमें पर्ल मॉड्यूल निर्भरताएँ हैं। आवश्यक पर्ल
उपकरणों के साथ साइबरविन के

1
वाह, उस रेपो में बहुत सारे महान उपकरण हैं। धन्यवाद!
एल्डेलशेल

1
विन $ के तहत पूरी तरह से ठीक @MinGW (MSYS) काम करता है; CPANM स्थापित करें; फिर Git.pm; एक उपनाम बनाएं और आप जाने के लिए तैयार हैं।
सेकेटर

वह बहुत अच्छा टर्मिनल एमुलेटर जो आप उपयोग करते हैं? मुझे ग्राफिकल प्रॉम्प्ट इंडिकेटर चीजें पसंद हैं।
एनएच।

इस "स्क्रिप्ट" को कैसे स्थापित करें? मैं ubuntu पर हूँ।
user13107

50

मैंने 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 फ़ाइल का स्क्रीनशॉट है:

http://bit-booster.com/graph.html (उपकरण)


1
@ यह प्रतीत होता है कि रंग उस विशेष शाखा के इंडेंटेशन स्तर को दर्शाता है, और यह कि शाखाएं दूसरे स्तंभ पर जा सकती हैं और इसलिए रंग बदल देती हैं
Andersen

44

एक ग्राफविज़ स्क्रिप्ट के आधार पर जो मैंने एक संबंधित प्रश्न के उत्तर में पाया है , मैंने एक रूबी स्क्रिप्ट को हैक किया है जो एक गिट रिपॉजिटरी का सारांश दृश्य बनाता है। यह सभी रैखिक इतिहास को समाप्त करता है और बस "दिलचस्प" कमिट करता है, यानी जिनके पास कई माता-पिता, कई बच्चे हैं, या एक शाखा या टैग द्वारा इंगित किया गया है। यहाँ ग्राफ़ का एक स्निपेट है जो इसे jquery के लिए उत्पन्न करता है :

jquery का नमूना

गिट-बिग-पिक्चर और ब्रांचमास्टर समान उपकरण हैं जो केवल ग्राफ़ के उच्च-स्तरीय संरचना को दिखाने की कोशिश करते हैं, केवल यह प्रदर्शित करके कि टैग, शाखाएं, मर्ज आदि कैसे संबंधित हैं।

इस सवाल के कुछ और विकल्प हैं।


2
मैंने यह कोशिश की, लेकिन हमारे रेपो (42 शाखाओं, 175 टैग, 42.000 कमिट) के आउटपुट के साथ सही ढंग से काम करने के लिए डॉट नहीं मिल सका ... बहुत बुरा ... यह वही है जो मैं देख रहा था!
जेवियर नोडेट

1
@XavierNodet, यदि आपका रेपो सार्वजनिक है और / या आपके पास कोई त्रुटि संदेश आदि है, तो कृपया GHHub पर एक समस्या दर्ज करें। धन्यवाद!
मैट मैकहेनरी

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 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);"'

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


EDIT: यह git संस्करण 1.9a के साथ काम करता है। रंग मूल्य 'ऑटो' जाहिर तौर पर इस रिलीज में अपनी शुरुआत कर रहा है। यह एक अच्छा जोड़ है क्योंकि शाखा नामों को एक अलग रंग मिलेगा। इससे उदाहरण के लिए स्थानीय और दूरस्थ शाखाओं के बीच अंतर करना आसान हो जाता है।


fatal: bad color value 'auto' for variable '--pretty format':(
कुंडा

पुराने संस्करण के रूप में किया गया। Yum के रेपो में Git का एक पुराना संस्करण है। स्रोत (1.9) से संकलित और यह महान काम करता है। यह सुंदर भी है! धन्यवाद @gospes!
कुंडा

OS X पर नहीं:sed: illegal option -- r
स्लिप डी। थॉम्पसन

@ SlippD.Thompson: मैं लिनक्स का उपयोग कर रहा हूं :)। -R विस्तारित नियमित अभिव्यक्तियों के लिए है। जाहिर है कि sed के OSX संस्करण में यह नहीं है। शायद आप sed को अपडेट कर सकते हैं। अन्यथा, आप केवल विस्तारित रेगेक्स के बिना sed कमांड को फिर से लिख सकते हैं।
गॉस्प्स

1
मैक ओएस एक्स सेड के लिए, -r के बजाय -E
बैक्सटर लोपेज

37

निर्भर करता है कि वे क्या दिखते थे। मैं gitx का उपयोग करता हूं जो इस तरह की तस्वीरें बनाता है:

सरल कथानक

आप git log --graphबनाम gitk की तुलना 24-वे ऑक्टोपस मर्ज पर कर सकते हैं (मूल रूप से http://clojure-log.n01se.net/date/2008-12-24.html ):

24-रास्ता गिट ऑक्टोपस मर्ज।  मूल URL <code> http://lwn.net/images/ns/kernel/gitk-octopus.png </ code> था


49
यह हास्यास्पद है ... मैंने शपथ ली है मैंने आपको "24-वे ऑक्टोपस मर्ज" कहते सुना है!
dty

4
जिज्ञासा से बाहर, क्या किसी ने एक स्टैंडअलोन निष्पादन योग्य में GitX (या एक और GUI git टूल के) ड्राइंग रूटीन निकालने का प्रयास किया है? अगर मैं गलत नहीं हूं, तो कोको को वेक्टर पीडीएफ फाइल में शामिल करना मुश्किल नहीं होगा, और ओपी की उच्च-क्यू मुद्रण योग्य कल्पना की आवश्यकता को पूरा करेगा।
स्लिप डी। थॉम्पसन

इससे पहले कि वे अपनी बात को दोहराते, यह स्काई के माध्यम से S3 पर था। मेरी इच्छा है यह मेरे पास अब भी होता। :(
डस्टिन

बस इसे lwn.net/images/ns/kernel/gitk-octopus.png के gitk संस्करण से बदल दिया गया , जिसे clojure-log.n01se.net/date/2008-12-24.html से लिंक किया गया । @ डस्टिन: आशा है कि यह ठीक है। यह समान छवि नहीं है, लेकिन यह एक समान उद्देश्य प्रदान करता है। स्क्रीन शॉट से, ऐसा लगता है कि यह लिनक्स कर्नेल का हिस्सा है, इसलिए मुझे लगता है कि आप उस कमिट को फिर से देख सकते हैं और एक बराबर gitx स्क्रीनशॉट ले सकते हैं ....
n

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 : एक जीटीके आधारित भंडार दर्शक, नई लेकिन रोचक और उपयोगी है कि
http://git.gnome.org/browse/gitg
मैं इसे वर्तमान में उपयोग


2
यह एक क्लोन है GitXऔर उस पर एक बहुत अच्छा लगता है। अनुशंसा
यारेक टी

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 

जैसा कि आप देख सकते हैं, लगभग एक कीस्ट्रोके सेविंग एलियासेस है, जो इसके आधार पर है:

  • - रंग: स्पष्ट रूप
  • --graph: माता-पिता की कल्पना करें
  • -डेट-ऑर्डर: रेपो पर सबसे अधिक समझ में आता है
  • --decorate: कौन कौन है
  • --ऑनलाइन: कई बार आपको कमिटमेंट के बारे में जानना होगा
  • -सिमप्लाइज़-बाय-डेकोरेशन: फ़र्स्ट लुक के लिए बेसिक (सिर्फ टैग, प्रासंगिक मर्ज, ब्रांच)
  • --all: इस विकल्प के साथ और उसके बिना सभी उर्फ ​​के साथ कीस्ट्रोक्स की बचत
  • --डेट = रिश्तेदार (% ar): रेपो में गतिविधि को समझें (कभी-कभी एक शाखा मास्टर के पास कुछ काम करती है लेकिन महीनों पहले से)

गिट के हाल के संस्करण में देखें (1.8.5 और ऊपर) आप प्लेसहोल्डर% d को सजाने में% C (ऑटो) से लाभ उठा सकते हैं

यहां से आपको जो कुछ भी चाहिए उसे अच्छी तरह से समझने के लिए grerevisions के लिए एक अच्छी समझ है (कुछ ऐसा है जैसे मास्टर..विकास, जहां --simplify-merges दीर्घकालिक शाखाओं के साथ मदद कर सकता है)

कमांड लाइन के पीछे की शक्ति आपकी आवश्यकताओं के आधार पर जल्दी से कॉन्फ़िगर होती है (समझते हैं कि एक रेपो एक अद्वितीय कुंजी लॉग कॉन्फ़िगरेशन नहीं है, इसलिए --numstat, या --raw, या --name- स्थिति को जोड़ना कभी-कभी आवश्यक होता है। यहाँ git log और उपनाम तेज, शक्तिशाली और (समय के साथ) सबसे सुंदर ग्राफ जिसे आप प्राप्त कर सकते हैं। इससे भी अधिक, आउटपुट के साथ डिफ़ॉल्ट रूप से एक पेजर के माध्यम से दिखाया गया है (कम कहना) आप हमेशा परिणाम के अंदर जल्दी खोज सकते हैं। आश्वस्त नहीं हैं? आप हमेशा परिणाम पार्स कर सकते हैं gitgraph जैसी परियोजनाओं के साथ


बहुत अच्छा। इन्हें मेरे कॉन्फिगर में जोड़ना। लेकिन मैं% C% (%) को% C% (%) होने के लिए क्रेडिट कार्ड बदलने की सलाह देता हूं।% d% Creset जो दूरस्थ या स्थानीय शाखा के नाम के लिए अलग-अलग रंग देगा
MarkB42

17

स्लिप के ज़बरदस्त जवाब को थोड़ा घुमाते हुए , आप उसकी एलियासेस का उपयोग सिर्फ एक शाखा में लॉग इन करने के लिए कर सकते हैं:

[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 के लिए बहुत बेहतर कमांड लाइन टूल।

आप macOS पर tig को स्थापित करने के लिए homebrew का उपयोग कर सकते हैं:

$ 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 के अलावा के समान है । ध्यान दें कि वाक्यविन्यास, जो Git को प्रतिबद्ध हैश आदि के लिए डिफ़ॉल्ट रंगों का उपयोग करने के लिए कहता है, Git> = 1.8.3 में समर्थित है ।.mailmap%C(auto)


1
git log --graph --oneline बस यह सुनिश्चित करने के लिए कि ऑनलाइनर खो न जाए
tsenapathy

वहाँ leftside पर शाखा नाम डाल करने के लिए एक रास्ता है?
अव्वल

12

क्या आपने कोशिश की gitkया gitk --all? हालाँकि इसमें फंक्शन के रूप में प्रिंट / सेव इमग नहीं है।


3
gitk कुशल है लेकिन बहुत सुंदर नहीं है।
जोहान

तथ्य यह है कि यह निर्मित में आता है यह मेरे लिए सुखद और परेशानी मुक्त बनाता है। विशेष रूप से --allआप सभी शाखाओं को दर्शाता है।
BcK

12

GitGraph

आपके Git भंडार के प्रतिबद्ध इतिहास का PNG या SVG प्रतिनिधित्व उत्पन्न करता है।

https://code.google.com/p/gitgraph


@AndyHayden: यह नहीं है। पूरी तरह से अलग। Dia
rzymek

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

यह मेरी टर्मिनल भिन्नता है, यहाँ कई उत्तरों के समान है। मुझे lessशब्द रैपिंग को रोकने के लिए पारित झंडे को समायोजित करना पसंद है ।

उदाहरण आउटपुट

मैंने इसे त्वरित पहुंच के लिए एक उपनाम के लिए सेट किया है क्योंकि कमांड थोड़ा बोझिल है।


8

दित्ता का प्रयास करें । यह किसी भी ASCII आरेख को एक छवि में बदल सकता है। हालाँकि यह ध्यान में नहीं आया कि Git शाखाओं के साथ डिज़ाइन किया गया था, लेकिन मैं परिणामों से प्रभावित था।

स्रोत (txt फ़ाइल):

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

कमान:

java -jar ditaa0_9.jar ascii-graph.txt

परिणाम:

यहां छवि विवरण दर्ज करें

यह पृष्ठभूमि के रंगों, धराशायी लाइनों, विभिन्न आकृतियों और अधिक का भी समर्थन करता है। उदाहरण देखें ।


1
इसी तरह की नस में, कैज़ुअल-effects.com/markdeep हाथ से व्यवस्थित एससीआई आर्ट डायग्राम को सजाना बहुत शक्तिशाली है।
बेनी चेर्नियाव्स्की-पास्किन

7

यदि आपका रिपॉजिटरी Gitlab पर बैठता है, तो आप इसके ग्राफ प्रतिनिधित्व का उपयोग कर सकते हैं जो आपके ब्राउज़र में SVG के रूप में प्रदान किया गया है।

  • अपने रिपॉजिटरी के ग्राफ़ दृश्य पर जाएं , जैसे https://gitlab.com/gitlab-org/gitter/webapp/network-develop

  • ग्राफ को नीचे तक स्क्रॉल करें (यह आलसी लोड करता है!)

  • एसवीजी तत्व को एक नई फ़ाइल में कॉपी करने के लिए अपने ब्राउज़र के निरीक्षक का उपयोग करें

  • अपनी पसंद के रेंडरर में इसे खोलें, जैसे इंकस्केप

यहां छवि विवरण दर्ज करें


6

मैं एक प्रत्यक्ष उपकरण के बारे में नहीं जानता, लेकिन शायद आप डेटा को डॉट फॉर्मेट में निर्यात करने के लिए एक स्क्रिप्ट को हैक कर सकते हैं और इसे ग्राफविज़ के साथ प्रस्तुत कर सकते हैं।


यह एक github.com/gugod/bin/blob/master/git-graphviz आज़माएं । मेरे कॉर्पोरेट वातावरण में सभी निर्भरताएँ नहीं थीं, इसलिए उन ioआदेशों को बदल कर सरल पर्ल `गिट लॉग '[...] के लिए मेरे लिए काम किया।
रॉस रोजर्स

आप Mac पर हैं और आप इस स्क्रिप्ट की कोशिश करना चाहते हैं, तो आप के साथ पर्ल प्राप्त कर सकते हैं brew install perl dotऔर उसके बाद cpan common::sense IO::allनिर्भरता प्राप्त करने के लिए। फिर, आउटपुट को एक उपयुक्त कमांड पर, जैसे git-graphviz | dot -Tpng -o repo.png। हालाँकि, आउटपुट git-big-picture से बहुत अलग नहीं है ।
jhhorn424

6

राफेल वेब ग्राफिक्स लाइब्रेरी के डेमो में से एक के रूप में एक कायरतापूर्ण कमिट ग्राफ है ।

डेमो स्टैटिक है, लेकिन कोड को लेना और डेटा के लाइव सेट के लिए अपने स्टैटिक डेटा को स्वैप करना आसान होना चाहिए - मुझे लगता है कि यह JSON फॉर्मेट में सिर्फ Git कमिट डेटा है।

डेमो यहाँ है: http://dmitrybaranovskiy.github.io/raphael/github/impact.html


1
GitHub के प्रभाव ग्राफ़ पर समान ग्राफ़ कोड का उपयोग किया गया है, नहीं? (उदा। github.com/DmitryBaranovskiy/raphael/graphs/impact )
स्लिप डी। थॉम्पसन

@ स्वेन: इस ओर इशारा करने के लिए धन्यवाद। मैंने आपके लिए टूटे हुए लिंक को ठीक कर दिया है, हालांकि कृपया ध्यान रखें कि यह उत्तर पांच साल पुराना है, और इस तरह हाल ही में एक बेहतर समाधान हो सकता है।
स्पुडली


6

गोले के लिए एक अच्छा और साफ दिखने वाला टेबल जैसा गिट ग्राफ़ आउटपुट

ग्राफ के पेड़ के अलावा बेकार के रूप में हैश के साथ

ग्राफ के पेड़ के अलावा बेकार के रूप में हैश के साथ

या एक अतिरिक्त कॉलम में

या एक अतिरिक्त कॉलम में

संपादित करें : आप स्पष्टीकरणों को पढ़े बिना तुरंत शुरू करना चाहते हैं? नीचे दिए गए अनुभाग 5 से git उपनाम, स्क्रिप्ट या फ़ंक्शन कोड स्निपेट का उपयोग करें

इस प्रश्न के सभी उत्तरों में किसी ने भी अब तक गोले के लिए एक साफ सुथरा दिखने वाला आउटपुट नहीं दिखाया। सबसे पास यह जवाब था कि मैं कहाँ से शुरू हुआ था।

मेरे दृष्टिकोण में मुख्य बिंदु उपयोगकर्ता को दिखाए गए केवल पेड़ के पात्रों को गिनना है। फिर उन्हें व्हॉट्सएप के साथ एक व्यक्तिगत लंबाई में भरें।

गिट के अलावा आपको इन उपकरणों की आवश्यकता है

  • ग्रेप
  • पेस्ट
  • printf
  • sed
  • seq
  • टीआर
  • स्वागत

ज्यादातर किसी भी लिनक्स वितरण के साथ बोर्ड पर।

कोड स्निपेट है

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 ट्री फैंसी टेबलबेड आउटपुट स्टाइल

सिर, शाखा के नाम और टैग को स्टाइल करने में सक्षम होने के लिए सबसे पहले हमें अपने 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 लॉग आउटपुट देता है

fanciest_git_tree_tablelike_image

बहुत अधिक निमिष! बस जो संभव है उसे प्रदर्शित करने के लिए। बहुत कम निर्दिष्ट रंग रंग पुनरावृत्ति की ओर ले जाते हैं।

एक पूर्ण .gitconfig संदर्भ केवल एक क्लिक दूर है।

AGAIN: अपनी खुद की साफ सुथरी मेज़र स्टाइल को अपनी ज़रूरत के हिसाब से स्टाइल करने का मज़ा लें।


आपको अपने उत्तर में स्पष्ट करना चाहिए कि ये बैश स्निपेट फैंसी गिट लॉग-जैसे कमांड में कैसे बदल जाएंगे। आपके द्वारा लिंक किए गए उत्तर को देखकर कोई भी इसका उपयोग कर सकता है, लेकिन उत्तर स्व-निहित होना चाहिए
एंड्रास डीक

आपका मतलब है कि मुझे git log cmd के बारे में विस्तार से बताना चाहिए? या आप मुझे एक उदाहरण दे सकते हैं कि आप क्या याद कर रहे हैं, कृपया।
शाम

ध्यान दें: भयानक पकड़ लॉग कमांड के आउटपुट का उपयोग इस स्निपेट द्वारा टर्मिनल पर तालिकाबद्ध आउटपुट प्राप्त करने के लिए किया जाता है। तो, दूसरी तरह आप का उल्लेख के रूप में चारों ओर;)
onemorequestion

मुझे लगा कि जब भी आपको इसकी आवश्यकता होती है, तो आप हर बार 20 लाइनों की बैश टाइप नहीं कर रहे हैं। यह समझ में आता है कि इसे बैश फंक्शन या गिट उर्फ ​​के रूप में परिभाषित किया गया है। अधिकांश पाठक आपके कोड को आसानी से प्रयोग करने योग्य बनाने के लिए उसे पूरा करने की कोशिश नहीं करेंगे। मेरा मतलब यही था। यदि आप अपने रैंडम श फाइल में कोड डालते हैं तो आप मुझे अनदेखा कर सकते हैं।
एंड्रास डीक

1
समझा। आपकी सलाह के लिए धन्यवाद। मैं अपने उत्तर को संपादित करूँगा और ऐसा एक उपनाम जोड़ूंगा। आम तौर पर मैं इस तरह के "लंबे" कमांड के लिए फ़ाइलों का उपयोग करता हूं जैसा कि आपने उल्लेख किया है। लेकिन दोनों तरीकों से यहां लिखा गया है कि मैं बहुत सहज हूं, मैं सहमत हूं।
onemorequestion

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 उदाहरण लिया है और इसे grew ( 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 विकल्प है) स्थापित करना है। सबसे आसानी से होमब्रे के साथ किया जाता है, जो सिस्टम-इंस्टॉल किए गए सेड को अधिलेखित नहीं करेगा, बल्कि इसके बजाय "grew" के रूप में gnu sed स्थापित करेगा। उम्मीद है कि यह मदद करता है @ SlippD.Thompson जिन्होंने OSX के बारे में ऊपर टिप्पणी की है वह काम नहीं कर रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.