Ładne wykresy gałęzi git

1385

Widziałem, że niektóre książki i artykuły zawierają naprawdę ładnie wyglądające wykresy gałęzi gita i zatwierdzeń. Jak mogę zrobić wysokiej jakości drukowane obrazy historii git?

krosenvold
źródło
4
Utworzyłem skrypt Pythona, aby utworzyć wykres Graphiz! Spójrz. github.com/chode/git-graph
Stephan Bechter
4
Jeśli chcesz wysokiej jakości i drukować, moje narzędzie ( bit-booster.com/graph.html ) konwertuje „git log” na SVG. Aby uzyskać więcej informacji, zobacz moją odpowiedź .
G. Sylvie Davies,
2
Szukasz narzędzia do wizualizacji własnej historii git - lub - narzędzia do tworzenia wykresów, które ma sposób na rysowanie ładnych „gałęzi Git”?
Uri Abramson,
1
Możliwy duplikat wizualizacji topologii gałęzi w git
trblnc
5
Usunąłbym tag direct-acykliczne-wykresy, ponieważ nie ma to znaczenia dla tego pytania
Maksim Dmitriev

Odpowiedzi:

1843

Aktualizacja: Ta odpowiedź przyciągnęła o wiele więcej uwagi niż na to zasługuje. Został pierwotnie opublikowany, ponieważ uważam, że wykresy wyglądają ładnie i można je było pobrać w programie Illustrator do publikacji - i nie było lepszego rozwiązania. Ale teraz istnieje wiele bardziej odpowiednich odpowiedzi na to pytanie, takich jak Fracz , Jubobs lub Harry Lee ! Proszę, głosujcie!

Aktualizacja 2: Opublikowałem ulepszoną wersję tej odpowiedzi w topologii gałęzi Visualizing w pytaniu git , ponieważ jest tam o wiele bardziej odpowiednia. Ta wersja zawiera informacje lg3o autorze i komisarzu, więc naprawdę powinieneś to sprawdzić. Pozostawienie tej odpowiedzi ze względów historycznych (i rep, przyznaję), choć naprawdę kusi mnie, aby ją po prostu usunąć.

Moje 2 ¢ : Mam dwa aliasy, które zwykle wrzucam do ~/.gitconfigpliku:

[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 lg1wygląda następująco:
git lg1

i git lg2wygląda tak:
git lg2

Slipp D. Thompson
źródło
35
Tak. Normalne i jasne / pogrubione kolory to: Czarny #202020/ #555555, Czerwony: #5d1a14/ #da4939, Zielony: #424e24/ #a5c261, Żółty: #6f5028/ #ffc66d, Niebieski: #263e4e/ #6d9cbe, Magenta: #3e1f50/ #a256c7, Cyjan: #234e3f/ #62c1a1i Biały: #979797/ #ffffff.
Slipp D. Thompson
3
@ Turbo: Dla mnie kolory można zmieniać w ustawieniach profilu mojej aplikacji terminalowej (Terminal.app). Używana aplikacja terminalowa może, ale nie musi, obsługiwać zmianę kolorów wyświetlanych dla danych kolorów ANSI. Ponadto myślnik (dokładnie myślnik) został utworzony za pomocą opcji shift + [klawisz łącznika minus]. Przypuszczam, że błędnie założyłem, że wszystkie obecne platformy są zgodne z Unicode.
Slipp D. Thompson,
3
Twój --date=relativei --abbrev-commitsą zbędne, ponieważ jawnie użyć %cri %hodpowiednio.
graywh
6
Dodam %C(auto)modyfikator do refnames ( %d), aby uzyskać ładniejsze kolory. Zobacz stackoverflow.com/questions/5889878/color-in-git-log/…
Josef Eisl
2
Świetna odpowiedź. Zmodyfikowałem polecenie, aby wyglądało bardziej jak wyjście --oneline --decorate zlg = 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
1196

Wiele odpowiedzi tutaj jest świetnych, ale dla tych, którzy chcą tylko prostej odpowiedzi od jednego wiersza do punktu bez konieczności ustawiania aliasów lub czegokolwiek dodatkowego, oto:

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

Nie wszyscy robiliby git logcały czas, ale kiedy tego potrzebujesz, pamiętaj:

Pies ” = git log - a ll - d ecorate - o neline - g raph

wprowadź opis zdjęcia tutaj

Patoshi パ ト シ
źródło
252
git config --global alias.adog "log --all --decorate --oneline --graph"
fracz
4
Szukałem dla --alltak długo mam zamiar płakać (T_T) DZIĘKUJĘ!
Felipe Gerard,
2
--onit został wprowadzony w Git 1.6.3: github.com/git/git/blob/… --pretty = oneline będzie działał z wersjami Git przed 1.6.3
Pat Myron
13
najlepsza odpowiedź na SO. Dzięki za lekkość.
Tobias Feil
4
Myślę, że „--decorate” jest teraz domyślnie dołączone. Ale i tak zapamiętam akronim!
Josiah Yoder-deactive, z wyjątkiem ..
378

Aby uzyskać tekst, możesz spróbować:

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

lub:

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

lub: oto alias graphviz do rysowania wykresu DAG.

Ja osobiście używać gitx, gitk --alli gitnub.

keo
źródło
14
dodałbym --abbrev-commit --decorate, a potem jest idealny!
asymetryczny
6
--abbrev-commit jest sugerowany przez --oneline, nie?
dwineman
4
@dwineman tak nie potrzebujesz, --abbrev-commitjeśli używasz--oneline
Thomas
2
Wydaje się, że w drugiej linii argument jest bezużyteczny. Nie widzę daty pokazanej w dzienniku. git log --graph --oneline --decorate --date=relative --all--date
Lerner Zhang
data nie jest wyświetlana, gdy podano
--oneline
253

Gitgraph.js pozwala rysować ładne gałęzie git bez repozytorium. Po prostu napisz kod JavaScript, który konfiguruje twoje gałęzie, zatwierdza i renderuje go w przeglądarce.

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

przykładowy wykres wygenerowany za pomocą Gitgraph.js

lub z metroszablonem:

Motyw metra GitGraph.js

lub z wiadomościami zatwierdzającymi, autorami i tagami:

GitGraph z komunikatami zatwierdzania

Przetestuj za pomocą JSFiddle .

Wygeneruj go za pomocą Git Grapher przez @bsara.

fracz
źródło
3
Tak, to absolutnie niesamowite! Wysłałem go do fiddle jsfiddle.net/guan1oz1 , abyś mógł go od razu przetestować.
berkus
14
Strzałki powinny jednak wskazywać na rodziców, a nie dzieci.
jub0bs
4
@Jubobs: Dobra uwaga. To powszechna przeszkoda dla osób próbujących zrozumieć Git: myślą o sekwencji czasu zamiast o dziedziczeniu. Wyjaśnienie, że (prawie) wszystko w git jest względne w stosunku do czegoś wcześniejszego, pomaga wszystkim pozostałym elementom ułożyć się na swoim miejscu.
Slipp D. Thompson
6
Odnośnie kierunku strzałki, z dokumentacji: * @param {Boolean} [options.reverseArrow = false] - Jeśli strzałki są prawdziwe, wskaż przodków
Scott
2
Do zobaczenia po zobaczeniu tego posta i pobraniu go z gitgraph.js, postanowiłem stworzyć małe narzędzie, które w zasadzie umieści interfejs użytkownika w gitgraph.js. Nie jest jeszcze ukończony, a interfejs użytkownika nie jest tam, gdzie chcę, żeby był, ale wkłady są mile widziane! spójrz: github.com/bsara/git-grapher
bsara
123

Zbudowany na bazie TikZ i PGF , gitdagsto mały pakiet LaTeX, który pozwala bez wysiłku tworzyć wykresy zatwierdzeń grafiki wektorowej i wiele więcej.

Automatyczne generowanie wykresu zatwierdzeń istniejącego repozytorium nie jest celem gitdags; wykresy, które produkuje, są przeznaczone wyłącznie do celów edukacyjnych .

Często używam go do tworzenia wykresów dla moich odpowiedzi na pytania Git, jako alternatywy dla wykresów zatwierdzania ASCII:

Oto przykład takiego wykresu pokazującego efekty prostej bazy:

wprowadź opis zdjęcia tutaj

\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
źródło
1
@To wygląda świetnie! Chciałbym również kilka słów o tym, jak z niego korzystać: rozważmy użytkownika Windows, który nie ma zainstalowanego LaTeXa. Jak stworzyć wykres od zera?
VonC
1
@VonC Nie jestem pewien, ale jeśli nie chcesz instalować LaTeX, możesz być w stanie wygenerować swoje wykresy na ShareLatex i WriteLaTeX i podobnych. :)
Zajmę się tym i rozwinę
To świetne rzeczy! W pewnym momencie napiszę samouczek, ale na razie chciałem tylko wspomnieć, że możesz przetwarzać swoje wykresy za pomocą samodzielnej klasy dokumentów (używam funkcji przycinania), użyć latex input.texdo wygenerowania pliku dvi, a następnie w końcu użyć dvisvgm input.dviwygenerować plik SVG z przezroczystością. Konwersja SVG do formatu rastrowego, takiego jak PNG, jest łatwa convert -antialias -density 300 -background none input.svg output.png. Nawiasem mówiąc, te obrazy wyglądają niesamowicie z pełną przezroczystością. Nadal pracuję nad problemem z czcionkami ... i.imgur.com/1Xu2Ry5.png
vmrob
5
Zajęło mi to trochę czasu, więc zacząłem pisać krok po kroku, jak zdobyć gitdagi od zera na Ubuntu 14.04
ChrisFreeman
1
@AndreaPolci Zobacz github.com/Jubobs/gitdags/issues/3, aby zobaczyć przykład scalenia. Dokumentacja dla gitdagsjest już w drodze!
jub0bs
79

Gitg to klon Gitk i GitX dla GNOME (działa również na KDE itp.), Który pokazuje dość kolorowy wykres.

Jest aktywnie rozwijany (od 2012 r.). Pozwala sortować zatwierdzenia (węzły wykresu) chronologicznie lub topologicznie oraz ukrywać zatwierdzenia, które nie prowadzą do wybranej gałęzi.

Działa dobrze z dużymi repozytoriami i złożonymi wykresami zależności.

Przykładowe zrzuty ekranu przedstawiające repozytoria linux-git i linux-2.6:

linux-git

linux-2.6

Ślimak mechaniczny
źródło
60

SourceTree jest naprawdę dobry. Drukuje dobrze wyglądającą i średniej wielkości historię oraz wykres gałęzi: (w eksperymentalnym projekcie Git wykonuje się następujące czynności, aby zobaczyć niektóre gałęzie). Obsługuje Windows 7+ i Mac OS X 10.6+.

wprowadź opis zdjęcia tutaj

http://www.sourcetreeapp.com/

niepolarność
źródło
Jest również dostępny w App Store, więc aktualizacja powinna działać automatycznie.
WebOrCode
Uwielbiam wykres sourcetree, ale wolę użyć wiersza poleceń, a ustawienia domyślne sourcetree zawsze psują moje repozytoria.
SgtPooki
SourceTree nalega, abyś utworzył konto Atlassian (lub użył swojego konta Google i udzielił Atlassian uprawnień, aby uzyskać e-mail i informacje o profilu), a po instalacji na Macu (OS X El Capitan v 10.11.5) nie powiedzie się w kroku „Klonowanie”: „fatal: nie znaleziono mapowania submodułów w .gitmodules dla ścieżki„ <ścieżka pominięta> ”” oraz dziwne ostrzeżenie: „szablony nie znaleziono / usr / local / git / share / git-core / templates”. Bardzo niejasne wiadomości, nie tak świetne.
Dmitrij Szewkoplyas
3
A potem po odinstalowaniu nie zapomnij uporządkować przyznanych wcześniej uprawnień bezpieczeństwa Google: myaccount.google.com/security -> Połączone aplikacje i witryny -> Aplikacje połączone z Twoim kontem -> Zarządzaj aplikacjami
Dmitry Shevkoplyas
60

Właśnie napisałem jedno narzędzie, które może generować ładny wykres zatwierdzeń git za pomocą HTML / Canvas.

I zapewnij wtyczkę jQuery, która ułatwia obsługę.

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

Zapowiedź:

zapowiedź

Harry Lee
źródło
Wygląda ładnie, jak uzyskać wstępnie sformatowane dane do narysowania tego wykresu?
Olga
3
@Olga Właśnie dodałem kod zaplecza do mojego repozytorium. Można zobaczyć go na github.
Harry Lee
56

git-forestjest doskonałym skryptem perlowym, którego używam od ponad roku i prawie nie używam tego git logpolecenia bezpośrednio.

Oto niektóre z rzeczy, które uwielbiam w tym skrypcie:

  • Wykorzystuje znaki Unicode do rysowania linii na wykresie, zapewniając bardziej ciągły wygląd linii wykresu.
  • Można łączyć --reversez danymi wyjściowymi wykresu, co nie jest możliwe w przypadku zwykłego git logpolecenia.
  • Wykorzystuje git logwewnętrznie do pobierania listy zatwierdzeń, więc wszystkie opcje, które przekazujesz, git logmogą być również przekazywane do tego skryptu.

Mam alias, używając git-forestnastępujących elementów:

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

Tak wygląda wyjście na terminalu:

wprowadź opis zdjęcia tutaj

Tuxdude
źródło
3
@ void.pointer - Tak, nie będzie, ponieważ git-forest jest skryptem perla i ma zależności modułu perla. Uruchamianie gita pod cygwin z zainstalowanymi wymaganymi modułami perla może być najlepszą alternatywą, jaką możesz uzyskać, jeśli naprawdę chcesz tego na Windowsie :)
Tuxdude
1
Wow, to repozytorium ma wiele świetnych narzędzi. Dzięki!
Eldelshell,
1
Działa idealnie dobrze @MinGW (MSYS) pod Win $; zainstaluj CPANM; następnie Git.pm; utwórz alias i jesteś gotowy do pracy.
Sektor
jaki jest ten bardzo ładny emulator terminala, którego używasz? Podoba mi się graficzny wskaźnik podpowiedzi.
NH.
Jak zainstalować ten „skrypt”? Jestem na Ubuntu.
user13107
50

Napisałem narzędzie sieciowe do konwersji dzienników git na ładne wykresy SVG: Bit-Booster - narzędzie do rysowania wykresów offline

Prześlij dane wyjściowe git log --pretty='%h|%p|%d'bezpośrednio do narzędzia, a następnie kliknij link „pobierz graph.svg”.

Narzędzie jest po stronie klienta, więc żadne z twoich danych Git nie są udostępniane mojemu serwerowi. Możesz także zapisać HTML + JS lokalnie i uruchomić go przy użyciu adresów URL „file: ///”. Zweryfikowano na Chrome 48 i Firefox 43 na Ubuntu 12.04.

Generuje HTML, który można umieszczać bezpośrednio na dowolnej stronie (w tym na blogowym silniku blogowym!). Spójrz na niektóre z postów na blogu tutaj:

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

Oto zrzut ekranu przykładowego pliku HTML wygenerowanego przez narzędzie:

http://bit-booster.com/graph.html (narzędzie)

G. Sylvie Davies
źródło
1
@Jay wygląda na to, że kolor odzwierciedla poziom wcięcia tej konkretnej gałęzi, i że gałęzie mogą przejść do innej kolumny i w związku z tym zmienić kolor. S
Thorbjørn Ravn Andersen
44

Na podstawie skryptu Graphviz, który znalazłem w odpowiedzi na powiązane pytanie , zhakowałem skrypt ruby, który tworzy widok podsumowania repozytorium git. Pomija całą liniową historię i po prostu pokazuje „interesujące” zatwierdzenia, tj. Te z wieloma rodzicami, wieloma dziećmi lub wskazane przez gałąź lub znacznik. Oto fragment wykresu generowanego dla jquery :

próbka jquery

git-big-picture i BranchMaster są podobnymi narzędziami, które próbują pokazać tylko strukturę wysokiego poziomu wykresu, wyświetlając jedynie powiązanie tagów, gałęzi, scaleń itp.

To pytanie ma kilka innych opcji.

Matt McHenry
źródło
2
Próbowałem tego, ale nie mogłem uzyskać poprawnej pracy kropki z danymi wyjściowymi dla naszego repozytorium (42 gałęzie, 175 tagów, 42 000 zatwierdzeń) ... Szkoda ... Właśnie tego szukałem!
Xavier Nodet,
1
@XavierNodet, jeśli Twoje repo jest publiczne i / lub masz komunikat o błędzie itp., Zgłoś problem na GitHub. Dzięki!
Matt McHenry,
38

Dodałem trzy polecenia niestandardowe: git tree, git streei git vtree. Przejrzę je w tej kolejności.

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

wprowadź opis zdjęcia tutaj

Za pomocą git streei git vtreeużywam bash, aby pomóc w formatowaniu.

[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


EDYCJA: Działa z wersją git 1.9a. Wartość koloru „auto” najwyraźniej debiutuje w tym wydaniu. To miły dodatek, ponieważ nazwy oddziałów będą miały inny kolor. Ułatwia to na przykład rozróżnienie między oddziałami lokalnymi i zdalnymi.

ewangelie
źródło
fatal: bad color value 'auto' for variable '--pretty format':(
Obróć
Okazało się, że jest to stara wersja git. Yum ma dość przestarzałą wersję Git w swoim repozytorium. Skompilowany ze źródła (1.9) i działa świetnie. To też jest piękne! Dzięki @gospes!
Obrót
Nie ma systemu OS X:sed: illegal option -- r
Slipp D. Thompson
@ SlippD.Thompson: Używam linux :). -R jest dla rozszerzonych wyrażeń regularnych. Najwyraźniej wersja sed OSX go nie ma. Być może mógłbyś zaktualizować sed. W przeciwnym razie możesz po prostu przepisać polecenie sed bez rozszerzonego wyrażenia regularnego.
gospes
1
W przypadku Mac OS X sed, użyj -E zamiast -r
Baxter Lopez
37

Zależy jak wyglądali. Używam gitx, który tworzy takie zdjęcia:

prosta fabuła

Możesz porównać git log --graphvs gitk w 24-kierunkowym połączeniu ośmiornicy (pierwotnie z http://clojure-log.n01se.net/date/2008-12-24.html ):

24-kierunkowe połączenie ośmiornicy git.  Oryginalny adres URL to <code> http://lwn.net/images/ns/kernel/gitk-octopus.png </code>

Dustin
źródło
49
To zabawne ... przysiągłbym, że słyszę, jak mówisz „24-kierunkowe połączenie ośmiornicy”!
dty
4
Z ciekawości, czy ktoś próbował wyodrębnić procedury rysowania GitX (lub innego narzędzia GUI git) do samodzielnego pliku wykonywalnego? Jeśli się nie mylę, nakłonienie Cocoa do narysowania wektorowego pliku PDF nie byłoby trudne i zaspokoiłoby potrzebę OP do drukowania obrazów w wysokiej rozdzielczości.
Slipp D. Thompson
To było na S3 przez skitch, zanim przerobili swoje rzeczy. Chciałbym nadal to mieć. :(
Dustin
Właśnie zastąpiłem go wersją gitk z lwn.net/images/ns/kernel/gitk-octopus.png , połączoną z clojure-log.n01se.net/date/2008-12-24.html . @Dustin: mam nadzieję, że to w porządku. To nie jest ten sam obraz, ale służy podobnemu celowi. Z zrzutu ekranu wygląda na to, że jest to część jądra Linuksa, więc myślę, że można znaleźć to zatwierdzenie i ponownie pobrać równoważny zrzut ekranu gitx ....
naught101
34

Aby uzyskać bardziej szczegółowy tekst, spróbuj:

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

Możesz napisać alias w $ HOME / .gitconfig

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

Oto moje zdanie na ten temat:

Zrzut ekranu:

Zrzut ekranu

Stosowanie:

git hist - Pokaż historię bieżącego oddziału

git hist --all - Pokaż wykres wszystkich gałęzi (w tym pilotów)

git hist master devel - Pokaż związek między dwoma lub więcej oddziałami

git hist --branches - Pokaż wszystkie lokalne oddziały

Dodaj --topo-orderdo sortowania zatwierdza topologicznie, a nie według daty (domyślnie w tym aliasie)

Korzyści:

  • Wygląda jak zwykły --decorate, więc z osobnymi kolorami dla różnych nazw gałęzi
  • Dodaje adres e-mail osoby zatwierdzającej
  • Dodaje datę względną i bezwzględną zatwierdzenia
  • Sortuje zatwierdzenia według daty

Ustawiać:

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
źródło
28

gitg : przeglądarka repozytoriów oparta na gtk, to nowe, ale ciekawe i przydatne
http://git.gnome.org/browse/gitg
Obecnie go używam

saeedgnu
źródło
2
Wydaje się, że jest to klon GitXi całkiem niezły. Polecam
Yarek T
28

Chociaż czasami używam gitg , zawsze wracam do wiersza poleceń:

[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 

Jak widać, jest to prawie alias zapisujący naciśnięcie klawisza, oparty na:

  • - kolor: przejrzysty wygląd
  • --graph: wizualizuj rodziców
  • - zamówienie-daty: najbardziej zrozumiałe spojrzenie na repozytorium
  • - Udekoruj: kto jest kim
  • --oneline: Wiele razy wszystko, co musisz wiedzieć o zatwierdzeniu
  • --simplify-by-decoration: podstawowy na pierwszy rzut oka (tylko tagi, odpowiednie scalenia, gałęzie)
  • --all: zapisywanie naciśnięć klawiszy ze wszystkimi aliasami z tą opcją i bez niej
  • --data = względna (% ar): zrozumienie działania w repozytorium (czasami oddział ma niewiele zobowiązań w pobliżu mistrza, ale kilka miesięcy temu od niego)

Zobacz w najnowszej wersji git (1.8.5 i wyżej) możesz skorzystać z% C (auto) w dekorowaniu symbolu zastępczego% d

Stąd wszystko, czego potrzebujesz, to dobra znajomość gitrevisions do filtrowania wszystkiego, czego potrzebujesz (coś takiego jak master..develop, gdzie --simplify-scalenia może pomóc w długoterminowych oddziałach)

Mocą wiersza poleceń jest szybka konfiguracja oparta na twoich potrzebach (zrozum, że repo nie jest unikalną konfiguracją dziennika kluczy, więc czasami konieczne jest dodanie opcji --numstat, --raw lub --name-status. Tutaj git log a aliasy są szybkie, wydajne i (z czasem) najładniejszym wykresem, jaki można uzyskać. Co więcej, przy wyjściowym wyświetlaniu domyślnym przez pager (powiedz mniej) zawsze możesz szybko wyszukiwać wyniki wewnątrz. Nie jesteś przekonany? Zawsze możesz przeanalizować wynik z projektami takimi jak gitgraph

albfan
źródło
Bardzo dobrze. Dodanie ich do mojej konfiguracji. Ale zalecam zmianę% Cred% d% Creset na% C (auto)% d% Creset, który da różne kolory nazwom oddziałów zdalnych lub lokalnych
MarkB42
17

Bardzo nieznacznie poprawiając niesamowitą odpowiedź Slippa , możesz użyć jego aliasów, aby zarejestrować tylko jedną gałąź:

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

Pozostawiając --allto możesz teraz zrobić

git lgBranch1 <branch name>

lub nawet

git lgBranch1 --all
Peter Ajtai
źródło
15

Sugeruję tig https://github.com/jonas/tig , znacznie lepsze narzędzie wiersza poleceń dla git.

Możesz użyć Homebrew, aby zainstalować TIG na MacOS:

$ brew install tig
$ tig

wprowadź opis zdjęcia tutaj

nodejh
źródło
14

Mam ten git logalias, ~/.gitconfigaby wyświetlić historię wykresów:

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

Po wprowadzeniu tego, git lwypisze coś takiego:

wprowadź opis zdjęcia tutaj

W Git 2.12 + można nawet dostosować kolory linii wykresu za pomocą log.graphColorsopcji konfiguracji.

Jeśli chodzi o format dzienników, jest podobny --oneline, z dodaniem nazwiska autora (z poszanowaniem .mailmap) i względnej daty autora . Zauważ, że %C(auto)składnia, która mówi Gitowi, aby używał domyślnych kolorów dla skrótu zatwierdzenia itp., Jest obsługiwana w Git> = 1.8.3 .

Eugene Yarmash
źródło
1
git log --graph --oneline aby upewnić się, że oneliner się nie zgubi
tsenapathy
czy istnieje sposób na umieszczenie nazw oddziałów na lewej stronie?
anaval
12

Próbowałeś gitkczy gitk --all? Nie ma jednak funkcji print / save img as.

Adrian Panasiuk
źródło
3
gitk jest wydajny, ale niezbyt piękny.
Johan
Dzięki temu, że jest wbudowany, jest dla mnie przyjemny i bezproblemowy. Szczególnie --allpokazuje wszystkie gałęzie.
BcK
12

GitGraph

Generuje reprezentację PNG lub SVG historii zatwierdzeń Twojego repozytorium Git.

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

EddieG098
źródło
@AndyHayden: Nie jest. Zupełnie inaczej. Tworzy wykres historii
gitów
11
git -c core.pager='less -SRF' log --oneline --graph --decorate

To moja końcowa odmiana, podobna do wielu odpowiedzi tutaj. Lubię dostosowywać przekazane flagi, lessaby zapobiec zawijaniu słów.

przykładowe wyjście

Ustawiłem na alias dla szybkiego dostępu, ponieważ polecenie jest nieco kłopotliwe.

Andy
źródło
8

Spróbuj ditaa . Może przekształcić dowolny diagram ASCII w obraz. Chociaż nie został zaprojektowany z myślą o gałęziach Git, byłem pod wrażeniem wyników.

Źródło (plik txt):

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

Komenda:

java -jar ditaa0_9.jar ascii-graph.txt

Wynik:

wprowadź opis zdjęcia tutaj

Obsługuje również kolory tła, linie przerywane, różne kształty i więcej. Zobacz przykłady .

fracz
źródło
1
W podobny sposób casual-effects.com/markdeep jest bardzo potężny, aby świecić ręcznie układanymi diagramami sztuki ascii.
Beni Cherniavsky-Paskin
7

Jeśli twoje repozytorium znajduje się na Gitlab, możesz użyć jego reprezentacji graficznej, ponieważ jest ona renderowana jako SVG w przeglądarce.

wprowadź opis zdjęcia tutaj

bugmenot123
źródło
6

Nie wiem o bezpośrednim narzędziu, ale być może możesz zhakować skrypt, aby wyeksportować dane do formatu kropki i wyrenderować je za pomocą graphviz.

Tomasz
źródło
Spróbuj tego jednego github.com/gugod/bin/blob/master/git-graphviz . Nie miałem wszystkich zależności w środowisku korporacyjnym, więc zmiana tych iopoleceń na proste polecenia perl `git log [...]` działała dla mnie.
Ross Rogers
Jeśli używasz komputera Mac i chcesz wypróbować ten skrypt, możesz pobrać perla, brew install perl dota następnie cpan common::sense IO::alluzyskać zależności. Następnie potokuj dane wyjściowe do odpowiedniego polecenia, takiego jak git-graphviz | dot -Tpng -o repo.png. Jednak wynik nie różni się niczym od git-big-picture .
jrhorn424
6

Funky graf Git commit jest jednym z pokazów biblioteki graficznej Raphaela .

Demo jest statyczne, ale pobranie kodu i zamiana ich danych statycznych na zestaw danych na żywo powinno być dość łatwe - myślę, że to tylko zatwierdzenie danych Git w formacie JSON.

Demo jest tutaj: http://dmitrybaranovskiy.github.io/raphael/github/impact.html

Spudley
źródło
1
To ten sam kod wykresu, który zastosowano na wykresach wpływu GitHub, prawda? (np. github.com/DmitryBaranovskiy/raphael/graphs/impact )
Slipp D. Thompson
@ Sven: Dziękujemy za zwrócenie na to uwagi. Poprawiłem dla ciebie niedziałające linki, choć pamiętaj, że ta odpowiedź ma już pięć lat, a zatem może być lepsze rozwiązanie w ostatnim czasie.
Spudley,
@ SlippD.Thompson ten kod jest teraz na github.com/DmitryBaranovskiy/raphaeljs.com/tree/master/github
Vadim Kotov
6

Ładnie i czysto tablitowy wynik gitowego wykresu dla muszli

z skrótami jak zwykle oprócz drzewa wykresów

z skrótami jak zwykle oprócz drzewa wykresów

lub w dodatkowej kolumnie

lub w dodatkowej kolumnie

Edycja : Chcesz zacząć od razu bez czytania wyjaśnień? Użyj aliasu git, fragmentu skryptu lub kodu funkcji z sekcji EDYCJA 5 poniżej.

We wszystkich odpowiedziach na to pytanie żadna z dotychczas nie wydała czystych tablelowych wyników dla muszli. Najbliższa była odpowiedź z ewangelii, od której zacząłem.

Najważniejsze w moim podejściu jest zliczanie tylko znaków drzewa pokazanych użytkownikowi. Następnie wypełnij je osobistymi spacjami.

Oprócz git potrzebujesz tych narzędzi

  • grep
  • pasta
  • printf
  • sed
  • seq
  • tr
  • toaleta

głównie na pokładzie z dowolną dystrybucją Linuksa.

Fragment kodu to

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

Do obliczenia potrzebnych białych znaków używamy

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

aby uzyskać wszystkie znaki (do 500 w wierszu) niż wybrać tylko znaki drzewa: * | / \ _ i białe znaki z

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

na koniec policz je i odejmij wynik od wybranej przez nas wartości długości, która w tym przykładzie wynosi 9.

Aby wygenerować obliczoną liczbę białych znaków, których używamy

  seq -s' ' $whitespaces

i skróć numery pozycji za pomocą

  tr -d '[:digit:]'

niż dodaj je na końcu naszej linii wykresu. Otóż ​​to!

Git ma dobrą opcję formatowania długości specyfikatorów wyjściowych już za pomocą składni '%><(amount_of_characters,truncate_option)', która dodaje białe spacje po lewej stronie>> lub prawej stronie <i może obcinać znaki od początku „ltrunc”, środkowego „mtrunc” lub końca „trunc”.

Jest ważne , że powyższe zastosowanie printf Cmd samo jest dla wartości długości odpowiadającej git kolumny.

Baw się, projektując własne, czysto wyglądające obrusy, zgodnie z własnymi potrzebami.

Dodatkowy:

Aby uzyskać odpowiednią wartość długości, możesz użyć następującego fragmentu kodu

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

i użyj $ max_chars jako właściwej wartości długości powyżej.


EDYCJA 1 : Właśnie zauważyłem, że znak podkreślenia jest również używany w drzewie git i odpowiednio edytuj powyższe fragmenty kodu. Jeśli brakuje innych znaków, zostaw komentarz.


EDYCJA 2 : Jeśli chcesz pozbyć się nawiasów wokół wpisów gałęzi i znaczników, po prostu użyj „% D” zamiast „% d” w poleceniu git, jak w EDIT 3.


EDYCJA 3 : Może opcja koloru „auto” jest najbardziej preferowana dla wpisów gałęzi i tagów?

git bezobsługowa automatyczna głowica w kolorze i tabliczkowa tablelowa powłoka

Zmień tę część polecenia git (kolor 214 )

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

do auto

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


EDYCJA 4 : A może lubisz własną mieszankę kolorów dla tej części, fantazyjne wyjście z migającą głową?

git tree fantazyjne wydruki w stylu tablelike

Aby móc najpierw stylizować nagłówek, nazwy gałęzi i tagi, potrzebujemy opcji koloru „auto” w naszym poleceniu git, tak jak w EDIT 3.

Następnie możemy zastąpić znane wartości kolorów własnymi, dodając te 3 linie

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

tuż przed linią

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

w naszym fragmencie kodu. Wartości zastępcze dają kolory powyżej.

Na przykład wartość zastępcza dla head to

3;5;1;38;5;196

gdzie 3; oznacza kursywę, 5; dla migania i 1; 38; 5; 196 dla koloru. Aby uzyskać więcej informacji, zacznij tutaj. Uwaga: To zachowanie zależy od twojego ulubionego terminalu i dlatego może nie być przydatne.

ALE możesz wybrać dowolną preferowaną wartość koloru.

PRZEGLĄD wartości kolorów git i odpowiedników ANSI

wprowadź opis zdjęcia tutaj

Tutaj znajdziesz listę z opcją koloru / stylu git .

Jeśli potrzebujesz danych wyjściowych na konsoli w celu uzyskania dokładnych kolorów (powyższy obrazek jest pomniejszany o przepływ stosu), możesz uzyskać wynik za pomocą

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

w ścieżce projektu git, która korzysta z pierwszego zatwierdzenia z danych wyjściowych dziennika git.


EDYCJA 5 : Jak wspomniał członek „Andras Deak”, istnieje kilka sposobów wykorzystania tego kodu:

1) jako alias :

alias nie akceptuje parametrów, ale funkcja może , dlatego po prostu zdefiniuj w pliku .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" ###

   }

i wywołaj funkcję git_table (pochodzącą z tablelike) bezpośrednio pod ścieżką projektu git lub z dowolnego miejsca ze ścieżką projektu git jako pierwszym parametrem.

2) jako skrypt powłoki :

Używam go z opcją przekazania katalogu projektu git jako pierwszego parametru do niego lub, jeśli jest pusty, weź katalog roboczy jak normalne zachowanie. W całości mamy

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

Być może najwygodniejszym sposobem jest dodanie aliasu git w .gitconfig

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

Następnie wystarczy zadzwonić git tablypod dowolną ścieżkę projektu.

Git jest tak potężny, że możesz zmieniać głowę, tagi, ... bezpośrednio jak pokazano powyżej i wzięto stąd .

Inną wymyślną opcją jest wybranie preferowanych kolorów drzew

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

co daje szalenie wyglądające, ale zawsze tablelowe wyniki git log

fanciest_git_tree_tablelike_image

Za dużo mrugania! Aby zademonstrować, co jest możliwe. Zbyt mało określonych kolorów prowadzi do powtórzeń kolorów.

Pełne odniesienie .gitconfig to tylko jedno kliknięcie.

PONOWNIE: Baw się, projektując własne, wyglądające na tablelki produkty odpowiadające Twoim potrzebom.

jeszcze jedno pytanie
źródło
Powinieneś wyjaśnić w swojej odpowiedzi, w jaki sposób te fragmenty bash zamieniają się w fantazyjne polecenia podobne do dziennika git. Można dowiedzieć się, jakie są zastosowania, patrząc na odpowiedź, którą podałeś, ale odpowiedzi powinny być samodzielne
Andras Deak
Masz na myśli, że powinienem szczegółowo wyjaśnić cmd git log? Czy możesz mi podać przykład tego, czego brakuje.
onemorequestion
Uwaga: Dane wyjściowe niesamowitej komendy git log są używane przez ten fragment kodu w celu otrzymania tablelowego wyniku na terminalu. Na odwrót, jak wspomniałeś;)
onemorequestion
Pomyślałem, że za każdym razem, gdy tego potrzebujesz, nie piszesz 20 wierszy. Sensowne jest zdefiniowanie tego jako funkcji bash lub aliasu git. Większość czytelników nie zadaje sobie trudu, aby uzupełnić kod, aby był łatwy w użyciu. O to mi chodziło. Jeśli po prostu umieścisz kod w losowym pliku sh na swojej ścieżce, możesz mnie zignorować.
Andras Deak
1
Widzę. Dziękuję za Twoją radę. Zmienię swoją odpowiedź i dodam taki alias. Zwykle używam plików do takich „długich” poleceń, jak wspomniałeś. Zgadzam się z tym, że napisanie tutaj obu sposobów jest znacznie wygodniejsze.
onemorequestion
5

niektóre aliasy w ~ / .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
źródło
4

W przypadku użytkowników OSX wziąłem przykład @gospes i nieznacznie zmodyfikowałem go dla gsed ( gnu-sedzainstalowany przez homebrew) i dostosowałem kolory (do pracy z czarnym tłem, nie jestem pewien, jak oryginalny przykład mógłby renderować to, co robi w przykład, ponieważ określa czarny tekst na terminalu z czarnym tłem).

[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

Kluczem dla OSX jest pierwsza instalacja gnu sed (która ma opcję -r). Najłatwiej jest to zrobić za pomocą homebrew, który nie zastąpi instalowanego przez system sed, ale zamiast tego instaluje gnu sed jako „gsed”. Mam nadzieję, że to pomoże @ SlippD.Thompson, który skomentował powyżej, że OSX nie działa.

Markeissler
źródło