Grafik cabang git cantik

1385

Saya telah melihat beberapa buku dan artikel memiliki grafik git dan komitmen yang sangat cantik. Bagaimana saya bisa membuat gambar git history yang dapat dicetak berkualitas tinggi?

krosenvold
sumber
4
Saya telah membuat skrip python untuk membuat grafik graphiz! Lihatlah. github.com/chode/git-graph
Stephan Bechter
4
Jika Anda ingin kualitas tinggi dan dapat dicetak, alat saya ( bit-booster.com/graph.html ) mengubah "git log" menjadi SVG. Untuk informasi lebih lanjut, lihat jawaban saya .
G. Sylvie Davies
2
Apakah Anda mencari alat untuk memvisualisasikan sejarah git Anda sendiri - atau - alat pembuatan bagan yang memiliki cara untuk menggambar "cabang Git" yang cantik?
Uri Abramson
1
Kemungkinan duplikat dari memvisualisasikan topologi cabang di git
trblnc
5
Saya akan menghapus tag diarahkan-asiklik-grafik karena tidak relevan dengan pertanyaan ini
Maksim Dmitriev

Jawaban:

1843

Pembaruan: Jawaban ini jauh lebih menarik daripada yang seharusnya. Itu awalnya diposting karena saya pikir grafik terlihat bagus dan mereka bisa ditarik di Illustrator untuk publikasi - dan tidak ada solusi yang lebih baik. Tetapi sekarang ada jawaban yang jauh lebih berlaku untuk Q ini, seperti fracz , Jubobs , atau Harry Lee ! Silakan pilih mereka !!

Pembaruan 2: Saya telah memposting versi perbaikan dari jawaban ini ke topologi cabang Visualisasi di pertanyaan git , karena jauh lebih tepat di sana. Versi itu termasuk lg3, yang menampilkan info pembuat dan pengangkut, jadi Anda harus memeriksanya. Meninggalkan jawaban ini karena alasan historis (& perwakilan, saya akui), meskipun saya benar-benar tergoda untuk menghapusnya saja.

2 ¢ saya: Saya memiliki dua alias yang biasanya saya masukkan ke ~/.gitconfigfile saya :

[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 lgSaya git lg1terlihat seperti ini:
git lg1

dan git lg2terlihat seperti ini:
git lg2

Slipp D. Thompson
sumber
35
Ya tentu. Warna normal dan cerah / tebal adalah: Hitam #202020/ #555555, Merah: #5d1a14/ #da4939, Hijau: #424e24/ #a5c261, Kuning: #6f5028/ #ffc66d, Biru: #263e4e/ #6d9cbe, Magenta: #3e1f50/ #a256c7, Cyan: #234e3f/ #62c1a1, dan Putih: #979797/ #ffffff.
Slipp D. Thompson
3
@ Turbo: Bagi saya, warnanya dapat diubah dalam pengaturan profil untuk aplikasi terminal saya (Terminal.app). Aplikasi terminal yang Anda gunakan mungkin atau mungkin tidak mendukung perubahan warna yang ditampilkan untuk warna ANSI yang diberikan. Juga, tanda hubung (em tanda hubung, akurat) telah dibuat dengan opsi-shift- [kunci tanda hubung minus]. Saya kira saya salah berasumsi bahwa semua platform saat ini up-to-snuff dengan Unicode.
Slipp D. Thompson
3
Anda --date=relativedan --abbrev-commitberlebihan karena Anda secara eksplisit menggunakan %crdan %h, masing-masing.
graywh
6
Saya akan menambahkan %C(auto)modifier ke refnames ( %d) untuk mendapatkan warna yang lebih bagus. Lihat stackoverflow.com/questions/5889878/color-in-git-log/…
Josef Eisl
2
Jawaban yang bagus Saya telah memodifikasi perintah agar terlihat lebih seperti keluaran --oneline --decorate denganlg = 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
1199

Banyak jawaban di sini bagus, tetapi bagi mereka yang hanya menginginkan satu baris jawaban langsung tanpa harus mengatur alias atau tambahan apa pun, ini dia:

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

Tidak semua orang akan melakukannya git logsetiap saat, tetapi ketika Anda membutuhkannya, ingat saja:

" A Dog " = git log - sebuah ll - d ecorate - o neline - g raph

masukkan deskripsi gambar di sini

Patoshi パ ト シ
sumber
252
git config --global alias.adog "log --all --decorate --oneline --graph"
fracz
4
Saya sudah mencari- --allcari begitu lama hingga saya akan menangis (T_T) TERIMA KASIH!
Felipe Gerard
2
--oneline diperkenalkan di Git 1.6.3: github.com/git/git/blob/... --pretty = oneline akan bekerja dengan versi Git sebelum 1.6.3
Pat Myron
13
jawaban terbaik untuk SO. Terima kasih telah menjaganya tetap ringan.
Tobias Feil
4
Saya pikir "--decorate" sekarang disertakan secara default. Tapi aku akan tetap ingat akronimnya dengan cara ini!
Josiah Yoder
378

Untuk output teks Anda dapat mencoba:

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

atau:

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

atau: inilah alias graphviz untuk menggambar grafik DAG.

Saya pribadi menggunakan gitx, gitk --alldan gitnub.

keo
sumber
14
saya akan menambahkan --abbrev-commit --decorate, dan kemudian sempurna!
asimetris
6
--abbrev-commit tersirat oleh --oneline, bukan?
dwineman
4
@ Franklin, ya Anda tidak perlu --abbrev-commitjika Anda menggunakan--oneline
Thomas
2
Tampaknya di baris kedua Anda git log --graph --oneline --decorate --date=relative --allyang --dateargumen tidak berguna. Saya tidak dapat melihat tanggal yang ditampilkan di log.
Lerner Zhang
tanggal tidak ditampilkan ketika --oneline ditentukan
martinkunev
253

Gitgraph.js memungkinkan untuk menggambar cabang-cabang git cantik tanpa repositori. Cukup tulis kode Javascript yang mengonfigurasi cabang Anda dan melakukan dan merendernya di browser.

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

grafik sampel yang dihasilkan dengan Gitgraph.js

atau dengan metrotemplat:

Tema metro GitGraph.js

atau dengan pesan komit, penulis, dan tag:

GitGraph dengan pesan komit

Uji dengan JSFiddle .

Hasilkan dengan Git Grapher oleh @bsara.

fracz
sumber
3
Yay, itu benar-benar luar biasa! Diposting di fiddle jsfiddle.net/guan1oz1 sehingga Anda dapat mengujinya segera.
Berkus
14
Namun, panah harus mengarah ke orang tua, bukan ke anak-anak.
jub0bs
4
@Jubobs: Poin bagus. Itu adalah rintangan umum bagi orang yang mencoba memahami Git: mereka memikirkan urutan waktu alih-alih warisan. Menjelaskan bahwa (hampir) semua yang ada di git adalah relatif terhadap sesuatu sebelum membantu semua bagian lainnya masuk ke tempatnya.
Slipp D. Thompson
6
Mengenai arah panah, dari dokumen: * @param {Boolean} [options.reverseArrow = false] - Jadikan panah mengarah ke leluhur jika benar
Scott
2
FYI, setelah melihat posting ini dan bermain dengan gitgraph.js, saya memutuskan untuk membuat alat kecil yang pada dasarnya menempatkan UI ke gitgraph.js. Ini belum selesai, dan UI belum berada di tempat yang saya inginkan, tetapi kontribusi dipersilahkan! lihat: github.com/bsara/git-grapher
bsara
123

Dibangun di atas TikZ & PGF , gitdagsadalah paket kecil LaTeX yang memungkinkan Anda untuk dengan mudah menghasilkan grafik vektor-komitmen, dan banyak lagi.

Pembuatan grafik komit repositori yang sudah ada secara otomatis bukanlah tujuan dari gitdags; grafik yang dihasilkannya hanya dimaksudkan untuk tujuan pendidikan .

Saya sering menggunakannya untuk menghasilkan grafik untuk jawaban saya atas pertanyaan Git, sebagai alternatif untuk grafik komit ASCII:

Berikut adalah contoh grafik yang menunjukkan efek rebase sederhana:

masukkan deskripsi gambar di sini

\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}
jub0bs
sumber
1
@Itu terlihat hebat! Saya juga ingin beberapa baris tentang cara menggunakannya: pertimbangkan pengguna Windows yang tidak menginstal LaTeX sama sekali. Bagaimana cara menghasilkan grafik dari awal?
VonC
1
@VonC Saya tidak yakin, tetapi jika Anda tidak ingin menginstal LaTeX, Anda mungkin dapat menghasilkan grafik Anda di ShareLatex dan WriteLaTeX , dan sejenisnya. Saya akan melihat ke dalamnya dan memperluas wiki ketika saya memiliki lebih banyak waktu ... Jangan ragu untuk mempromosikan paket:)
jub0bs
Ini barang bagus! Saya akan menulis tutorial di beberapa titik, tetapi untuk sekarang, saya hanya ingin menyebutkan bahwa Anda dapat memposting proses grafik Anda menggunakan documentclass standalone (saya menggunakan fitur krop), gunakan latex input.texuntuk menghasilkan dvi, dan akhirnya menggunakan dvisvgm input.dviuntuk menghasilkan SVG dengan transparansi. Konversi dari SVG ke format raster seperti PNG cukup mudah convert -antialias -density 300 -background none input.svg output.png. Omong-omong, gambar-gambar ini terlihat luar biasa dengan transparansi penuh. Masih bekerja pada masalah font ... i.imgur.com/1Xu2Ry5.png
vmrob
5
Butuh beberapa saat untuk menyelesaikannya, jadi saya menulis panduan langkah demi langkah bagaimana membuat gitdags bekerja dari nol di Ubuntu 14.04
ChrisFreeman
1
@AndreaPolci Lihat github.com/Jubobs/gitdags/issues/3 untuk contoh penggabungan. Dokumentasi gitdagssedang dalam perjalanan!
jub0bs
79

Gitg adalah tiruan dari Gitk dan GitX untuk GNOME (ini juga berfungsi pada KDE dll.) Yang menunjukkan grafik berwarna cantik.

Ini dikembangkan secara aktif (pada 2012). Ini memungkinkan Anda mengurutkan komit (grafik graph) baik secara kronologis atau topologis , dan menyembunyikan komit yang tidak mengarah ke cabang yang dipilih.

Ini berfungsi dengan baik dengan repositori besar dan grafik ketergantungan kompleks.

Contoh tangkapan layar, menampilkan repositori linux-git dan linux-2.6:

linux-git

linux-2.6

Siput mekanik
sumber
60

SourceTree sangat bagus. Itu memang mencetak sejarah ukuran sedang dan grafik cabang dan tampan: (berikut ini dilakukan pada proyek Git eksperimental hanya untuk melihat beberapa cabang). Mendukung Windows 7+ dan Mac OS X 10.6+.

masukkan deskripsi gambar di sini

http://www.sourcetreeapp.com/

nonopolaritas
sumber
Ini juga tersedia di App Store, jadi pembaruan harus bekerja secara otomatis.
WebOrCode
Saya suka grafik sourcetree, tetapi saya lebih suka menggunakan baris perintah, dan default sourcetree selalu mengacaukan repo saya.
SgtPooki
SourceTree akan bersikeras Anda membuat akun Atlassian (atau menggunakan akun google Anda dan memberikan Atlassian beberapa izin untuk mendapatkan email dan info profil), dan setelah menginstal di Mac (OS X El Capitan v 10.11.5) gagal pada langkah 'Kloning': "fatal: tidak ditemukan pemetaan submodule di .gitmodules untuk path '<path dilewati>'" dan juga peringatan aneh: "templat tidak ditemukan / usr / local / git / share / git-core / templates". Pesan yang sangat tidak jelas, tidak terlalu bagus.
Dmitry Shevkoplyas
3
Dan kemudian setelah pencopotan jangan lupa merapikan hak istimewa keamanan Google Anda yang Anda berikan sebelumnya: myaccount.google.com/security -> Aplikasi & situs yang terhubung -> Aplikasi yang terhubung ke akun Anda -> Kelola Aplikasi
Dmitry Shevkoplyas
60

Saya baru saja menulis satu alat yang dapat menghasilkan grafik komit git cantik menggunakan HTML / Kanvas.

Dan menyediakan plugin jQuery yang membuatnya mudah digunakan.

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

Pratinjau:

pratinjau

Harry Lee
sumber
Terlihat bagus, bagaimana Anda mendapatkan data yang sudah diformat untuk menggambar grafik ini?
Olga
3
@ Olga Saya baru saja menambahkan kode backend ke repo saya. Anda dapat melihat itu di github.
Harry Lee
56

git-forestadalah skrip perl yang sangat baik yang telah saya gunakan selama lebih dari satu tahun dan saya hampir tidak menggunakan git logperintah secara langsung lagi.

Ini adalah beberapa hal yang saya sukai dari skrip ini:

  • Menggunakan karakter unicode untuk menggambar garis-garis dalam grafik memberikan tampilan yang lebih berkesinambungan ke garis grafik.
  • Anda dapat menggabungkan --reversedengan output grafik, yang tidak mungkin dengan git logperintah biasa .
  • Ini digunakan secara git loginternal untuk mengambil daftar commit, sehingga semua opsi yang Anda berikan git logjuga dapat diteruskan ke skrip ini.

Saya memiliki alias menggunakan git-forestsebagai berikut:

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

Ini adalah bagaimana output terlihat di terminal:

masukkan deskripsi gambar di sini

Tuxdude
sumber
3
@ void.pointer - Ya itu tidak akan karena git-forest adalah skrip perl dan memiliki dependensi modul perl. Menjalankan git di bawah cygwin dengan modul perl yang diperlukan terpasang mungkin merupakan alternatif terbaik yang bisa Anda dapatkan jika Anda benar-benar menginginkan ini di Windows :)
Tuxdude
1
Wow, repo itu punya banyak alat hebat. Terima kasih!
Eldelshell
1
@MinGW (MSYS) berfungsi dengan baik di bawah Win $; instal CPANM; lalu Git.pm; buat alias dan Anda siap berangkat.
Sektor
apa itu emulator terminal yang sangat bagus yang Anda gunakan? Saya suka hal-hal indikator prompt grafis.
NH.
Bagaimana cara menginstal "skrip" ini? Saya di ubuntu.
user13107
50

Saya menulis alat web untuk mengubah log git menjadi grafik SVG yang cantik: Bit-Booster - Alat Menggambar Grafik Komit Offline

Unggah output dari git log --pretty='%h|%p|%d'langsung ke alat dan kemudian klik tautan "unduh graph.svg".

Alat ini murni sisi klien, dan tidak ada data Git Anda yang dibagikan dengan server saya. Anda juga dapat menyimpan HTML + JS secara lokal dan menjalankannya menggunakan URL "file: ///". Diverifikasi pada Chrome 48 dan Firefox 43 di Ubuntu 12.04.

Ini menghasilkan HTML yang dapat diposting langsung ke halaman mana pun (termasuk mesin blogging blogspot!). Lihatlah beberapa posting blog di sini:

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

Berikut screenshot dari contoh file HTML yang dihasilkan oleh alat:

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

G. Sylvie Davies
sumber
1
@Jay muncul warna mencerminkan tingkat lekukan itu cabang tertentu, dan bahwa cabang dapat pindah ke kolom lain dan karena itu perubahan color.s
Thorbjørn Ravn Andersen
44

Berdasarkan skrip Graphviz yang saya temukan dalam jawaban untuk pertanyaan terkait , saya meretas skrip ruby yang membuat tampilan ringkasan repositori git. Ini menghilangkan semua sejarah linier dan hanya menunjukkan komitmen "menarik", yaitu yang memiliki banyak orang tua, banyak anak, atau ditunjukkan oleh cabang atau tag. Berikut cuplikan grafik yang dihasilkannya untuk jquery :

sampel jquery

git-big-picture dan BranchMaster adalah alat serupa yang mencoba menunjukkan hanya struktur tingkat tinggi dari grafik, dengan hanya menampilkan bagaimana tag, cabang, penggabungan, dll terkait.

Pertanyaan ini memiliki beberapa opsi lagi.

Matt McHenry
sumber
2
Saya mencoba ini, tetapi tidak dapat membuat titik bekerja dengan benar dengan output untuk repo kami (42 cabang, 175 tag, 42.000 komit) ... Sayang sekali ... Itulah yang saya cari!
Xavier Nodet
1
@XavierNodet, jika repo Anda bersifat publik dan / atau Anda memiliki pesan kesalahan, dll., Silakan ajukan masalah pada GitHub. Terima kasih!
Matt McHenry
38

Saya telah menambahkan tiga perintah kustom: git tree, git streedan git vtree. Saya akan membahasnya dalam urutan itu.

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

masukkan deskripsi gambar di sini

Dengan git streedan git vtreesaya telah menggunakan bash untuk membantu memformat.

[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: Ini bekerja dengan git versi 1.9a. Nilai warna 'otomatis' tampaknya memulai debutnya dalam rilis ini. Ini tambahan yang bagus karena nama cabang akan mendapatkan warna yang berbeda. Ini membuatnya lebih mudah untuk membedakan antara cabang lokal dan remote misalnya.

Injil
sumber
fatal: bad color value 'auto' for variable '--pretty format':(
Putar
Ternyata git versi lama. Yum memiliki versi Git yang cukup ketinggalan zaman di repo-nya. Dikompilasi dari sumber (1.9) dan berfungsi dengan baik. Itu indah juga! Terima kasih @gospes!
Putar
Jangan buka OS X:sed: illegal option -- r
Slipp D. Thompson
@ SlippD.Thompson: Saya menggunakan linux :). -R adalah untuk ekspresi reguler yang diperluas. Rupanya versi sed OSX tidak memilikinya. Mungkin Anda bisa memperbarui. Jika tidak, Anda bisa menulis ulang perintah sed tanpa regex yang diperluas.
gospes
1
Untuk Mac OS X sed, gunakan -E bukan -r
Baxter Lopez
37

Tergantung pada apa yang mereka terlihat. Saya menggunakan gitx yang membuat gambar seperti ini:

plot sederhana

Anda dapat membandingkan git log --graphvs gitk pada penggabungan gurita 24-arah (aslinya dari http://clojure-log.n01se.net/date/2008-12-24.html ):

24-way git gurita bergabung.  URL asli adalah <code> http://lwn.net/images/ns/kernel/gitk-octopus.png </code>

Dustin
sumber
49
Ini lucu ... Aku bersumpah aku mendengar kamu berkata "24-way octopus merge"!
dty
4
Karena penasaran, adakah yang mencoba mengekstraksi rutinitas GitX's (atau GUI git tool lain) menjadi executable mandiri? Jika saya tidak salah, membuat Kakao untuk menarik ke file vektor PDF tidak akan sulit, dan akan memenuhi kebutuhan OP untuk citra cetak Q tinggi.
Slipp D. Thompson
Itu di S3 via skitch sebelum mereka redid hal mereka. Saya berharap saya masih memilikinya. :(
Dustin
Baru saja menggantinya dengan versi gitk dari lwn.net/images/ns/kernel/gitk-octopus.png , ditautkan dari clojure-log.n01se.net/date/2008-12-24.html . @Dustin: harap tidak apa-apa. Ini bukan gambar yang sama, tetapi memiliki tujuan yang sama. Dari tangkapan layar, sepertinya itu adalah bagian dari kernel linux, jadi saya kira Anda bisa menemukan komit itu dan mengambil ulang tangkapan layar gitx yang setara ....
naught101
34

Untuk output teks yang lebih rinci, silakan coba:

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

Anda dapat menulis alias di $ HOME / .gitconfig

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

Ini adalah pendapat saya tentang masalah ini:

Tangkapan layar:

Tangkapan layar

Pemakaian:

git hist - Tampilkan riwayat cabang saat ini

git hist --all - Tampilkan grafik semua cabang (termasuk remote)

git hist master devel - Tunjukkan hubungan antara dua atau lebih cabang

git hist --branches - Tampilkan semua cabang lokal

Menambahkan --topo-order untuk mengurutkan komit secara topologis, bukan berdasarkan tanggal (default dalam alias ini)

Manfaat:

  • Tampak seperti biasa --decorate , jadi dengan warna terpisah untuk nama cabang yang berbeda
  • Menambahkan email committer
  • Menambahkan komit relatif dan tanggal absolut
  • Urusan dilakukan berdasarkan tanggal

Mendirikan:

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)'"
drzymala
sumber
28

gitg : penampil repositori berbasis gtk, itu baru tapi menarik dan bermanfaat
http://git.gnome.org/browse/gitg
Saya menggunakannya saat ini

saeedgnu
sumber
2
Tampaknya menjadi tiruan dari GitXdan cukup bagus. Rekomendasikan
Yarek T
28

Meskipun terkadang saya menggunakan gitg , selalu kembali ke baris perintah:

[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 

Seperti yang Anda lihat, hampir merupakan alias hemat tombol, berdasarkan:

  • --warna: terlihat jelas
  • --graph: memvisualisasikan orang tua
  • --date-order: lihat repo yang paling bisa dimengerti
  • --decorate: siapa adalah siapa
  • --oneline: Sering kali semua yang perlu Anda ketahui tentang komit
  • --simplify-by-decoration: dasar untuk tampilan pertama (hanya tag, gabungan yang relevan, cabang)
  • --all: menyimpan penekanan tombol dengan semua alias dengan dan tanpa opsi ini
  • --date = relatif (% ar): Memahami aktivitas dalam repo (kadang-kadang cabang sedikit melakukan dekat master tetapi beberapa bulan lalu darinya)

Lihat di git versi terbaru (1.8.5 ke atas) Anda bisa mendapat manfaat dari% C (otomatis) dalam menghias placeholder% d

Dari sini yang Anda butuhkan adalah pemahaman yang baik tentang gitrevision untuk menyaring apa pun yang Anda butuhkan (seperti master..develop, di mana --simplify-merge dapat membantu cabang-cabang jangka panjang)

Kekuatan di belakang baris perintah adalah konfigurasi cepat berdasarkan kebutuhan Anda (memahami repo bukan konfigurasi log kunci yang unik, sehingga menambahkan --numstat, atau --raw, atau --name-status kadang-kadang diperlukan. Di sini git log dan alias cepat, kuat, dan (seiring waktu) grafik tercantik yang dapat Anda capai, bahkan lebih lagi, dengan output yang ditunjukkan secara default melalui pager (katakan kurang) Anda selalu dapat mencari dengan cepat di dalam hasil. Tidak yakin? Anda selalu dapat menguraikan hasilnya dengan proyek-proyek seperti gitgraph

Albfan
sumber
Sangat bagus. Menambahkan ini ke konfigurasi saya. Tetapi saya merekomendasikan untuk mengubah% Cred% d% Creset menjadi% C (otomatis)% d% Creset yang akan memberikan warna berbeda untuk nama cabang jarak jauh atau lokal
MarkB42
17

Sangat sedikit mengutak-atik jawaban Slipp yang luar biasa , Anda dapat menggunakan aliasnya untuk login hanya satu cabang:

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

Dengan meninggalkan --allAnda sekarang dapat melakukannya

git lgBranch1 <branch name>

atau bahkan

git lgBranch1 --all
Peter Ajtai
sumber
15

Saya menyarankan tig https://github.com/jonas/tig , alat baris perintah yang jauh lebih baik untuk git.

Anda dapat menggunakan homebrew untuk menginstal tig di macOS:

$ brew install tig
$ tig

masukkan deskripsi gambar di sini

simpuljh
sumber
14

Saya memiliki git logalias ini ~/.gitconfiguntuk melihat riwayat grafik:

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

Dengan ini di tempat, git lakan menampilkan sesuatu seperti:

masukkan deskripsi gambar di sini

Di Git 2.12 + Anda bahkan dapat menyesuaikan warna garis grafik menggunakan log.graphColorsopsi konfigurasi.

Adapun format log, mirip dengan --oneline, dengan penambahan nama penulis (menghormati .mailmap) dan tanggal relatif penulis . Perhatikan bahwa %C(auto)sintaks, yang memberi tahu Git untuk menggunakan warna default untuk komit hash, dll. Didukung di Git> = 1.8.3 .

Eugene Yarmash
sumber
1
git log --graph --oneline hanya untuk memastikan penumpang tidak tersesat
tsenapathy
apakah ada cara untuk meletakkan nama cabang di leftside?
anaval
12

Apakah kamu sudah mencoba gitkatau tidak gitk --all? Namun tidak memiliki fungsi print / save img.

Adrian Panasiuk
sumber
3
gitk efisien tetapi tidak terlalu indah.
Johan
Kenyataan bahwa itu built-in membuatnya menyenangkan dan tidak merepotkan bagi saya. Terutama --allmenunjukkan Anda semua cabang.
BcK
12

GitGraph

Menghasilkan representasi PNG atau SVG dari riwayat komit Git Anda.

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

EddieG098
sumber
@AndyHayden: Bukan. Benar-benar berbeda. Membuat grafik sejarah git menggunakan Dia
rzymek
11
git -c core.pager='less -SRF' log --oneline --graph --decorate

Ini adalah variasi terminal saya, mirip dengan banyak jawaban di sini. Saya suka menyesuaikan bendera yang dilewati lessuntuk mencegah pembungkus kata.

contoh output

Saya mengatur ini ke alias untuk akses cepat karena perintahnya agak rumit.

Andy
sumber
8

Coba ditaa . Itu dapat mengubah diagram ASCII menjadi gambar. Meskipun tidak dirancang dengan mempertimbangkan cabang Git, saya terkesan dengan hasilnya.

Sumber (file txt):

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

Perintah:

java -jar ditaa0_9.jar ascii-graph.txt

Hasil:

masukkan deskripsi gambar di sini

Ini juga mendukung warna latar belakang, garis putus-putus, berbagai bentuk dan banyak lagi. Lihat contohnya .

fracz
sumber
1
Dalam nada yang sama, casual-effects.com/markdeep sangat kuat untuk merapikan diagram seni ascii yang diatur sendiri.
Beni Cherniavsky-Paskin
7

Jika repositori Anda berada di Gitlab, Anda dapat menggunakan representasi grafiknya seperti yang disajikan sebagai SVG di browser Anda.

masukkan deskripsi gambar di sini

bugmenot123
sumber
6

Saya tidak tahu tentang alat langsung, tapi mungkin Anda bisa meretas skrip untuk mengekspor data ke dalam format dot dan merendernya dengan graphviz.

Thomas
sumber
Coba yang ini github.com/gugod/bin/blob/master/git-graphviz . Saya tidak memiliki semua dependensi di lingkungan perusahaan saya, jadi mengubah ioperintah - perintah itu menjadi perintah sederhana perl `git log [...]` bekerja untuk saya.
Ross Rogers
Jika Anda menggunakan mac dan ingin mencoba skrip ini, Anda dapat menggunakan perl brew install perl dotdan kemudian cpan common::sense IO::allmendapatkan dependensinya. Kemudian, hanya pipa output ke perintah yang sesuai, seperti git-graphviz | dot -Tpng -o repo.png. Namun, outputnya tidak jauh berbeda dengan git-big-picture .
jrhorn424
6

Ada grafik komit Git yang funky sebagai salah satu demo dari perpustakaan grafik web Raphael .

Demo ini statis, tetapi harus cukup mudah untuk mengambil kode dan menukar data statis mereka dengan data live - Saya pikir itu hanya data komit Git dalam format JSON.

Demo ada di sini: http://dmitrybaranovskiy.github.io/raphael/github/impact.html

Spudley
sumber
1
Itu kode grafik yang sama yang digunakan pada grafik dampak GitHub, bukan? (mis. github.com/DmitryBaranovskiy/raphael/graphs/impact )
Slipp D. Thompson
@Ven: Terima kasih telah menunjukkan itu. Saya telah memperbaiki tautan yang rusak untuk Anda, walaupun harap diingat bahwa jawaban ini berusia lima tahun, dan dengan demikian mungkin ada solusi yang lebih baik baru-baru ini.
Spudley
@ SlippD.Thompson kode ini sekarang ada di github.com/DmitryBaranovskiy/raphaeljs.com/tree/master/github
Vadim Kotov
6

Output grafik git mirip tablelike yang bagus dan bersih untuk shell

dengan hash seperti biasa selain pohon grafik

dengan hash seperti biasa selain pohon grafik

atau di kolom tambahan

atau di kolom tambahan

Sunting : Anda ingin segera memulai tanpa membaca penjelasan? Gunakan git alias, skrip atau cuplikan kode fungsi dari bagian EDIT 5 di bawah ini.

Dalam semua jawaban atas pertanyaan ini, tidak ada yang menunjukkan output mirip shell yang terlihat bagus untuk shell sejauh ini. Yang paling dekat adalah jawaban dari gospes tempat saya memulai.

Titik inti dalam pendekatan saya adalah hanya menghitung karakter pohon yang ditampilkan kepada pengguna. Kemudian isi mereka hingga panjang pribadi dengan spasi putih.

Selain git Anda membutuhkan alat ini

  • grep
  • tempel
  • printf
  • sed
  • seq
  • tr
  • toilet

sebagian besar di papan dengan distribusi linux.

Cuplikan kode adalah

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

Untuk menghitung spasi putih yang dibutuhkan, kami menggunakan

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

untuk mendapatkan semua karakter (hingga 500 per baris) daripada hanya memilih karakter pohon: * | / \ _ dan spasi putih dengan

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

akhirnya hitung dan kurangi hasilnya dari nilai panjang pilihan kami, yaitu 9 pada contoh.

Untuk menghasilkan jumlah spasi putih yang kami gunakan

  seq -s' ' $whitespaces

dan potong nomor posisi dengan

  tr -d '[:digit:]'

daripada menambahkannya ke akhir garis grafik kami. Itu dia!

Git memiliki opsi yang bagus untuk memformat panjang specifier yang sudah ada dengan sintaks '%><(amount_of_characters,truncate_option)', yang menambahkan spasi putih dari sisi '>' atau kanan '<' kiri dan dapat memotong karakter dari awal 'ltrunc', tengah 'mtrunc' atau akhir 'terpotong'.

Hal ini penting bahwa penggunaan atas printf cmd ini nilai panjang yang sama untuk kolom git yang sesuai.

Bersenang-senang untuk merancang keluaran tampak seperti tablel Anda sendiri bersih untuk kebutuhan Anda.

Tambahan:

Untuk mendapatkan nilai panjang yang tepat, Anda dapat menggunakan cuplikan berikut

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

dan gunakan $ max_chars sebagai nilai panjang yang tepat di atas.


EDIT 1 : Hanya perhatikan bahwa karakter garis bawah juga digunakan di pohon git dan edit cuplikan kode di atas. Jika ada karakter lain yang hilang, silakan tinggalkan komentar.


EDIT 2 : Jika Anda ingin menghilangkan tanda kurung di sekitar entri cabang dan tag, cukup gunakan "% D" alih-alih "% d" dalam perintah git, seperti pada EDIT 3.


EDIT 3 : Mungkin opsi warna "otomatis" adalah yang paling Anda sukai untuk entri cabang dan tag?

git head warna otomatis tanpa tanda kurung dan beri tag seperti keluaran shell

Ubah bagian ini dari perintah git (warna 214 )

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

ke otomatis

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


EDIT 4 : Atau Anda suka campuran warna Anda sendiri untuk bagian itu, output mewah dengan kepala berkedip?

keluaran mirip git tree style tablel fancy

Untuk dapat mendesain kepala, nama cabang dan tag terlebih dahulu kita membutuhkan opsi warna "otomatis" dalam perintah git kita seperti pada EDIT 3.

Kemudian kita bisa mengganti nilai warna know dengan kita sendiri dengan menambahkan 3 baris ini

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

sebelum baris

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

dalam cuplikan kode kami. Nilai penggantian menghasilkan warna di atas.

Misalnya nilai penggantian kepala adalah

3;5;1;38;5;196

dimana 3; singkatan dari italic, 5; untuk berkedip dan 1; 38; 5; 196 untuk warnanya. Untuk info lebih lanjut mulai dari sini. Catatan: Perilaku ini tergantung pada terminal favorit Anda dan karena itu mungkin tidak dapat digunakan.

TETAPI Anda dapat memilih nilai warna apa pun yang Anda inginkan.

GAMBARAN UMUM nilai git color dan setara ANSI

masukkan deskripsi gambar di sini

Anda menemukan daftar dengan opsi git color / style di sini .

Jika Anda membutuhkan output pada konsol Anda untuk warna yang akurat (gambar di atas diperkecil oleh stackoverflow), Anda dapat menghasilkan output dengan

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

di jalur proyek git Anda yang menggunakan komit pertama dari keluaran log git Anda.


EDIT 5 : Seperti yang disebutkan anggota "Andras Deak", ada beberapa cara bagaimana menggunakan kode ini:

1) sebagai alias :

alias tidak menerima parameter tetapi fungsi bisa , oleh karena itu tetapkan saja .bashrc Anda

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

   }

dan panggil fungsi git_tably (berasal dari tablelike) langsung di bawah jalur proyek git Anda atau dari mana pun Anda inginkan dengan jalur proyek git Anda sebagai parameter pertama.

2) sebagai skrip shell :

Saya menggunakannya dengan opsi untuk meneruskan direktori proyek git sebagai parameter pertama atau jika kosong, ambil direktori kerja seperti perilaku normal. Secara keseluruhan kami miliki

# 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) sebagai alias git :

Mungkin cara paling nyaman adalah menambahkan alias git di .gitconfig Anda

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

Daripada menelepon di git tablybawah jalur proyek apa pun.

Git sangat kuat sehingga Anda dapat mengubah kepala, tag, ... langsung seperti yang ditunjukkan di atas dan diambil dari sini .

Opsi mewah lainnya adalah memilih warna pohon yang paling Anda sukai

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

yang memberi Anda tampilan log git log yang tampak gila tapi selalu seperti tab

fanciest_git_tree_tablelike_image

Terlalu banyak kedipan! Hanya untuk menunjukkan apa yang mungkin. Terlalu sedikit warna yang ditentukan menyebabkan pengulangan warna.

Referensi .gitconfig yang lengkap hanya dengan satu klik saja.

LAGI: Bersenang-senanglah untuk mendesain sendiri tampilan yang mirip tablelike dengan kebutuhan Anda.

satu pertanyaan lagi
sumber
Anda harus menjelaskan dalam jawaban Anda bagaimana potongan bash ini akan berubah menjadi perintah seperti git log. Orang dapat menemukan kegunaan dengan melihat jawaban yang Anda tautkan, tetapi jawaban harus lengkap
Andras Deak
Maksud Anda saya harus menjelaskan cmit git log secara detail? Atau bisakah Anda memberi saya contoh apa yang Anda lewatkan?
onemorequestion
Catatan: Output dari perintah git log yang luar biasa digunakan oleh snippet ini untuk menerima output seperti tab pada terminal. Jadi, sebaliknya seperti yang Anda sebutkan;)
onemorequestion
Saya pikir Anda tidak mengetik 20 baris bash setiap kali Anda membutuhkan ini. Masuk akal untuk mendefinisikan ini sebagai fungsi bash atau alias git. Sebagian besar pembaca tidak akan repot-repot mencoba menyelesaikan kode Anda agar mudah digunakan. Itu yang saya maksud. Jika Anda hanya meletakkan kode dalam file sh acak di jalur Anda, Anda dapat mengabaikan saya.
Andras Deak
1
Saya melihat. Terima kasih atas saran Anda. Saya akan mengedit jawaban saya dan menambahkan alias seperti itu. Biasanya saya menggunakan file untuk perintah "panjang" seperti yang Anda sebutkan. Tetapi untuk memiliki kedua cara yang ditulis di sini jauh lebih nyaman, saya setuju.
onemorequestion
5

beberapa alias di ~ / .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'
shuaihanhungry
sumber
4

Untuk pengguna OSX, saya telah mengambil contoh @gospes dan sedikit memodifikasinya untuk gsed ( gnu-seddiinstal melalui homebrew) dan menyesuaikan warna (untuk bekerja dengan latar belakang hitam, tidak yakin bagaimana contoh asli dapat membuat seperti di dalam contoh karena ia menetapkan teks hitam pada terminal dengan latar belakang hitam).

[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

Kunci untuk OSX adalah menginstal gnu sed (yang memiliki opsi -r). Paling mudah dilakukan dengan homebrew, yang tidak akan menimpa sistem yang diinstal sed, tetapi sebaliknya akan menginstal gnu sed sebagai "gsed". Semoga ini bisa membantu @ SlippD. Thompson yang berkomentar di atas tentang OSX tidak berfungsi.

markeissler
sumber