Güzel git şube grafikleri


1385

Bazı kitapların ve makalelerin git dallarının ve taahhütlerinin gerçekten hoş görünümlü grafiklerine sahip olduğunu gördüm. Git geçmişinin yüksek kalitede yazdırılabilir görüntülerini nasıl yapabilirim?


4
Ben bir graphiz grafik oluşturmak için bir python komut dosyası oluşturduk! Bir göz at. github.com/chode/git-graph
Stephan Bechter

4
Yüksek kaliteli ve yazdırılabilir olmasını istiyorsanız, aracım ( bit-booster.com/graph.html ) "git log" u SVG'ye dönüştürür. Daha fazla bilgi için cevabıma bakın .
G. Sylvie Davies

2
Kendi git geçmişinizi görselleştirmek için bir araç mı arıyorsunuz - ya da güzel "Git dallarını" çizmenin bir yolu olan bir grafik aracı mı arıyorsunuz?
Uri Abramson


5
Yönlendirilmiş-döngüsel-grafikler etiketini sildim çünkü bu soru ile ilgisiz
Maksim Dmitriev

Yanıtlar:


1843

Güncelleme: Bu cevap hak ettiğinden çok daha fazla dikkat çekti. Başlangıçta yayınlanmıştır, çünkü grafikler güzel görünüyor ve bir yayın için Illustrator'da çizilebiliyordu - ve daha iyi bir çözüm yoktu. Ama şimdi bu Q'ya fracz , Jubobs veya Harry Lee gibi daha uygulanabilir cevaplar var ! Lütfen yukarı çıkın !!

Güncelleme 2: Git sorusundaki Görselleştirme dalı topolojisine bu cevabın geliştirilmiş bir versiyonunu gönderdim , çünkü orada çok daha uygun. Bu sürüm , hem yazar hem de committer bilgilerini gösteren içerir lg3, bu yüzden gerçekten kontrol etmelisiniz. Bu cevabı tarihsel nedenlerle (& itiraf edeceğim, itiraf edeceğim) neden olsa da, gerçekten silmeye cazip geldim.

Benim 2 ¢ : normalde benim ~/.gitconfigdosya atmak iki takma adı var :

[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şuna benzer:
git lg1

ve git lg2şuna benzer:
git lg2


35
Evet yaparım. Normal ve parlak / kalın renkler: Siyah #202020/ #555555, Kırmızı: #5d1a14/ #da4939, Yeşil: #424e24/ #a5c261, Sarı: #6f5028/ #ffc66d, Mavi: #263e4e/ #6d9cbe, Macenta: #3e1f50/ #a256c7, Camgöbeği: #234e3f/ #62c1a1ve Beyaz: #979797/ #ffffff.
Slipp D.Thompson

3
@Turbo: Benim için renkler, terminal uygulamamın profil ayarlarında değiştirilebilir (Terminal.app). Kullandığınız terminal uygulaması, verilen ANSI renkleri için hangi renklerin görüntüleneceğini değiştirmeyi destekleyebilir veya desteklemeyebilir. Ayrıca çizgi (em tire, doğru) seçenek-shift- [tire-eksi tuşu] ile oluşturuldu. Sanırım tüm mevcut platformların Unicode ile uyumlu olduğunu varsaydım.
Slipp D.Thompson

3
Sizin --date=relativeve --abbrev-commitgereksizdir, çünkü sırasıyla %crve kullanırsınız %h.
graywh

6
Daha güzel renkler elde %C(auto)etmek için değiştiriciyi refnames'e ( %d) eklerdim . Bkz. Stackoverflow.com/questions/5889878/color-in-git-log/…
Josef Eisl

2
Mükemmel cevap. Komutu daha çok --oneline --decorate çıktısına benzeyecek şekilde değiştirdimlg = 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
Craig P. Motlin

1197

Buradaki cevapların birçoğu harika, ancak takma ad veya ekstra bir şey ayarlamak zorunda kalmadan basit bir tek satırlık cevap isteyenler için:

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

Herkes her zaman yapmazdı git log, ama ihtiyacınız olduğunda hatırlayın:

" Bir köpek " = git günlük - bir ll - d ecorate - O NELINE - g Ralph

resim açıklamasını buraya girin


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

4
Ben arıyordum --allkadar uzun ağlama üzereyim için (T_T) TEŞEKKÜRLER!
Felipe Gerard

2
--oneline Git 1.6.3'te tanıtıldı: github.com/git/git/blob/… --pretty = oneline 1.6.3'ten önce Git sürümleriyle çalışacak
Pat Myron

13
SO üzerinde en iyi cevap. Onu açık tuttuğunuz için teşekkürler.
Tobias Feil

4
Sanırım "--decorate" artık varsayılan olarak dahil edilmiştir. Ama kısaltmayı bu şekilde hatırlayacağım zaten!
Josiah Yoder

378

Metin çıktısı için deneyebilirsiniz:

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

veya:

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

veya: İşte DAG grafiğini çizmek için bir grafik takma adı.

Ben şahsen kullanmak gitx, gitk --allve gitnub.


14
ekleyeceğim --abbrev-commit --decorateve sonra mükemmel!
asimetrik

6
--abbrev-commit --oneline tarafından ima edilir, hayır?
dwineman

4
@dwineman evet --abbrev-commitkullanmanız gerekmiyor--oneline
Thomas

2
Sizin ikinci satırında görünüyor argüman işe yaramaz. Günlükte hiçbir tarih görünmüyor. git log --graph --oneline --decorate --date=relative --all--date
Lerner Zhang

--oneline belirtildiğinde
martinkunev

253

Gitgraph.js , depo olmadan güzel git dallarının çizilmesine izin verir. Sadece dallarınızı yapılandıran ve işleyen bir Javascript kodu yazıp tarayıcıda oluşturun.

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 ile oluşturulan örnek grafik

veya metroşablonla:

GitGraph.js metro teması

veya taahhüt mesajları, yazarlar ve etiketlerle:

Teslim mesajlarıyla GitGraph

JSFiddle ile test edin .

@Bsara tarafından Git Grapher ile oluşturun .


3
Yay, bu tamamen şaşırtıcı! Hemen test edebilmek için keman jsfiddle.net/guan1oz1 içine gönderildi .
berkus

14
Oklar çocuklara değil ebeveynlere işaret etmelidir.
jub0bs

4
@Jubobs: İyi nokta. Bu, Git'i anlamaya çalışan insanlar için ortak bir engeldir: miras yerine zaman sırasını düşünürler. Git'teki her şeyin (neredeyse) önceki bir şeye göreceli olduğunu açıklığa kavuşturmak, diğer tüm parçaların yerine oturmasına yardımcı olur.
Slipp D.Thompson

6
Ok yönüyle ilgili olarak, dokümanlardan: * @param {Boolean} [options.reverseArrow = false] - Oklar doğruysa atalara işaret eder
Scott

2
FYI, bu gönderiyi gördükten ve gitgraph.js ile oynadıktan sonra, temelde gitgraph.js'ye bir kullanıcı arayüzü koyan küçük bir araç oluşturmaya karar verdim. Bitmedi ve kullanıcı arayüzü henüz olmasını istediğim yerde değil, ancak katkılar memnuniyetle karşılıyor! bir göz atın: github.com/bsara/git-grapher
bsara

123

Üstünde inşa edilen TikZ & PGF , gitdagszahmetsizce vektör grafik grafikleri işlemek ve daha üretmesine olanak sağlayan küçük bir LaTeX paketidir.

Mevcut bir deponun taahhüt grafiğinin otomatik olarak oluşturulması aşağıdakilerin amacı değildirgitdags ; ürettiği grafikler sadece eğitim amaçlıdır .

ASCII işleme grafiklerine alternatif olarak Git sorularına yanıtlarım için grafikler üretmek için sık sık kullanıyorum:

Basit bir yeniden tabanın etkilerini gösteren böyle bir grafiğin örneği:

resim açıklamasını buraya girin

\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
@ Harika görünüyor! Ayrıca nasıl kullanılacağına dair birkaç satır istiyorum: LaTeX yüklü olmayan bir Windows kullanıcısını düşünün. Sıfırdan bir grafik nasıl üretilir?
VonC

1
@VonC Emin değilim, ancak LaTeX'i kurmak istemiyorsanız, grafiklerinizi ShareLatex ve WriteLaTeX ve benzerlerinde üretebilirsiniz . Daha fazla zamanım olduğunda içine bakacağım ve :)
wiki'yi

Bu harika şeyler! Bir noktada bir öğretici yazacağım, ancak şimdilik, belgelerinizi bağımsız sınıf belgesi kullanarak (kırpma özelliğini kullanıyorum), latex input.texbir dvi oluşturmak için kullandığınızı ve sonunda kullandığınızı belirtmek istedim. dvisvgm input.dvişeffaflık ile bir SVG oluşturmak. SVG'den PNG gibi bir raster formatına dönüştürmek oldukça kolaydır convert -antialias -density 300 -background none input.svg output.png. Bu arada, bu görüntüler tam şeffaflıkla muhteşem görünüyor . Hala yazı tipi sorunu üzerinde çalışıyor ... i.imgur.com/1Xu2Ry5.png
vmrob

5
Bu çalışmayı almak biraz zaman aldı, bu yüzden Ubuntu
14.04

1
@AndreaPolci bakınız github.com/Jubobs/gitdags/issues/3 bir birleştirme bir örnek için. İçin belgeler gitdagsyolda!
jub0bs

79

Gitg , GNOME için Gitk ve GitX'in bir klonudur (aynı zamanda KDE'de de çalışır) ve oldukça renkli bir grafik gösterir.

Aktif olarak geliştirildi (2012 itibariyle). Taahhütleri (grafik düğümleri) kronolojik veya topolojik olarak sıralamanızı ve seçilen bir dalı oluşturmayan komutları gizlemenizi sağlar.

Büyük depolar ve karmaşık bağımlılık grafikleri ile iyi çalışır.

Linux-git ve linux-2.6 depolarını gösteren örnek ekran görüntüleri:

linux-git

Linux-2.6


60

SourceTree gerçekten çok iyi. İyi görünümlü ve orta büyüklükte bir geçmiş ve dal grafiği yazdırır: (sadece bazı dalları görmek için deneysel bir Git projesinde aşağıdakiler yapılır). Windows 7+ ve Mac OS X 10.6+ sürümlerini destekler.

resim açıklamasını buraya girin

http://www.sourcetreeapp.com/


App Store'da da mevcuttur, bu nedenle güncelleme otomatik olarak çalışmalıdır.
WebOrCode

Sourcetree'nin grafiğini seviyorum, ancak komut satırını kullanmayı tercih ederim ve sourcetree'nin varsayılanları her zaman depolarımla uğraşır.
SgtPooki

SourceTree, Atlassian hesabı oluşturmanızda ısrar eder (veya google hesabınızı kullanır ve Atlassian'a e-posta ve profil bilgilerinizi almak için bazı izinler verir) ve Mac'e yüklendikten sonra (OS X El Capitan v 10.11.5) 'Klonlama' adımında başarısız olur: "ölümcül: '<yol atlandı>' 'yolu için .gitmodules içinde alt modül eşlemesi bulunamadı ve ayrıca garip bir uyarı:" şablonlar bulunamadı / usr / local / git / share / git-core / templates ". Çok belirsiz mesajlar, çok büyük değil.
Dmitry Shevkoplyas

3
Ardından, kaldırma işleminden sonra daha önce verdiğiniz Google güvenlik ayrıcalıklarınızı düzenlemeyi unutmayın: myaccount.google.com/security -> Bağlı uygulamalar ve siteler -> Hesabınıza bağlı uygulamalar -> Uygulamaları Yönet
Dmitry Shevkoplyas

60

Ben sadece HTML / Canvas kullanarak grafik güzel git taahhütleri üretebilir bir araç yazdım.

Ve kullanımı kolaylaştıran bir jQuery eklentisi sağlayın.

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

Ön izleme:

Ön izleme


Güzel görünüyor, bu grafiği çizmek için önceden biçimlendirilmiş verileri nasıl elde edersiniz?
Olga

3
@Olga Ben sadece Repo için arka uç kodu eklemek. Sen görebilirsiniz onu github üzerinde.
Harry Lee

56

git-forestbir yıldan fazla bir süredir kullandığım mükemmel bir perl betiğidir ve artık git logkomutu doğrudan kullanmıyorum .

Bunlar bu senaryo hakkında sevdiğim bazı şeyler:

  • Grafikteki çizgileri çizmek için grafik satırlarına daha sürekli bir görünüm veren unicode karakterler kullanır.
  • --reverseNormal git logkomutla mümkün olmayan grafik çıktısıyla birleştirebilirsiniz .
  • git logTaahhütler listesini almak için dahili olarak kullanır , böylece git loggeçirdiğiniz tüm seçenekler de bu komut dosyasına geçirilebilir.

git-forestAşağıdaki gibi kullanarak bir takma ad var :

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

Çıktı bir terminalde şöyle görünür:

resim açıklamasını buraya girin


3
@ void.pointer - Evet, git-forest bir perl betiği ve perl modülü bağımlılıklarına sahip olduğu için olmayacak. Gerekli perl modülleri yüklendiğinde git cygwin altında çalıştırmak, bunu gerçekten Windows'da istiyorsanız elde edebileceğiniz en iyi alternatif olabilir :)
Tuxdude

1
Vay canına, bu repoda bir sürü harika araç var. Teşekkürler!
Eldelshell

1
Win $ altında gayet iyi @MinGW (MSYS) çalışır; CPANM'yi yükleyin; sonra Git.pm; bir takma ad oluşturun ve gitmeye hazırsınız.
Sektor

Kullandığınız bu çok hoş terminal emülatörü nedir? Grafik bilgi istemi göstergelerini seviyorum.
NH.

Bu "script" nasıl kurulur? Ubuntu'dayım.
user13107

50

Git günlüklerini güzel SVG grafiklerine dönüştürmek için bir web aracı yazdım: Bit-Booster - Çevrimdışı İşlem Grafiği Çizim Aracı

Çıktıyı git log --pretty='%h|%p|%d'doğrudan araca yükleyin ve ardından "download graph.svg" bağlantısını tıklayın.

Araç tamamen istemci tarafıdır ve bu nedenle Git verilerinizin hiçbiri sunucumla paylaşılmaz. Ayrıca HTML + JS'yi yerel olarak kaydedebilir ve "file: ///" URL'lerini kullanarak çalıştırabilirsiniz. Ubuntu 12.04'te Chrome 48 ve Firefox 43'te doğrulandı.

Doğrudan herhangi bir sayfaya (blogspot bloglama motoru dahil!) Gönderilebilen HTML üretir. Blog yazılarının bazılarına bir göz atın:

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

Araç tarafından oluşturulan örnek bir HTML dosyasının ekran görüntüsü:

http://bit-booster.com/graph.html (araç)


1
@ Görünüşe göre renk o dalın girinti seviyesini yansıtır ve dallar başka bir sütuna geçebilir ve bu nedenle renk değiştirebilir. S
Thorbjørn Ravn Andersen

44

İlgili bir sorunun cevabında bulduğum bir Graphviz betiğine dayanarak, git deposunun özet görünümünü oluşturan yakut bir betiği hackledim . Tüm lineer tarihi kullanır ve sadece "ilginç" taahhütleri gösterir, yani birden fazla ebeveyni, çok çocuğu olan veya bir şube veya etiketle gösterilenler. İşte jquery için oluşturduğu grafiğin bir parçası :

jquery örneği

git-big-picture ve BranchMaster , bir grafiğin yalnızca üst düzey yapısını göstermeye çalışan, yalnızca etiketlerin, dalların, birleşmelerin vs. ilişkilerini görüntüleyen benzer araçlardır.

Bu sorunun başka seçenekleri de var.


2
Bunu denedim, ama repo (42 şube, 175 etiket, 42.000 taahhüt) çıktı ile doğru çalışmak için nokta alamadım ... Çok kötü ... Ben tam aradığım bu!
Xavier Nodet

1
@XavierNodet, repo'nuz herkese açıksa ve / veya hata mesajı vb. Varsa, lütfen GitHub'da bir sorun açın. Teşekkürler!
Matt McHenry

38

Üç özel komutlar ekledik: git tree, git streeve git vtree. Bu sırayla onları aşacağım.

[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)'

resim açıklamasını buraya girin

İle git streeve git vtreebiçimlendirmeye yardımcı olmak için bash kullanıyorum.

[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: Bu git sürüm 1.9a ile çalışır. 'Auto' renk değeri görünüşe göre bu sürümde görücüye çıkıyor. Bu güzel bir ek çünkü şube isimleri farklı bir renk alacak. Bu, örneğin yerel ve uzak dallar arasında ayrım yapmayı kolaylaştırır.


fatal: bad color value 'auto' for variable '--pretty format':(
döner

Git'in eski bir sürümü olduğu ortaya çıktı. Yum, deposunda Git'in oldukça eski bir sürümüne sahiptir. Kaynaktan (1.9) derlendi ve harika çalışıyor. Çok güzel! Teşekkürler @ gospes!
Döner

OS X'e sed: illegal option -- r
geçmeyin

@ SlippD.Thompson: Linux kullanıyorum :). -R, genişletilmiş düzenli ifadeler içindir. Görünüşe göre sed'in OSX sürümü buna sahip değil. Belki sed'i güncelleyebilirsiniz. Aksi takdirde, genişletilmiş normal ifade olmadan sed komutunu yeniden yazabilirsiniz.
Nisan'ta gospes

1
Mac OS X sed için -r yerine -E kullanın
Baxter Lopez

37

Neye benzediklerine bağlı. Bunun gibi resimler yapan gitx kullanıyorum :

basit arsa

Sen karşılaştırabilirsiniz git log --graph(aslen nereli 24 yollu ahtapot birleştirme üzerine vs gitk http://clojure-log.n01se.net/date/2008-12-24.html ):

24 yönlü git ahtapot birleştirme.  Orijinal URL <code> http://lwn.net/images/ns/kernel/gitk-octopus.png </code> idi


49
Çok komik ... Yemin ederim "24-yollu ahtapot birleştirme" dediğini duydum!
dty

4
Merak ettik, kimse GitX'in (veya başka bir GUI git aracının) çizim rutinlerini bağımsız bir yürütülebilir dosyaya çıkarmaya çalıştı mı? Yanılmıyorsam, Cocoa'yı bir vektör PDF dosyasına çizmek zor olmayacaktı ve OP'nin yüksek Q yazdırılabilir görüntü ihtiyacını karşılayacaktı.
Slipp D.Thompson

İşlerini yeniden düzenlemeden önce S3'teydi. Keşke hala olsaydı. :(
Dustin

Sadece bir gitk sürümüyle yerini lwn.net/images/ns/kernel/gitk-octopus.png bağlanan, clojure-log.n01se.net/date/2008-12-24.html . @Dustin: Umarım sorun değil. Aynı görüntü değil, ama benzer bir amaca hizmet ediyor. Ekran görüntüsünden, linux çekirdeğinin bir parçası gibi görünüyor, bu yüzden bu taahhüdü bulabilir ve eşdeğer bir gitx ekran görüntüsünü tekrar alabilirsin ....
naught101

34

Daha ayrıntılı metin çıktısı için lütfen şunları deneyin:

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

$ HOME / .gitconfig içinde takma ad yazabilirsiniz

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

29

Bu konudaki benim görüşüm:

Ekran görüntüsü:

Ekran görüntüsü

Kullanımı:

git hist - Mevcut şubenin geçmişini göster

git hist --all - Tüm dalların grafiğini göster (uzaktan kumandalar dahil)

git hist master devel - İki veya daha fazla şube arasındaki ilişkiyi göster

git hist --branches - Tüm yerel şubeleri göster

--topo-orderSıralamaya ekle , tarihe göre değil topolojik olarak işliyor (bu takma adda varsayılan)

Yararları:

  • Tıpkı düz gibi görünüyor --decorate, bu nedenle farklı dal adları için ayrı renkler var
  • Committer e-postası ekler
  • Taahhüt göreli ve mutlak tarihi ekler
  • Tarihe göre sıralama yapar

Kurmak:

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

Bazen gitg kullanmamıza rağmen , her zaman komut satırına geri dön:

[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 

Gördüğünüz gibi, aşağıdakilere dayanan neredeyse bir tuş vuruşu takma adı:

  • --renk: net görünüm
  • --graph: ebeveynleri görselleştirin
  • --tarih-sipariş: repo en anlaşılır bakış
  • --değiştir: kim kimdir
  • --oneline: Bir taahhüt hakkında bilmeniz gereken birçok şey
  • - dekorasyona göre sadeleştirme: ilk bakış için temel (yalnızca etiketler, alakalı birleştirmeler, dallar)
  • --all: bu seçeneği olan ve olmayan tüm takma adlarla tuş vuruşlarını kaydetme
  • --date = relative (% ar): Repodaki etkinliği anlayın (bazen bir şube master'ın yakınında birkaç ay ancak ondan aylar önce)

Git'in son sürümünde (1.8.5 ve üzeri)% d süslemesinde% C'den (otomatik) yararlanabilirsiniz

Buradan ihtiyacınız olan her şey, ihtiyacınız olan her şeyi filtrelemek için gitrevisions'ı iyi anlamaktır ( master..develop gibi bir şey - burada --simplify-merges uzun vadeli dallarda yardımcı olabilir)

Komut satırının arkasındaki güç, ihtiyaçlarınıza göre hızlı bir şekilde yapılandırılır (bir repo'nun benzersiz bir anahtar günlüğü yapılandırması olmadığını anlayın, bu nedenle --numstat veya --raw veya --name-status eklemek bazen gereklidir. ve takma adlar hızlı, güçlü ve (zamanla) elde edebileceğiniz en güzel grafiktir. gitgraph gibi projelerle


Çok hoş. Bunları benim yapılandırmaya ekliyorum. Ama% Cred% d% Creset'i% C (otomatik)% d% Creset olarak değiştirmenizi öneririm, bu da uzak veya yerel şube adları için farklı renkler verir
MarkB42

17

Slipp'in müthiş cevabını çok hafifçe değiştirerek , takma adlarını yalnızca bir dalı günlüğe kaydetmek için kullanabilirsiniz:

[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"

Kapalı bırakarak --allşimdi yapabilirsiniz

git lgBranch1 <branch name>

ya da

git lgBranch1 --all


14

Grafik geçmişini görüntülemek için bu git logdiğer adı var ~/.gitconfig:

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

Bu yerinde iken, şöyle bir git lçıktı verecektir:

resim açıklamasını buraya girin

Git 2.12 + 'da log.graphColorsyapılandırma seçeneğini kullanarak grafiğin çizgi renklerini bile özelleştirebilirsiniz .

Günlüklerin biçimine gelince --oneline, yazar adının (saygılı .mailmap) ve ilgili yazar tarihinin eklenmesiyle benzerdir . O Not %C(auto)karma taahhüt için varsayılan renkleri kullanmak Git söyler sözdizimi, vb Git> = desteklenir 1.8.3 .


1
git log --graph --oneline oneliner'ın kaybolmadığından emin olmak için
tsenapathy

sol tarafa şube isimleri koymanın bir yolu var mı?
anaval

12

Denediniz mi gitkyoksa gitk --all? Ancak bir print / save img işlevine sahip değildir.


3
gitk etkili ama çok güzel değil.
Johan

Yerleşik olarak gelmesi benim için hoş ve sorunsuz hale getiriyor. Özellikle --alltüm şubeleri gösterir.
Gizli


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

Bu benim terminal varyasyonum, buradaki birçok cevaba benzer. lessSözcük kaydırmayı önlemek için geçirilen bayrakları ayarlamayı seviyorum .

örnek çıktı

Komut biraz hantal olduğu için bunu hızlı erişim için bir takma ada ayarladım.


8

Deneyin ditaa . Herhangi bir ASCII diyagramını bir görüntüye dönüştürebilir. Git şubeleri göz önünde bulundurularak tasarlanmamış olmasına rağmen sonuçlardan çok etkilendim.

Kaynak (txt dosyası):

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

Komut:

java -jar ditaa0_9.jar ascii-graph.txt

Sonuç:

resim açıklamasını buraya girin

Ayrıca arka plan renklerini, kesikli çizgileri, farklı şekilleri ve daha fazlasını destekler. Örneklere bakın .


1
Benzer bir şekilde, casual-effects.com/markdeep , elle düzenlenmiş ascii sanat diyagramlarını ladinlemek için çok güçlüdür.
Beni Cherniavsky-Paskin

7

Deponuz Gitlab'da bulunuyorsa, grafik temsilini tarayıcınızda SVG olarak oluşturulmuş haliyle kullanabilirsiniz.

  • Deponuzun grafik görünümüne gidin, örneğin, https://gitlab.com/gitlab-org/gitter/webapp/network/develop

  • Grafiği aşağıya doğru kaydırın (tembel yükler devreye girer!)

  • SVG öğesini yeni bir dosyaya kopyalamak için tarayıcınızın denetçisini kullanın

  • İstediğiniz bir oluşturucuda açın, örneğin Inkscape

resim açıklamasını buraya girin


6

Doğrudan bir araç hakkında bilmiyorum, ama belki verileri nokta biçimine aktarmak ve graphviz ile işlemek için bir komut dosyasını hackleyebilirsiniz.


Bunu github.com/gugod/bin/blob/master/git-graphviz deneyin . Kurumsal ortamımdaki tüm bağımlılıklara sahip değildim, bu yüzden bu iokomutları basit perl `git log [...]` komutlarına dönüştürmek benim için çalıştı.
Ross Rogers

Bir mac kullanıyorsanız ve bu komut dosyasını denemek istiyorsanız , bağımlılıkları almak için perl ile brew install perl dotve sonra cpan common::sense IO::allalabilirsiniz. Sonra, çıktıyı sadece uygun bir komuta yönlendirin git-graphviz | dot -Tpng -o repo.png. Ancak, çıktı git-big-picture'den çok farklı değildir .
jrhorn424

6

Raphael web grafik kütüphanesinin demolarından biri olarak korkak bir Git işleme grafiği var .

Demo statiktir, ancak canlı bir veri kümesi için kodu alıp statik verilerini değiştirecek kadar kolay olmalıdır - bence sadece Git JSON biçimindeki verileri veriyorum.

Demo burada: http://dmitrybaranovskiy.github.io/raphael/github/impact.html


1
Bu, GitHub'ın etki grafiklerinde kullanılan grafik kodunun aynısı değil mi? (örn. github.com/DmitryBaranovskiy/raphael/graphs/impact )
Slipp D.Thompson

@Sven: Bunu işaret ettiğiniz için teşekkür ederim. Kırık bağlantıları sizin için düzelttim, ancak bu cevabın beş yaşında olduğunu ve bu nedenle daha yakın zamanda daha iyi bir çözüm olabileceğini unutmayın.
Spudley


6

Kabuklar için güzel ve temiz görünümlü tablelike git grafik çıktısı

grafik ağacının yanı sıra genellikle karmalarla

grafik ağacının yanı sıra genellikle karmalarla

veya fazladan bir sütunda

veya fazladan bir sütunda

Edit : Açıklamaları okumadan hemen başlamak ister misiniz? Aşağıdaki EDIT 5 bölümünden git takma adı, komut dosyası veya işlev kodu parçacıkları kullanın .

Bu sorunun tüm cevaplarında hiçbiri şu ana kadar mermiler için temiz bir tablo benzeri çıktı vermedi. En yakın ben başladığım gospes bu cevaptı .

Yaklaşımımdaki temel nokta, yalnızca kullanıcıya gösterilen ağaç karakterlerini saymaktır. Sonra beyaz boşluklarla kişisel bir uzunluğa kadar doldurun.

Git dışında bu araçlara ihtiyacınız var

  • grep
  • yapıştırmak
  • printf
  • sed
  • seq
  • tr
  • tuvalet

çoğunlukla herhangi bir linux dağıtımı ile gemide.

Kod pasajı

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

Kullandığımız gerekli boşluk alanlarını hesaplamak için

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

karakterleri (satır başına 500'e kadar) almak için yalnızca ağaç karakterlerini seçin: * | / \ _ ve beyaz boşluklarla

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

nihayet onları sayın ve sonucu örnekte 9 olan seçilen uzunluk değerimizden soyutlayın.

Hesapladığımız beyaz boşluk miktarını üretmek için

  seq -s' ' $whitespaces

ve konum numaralarını

  tr -d '[:digit:]'

grafik çizgimizin sonuna ekleyin. Bu kadar!

Git, sözdizimi ile çıktı belirteçlerinin uzunluğunu biçimlendirmek için güzel bir seçeneğe sahiptir; '%><(amount_of_characters,truncate_option)'bu, sol '>' veya sağ '<' tarafından boşluklar ekler ve karakterleri 'ltrunc', orta 'mtrunc' veya sondan kesebilir 'trunc'.

Bu ise önemli bir karşılık gelen git sütun için aynı uzunluk değerleri Printf cmd en yukarıdaki kullanım olduğu.

Kendi temiz tablelike çıktılarınızı ihtiyaçlarınıza göre şekillendirmek için eğlenin.

Ekstra:

Doğru uzunluk değerini almak için aşağıdaki snippet'i kullanabilirsiniz

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:' ')

ve yukarıdaki doğru uzunluk değeri olarak $ max_chars kullanın.


DÜZENLEME 1 : Sadece alt çizgi karakterinin git ağacında da kullanıldığını ve yukarıdaki kod parçacıklarını buna göre düzenlediğini fark ettim. Eksik başka karakterler varsa, lütfen yorum bırakın.


DÜZENLEME 2 : Dal ve etiket girişleri etrafındaki köşeli parantezlerden kurtulmak istiyorsanız, EDIT 3'teki gibi git komutunda "% d" yerine "% D" kullanın.


DÜZENLEME 3 : Belki "otomatik" renk seçeneği şube ve etiket girişleri için en çok tercih ettiğiniz seçenek?

git bracketless otomatik renk kafası ve etiket tablo benzeri kabuk çıktı

Git komutunun bu bölümünü değiştirin (renk 214 )

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

için oto

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


EDIT 4 : Yoksa bu parça için kendi renk karışımınızı mı, yanıp sönen kafalı süslü bir çıktı mı?

git ağaç fantezi tarz tablo benzeri çıktı

Baş, şube adları ve etiketleri biçimlendirebilmek için önce EDIT 3'teki gibi git komutumuzda "otomatik" renk seçeneğine ihtiyacımız var.

Sonra bu 3 satırı ekleyerek renk değerlerini kendi değerimizle değiştirebiliriz

 # 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}

çizgiden hemen önce

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

kod snippet'imizde. Değiştirme değerleri yukarıdaki renkleri üretir.

Örneğin kafa için değiştirme değeri

3;5;1;38;5;196

burada 3; italik, 5; yanıp sönme için ve renk için 1; 38; 5; 196. Daha fazla bilgi için buradan başlayın. Not: Bu davranış, sık kullandığınız terminale bağlıdır ve bu nedenle kullanılamayabilir.

AMA tercih ettiğiniz herhangi bir renk değerini seçebilirsiniz.

Git renk değerleri ve ANSI eşdeğerlerine genel bakış

resim açıklamasını buraya girin

Git renk / stil seçeneğine sahip bir liste burada bulabilirsiniz .

Doğru renkler için konsolunuzdaki çıktıya ihtiyacınız varsa (yukarıdaki resim yığın akışı tarafından ölçeklendirilir)

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 log çıktısından ilk komutu kullanan git proje yolunuzda.


DÜZENLEME 5 : Üye "Andras Deak" belirtildiği gibi, bu kodu kullanmanın bazı yolları vardır:

1) takma ad olarak :

takma ad parametreleri kabul etmez, ancak bir işlev .bashrc dosyasında tanımlayabilir.

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

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

   }

git git yolunu veya ilk parametre olarak git proje yolunuzla istediğiniz yerden git_tably (tablelike'den türetilmiş) fonksiyonunu çağırın.

2) kabuk komut dosyası olarak :

Bir git proje dizinini ilk parametre olarak geçirme seçeneği ile kullanıyorum veya boşsa, çalışma dizinini normal davranış gibi alın. Bütünüyle elimizde

# 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) git takma adı olarak :

Belki de en rahat yolu .gitconfig dosyanıza git takma adı eklemektir

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

Sadece git tablyherhangi bir proje yolu altında arayın .

Git o kadar güçlü ki kafa, etiketler, ... direk yukarıda gösterildiği gibi buradan alınabilir .

Bir başka süslü seçenek , en çok tercih ettiğiniz ağaç renklerini seçmektir

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

Bu çılgın görünümlü ama her zaman tablelike git log çıkışları verir

fanciest_git_tree_tablelike_image

Çok fazla yanıp sönüyor! Sadece neyin mümkün olduğunu göstermek için. Çok az belirtilen renk, renk tekrarlarına yol açar.

Tam bir .gitconfig referansı sadece bir tık uzaklıktadır.

TEKRAR: Kendi temiz tablel görünümlü çıktılarınızı ihtiyaçlarınıza göre şekillendirmek için eğlenin.


Cevabınızda, bu bash snippet'lerinin nasıl süslü git log benzeri komutlara dönüşeceğini açıklamalısınız. Biri sizin bağladığınız cevaba bakarak kullanımları bulabilir, fakat cevaplar kendi içinde olmalıdır
Andras Deak

Yani git log cmd'sini ayrıntılı olarak açıklamalıyım? Ya da eksik olana bir örnek verebilir misin lütfen?
onemorequestion

Not: awesome git log komutunun çıktısı bu snippet tarafından bir uçbirimdeki tablo benzeri çıktıyı almak için kullanılır. Yani, bahsettiğiniz gibi başka bir yol;)
onemoreestest

Her ihtiyacınız olduğunda 20 satır bash yazmadığınızı düşündüm. Bunu bir bash işlevi veya git diğer adı olarak tanımlamak mantıklıdır. Çoğu okuyucu, kolayca kullanılabilir hale getirmek için kodunuzu tamamlamaya çalışmaktan rahatsız olmaz. Demek istediğim şey o. Kodu sadece yolunuzdaki rastgele bir sh dosyasına koyarsanız beni göz ardı edebilirsiniz.
Andras Deak

1
Anlıyorum. Tavsiyelerin için sağol. Cevabımı düzenleyeceğim ve böyle bir takma ad ekleyeceğim. Normalde sözünü ettiğiniz gibi "uzun" komutlar için dosyalar kullanıyorum. Ama burada her iki yolun da yazılması çok daha rahat.
onemorequestion

5

~ / .oh-my-zsh / plugins / git / git.plugin.zsh dosyasındaki bazı takma adlar

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 kullanıcıları için, @gospes örneğini aldım ve gsed ( gnu-sedhomebrew üzerinden yüklendi) için biraz değiştirdim ve renkleri ayarladım (siyah bir arka planla çalışmak için, orijinal örneğin muhtemelen siyah arka plana sahip bir terminaldeki siyah metni belirttiği için).

[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'in anahtarı ilk olarak gnu sed (-r seçeneğine sahiptir) yüklemektir. En kolay sistem tarafından kurulan sed üzerine yazmaz, ancak bunun yerine gnu sed "gsed" olarak yükleyecek homebrew ile yapılır. Bu OSX çalışma hakkında yukarıda yorumladı @ SlippD.Thompson yardımcı olur umarım .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.