Portál AbcLinuxu, 10. května 2025 13:32

Dotaz: Git – strom větví a štítků

xkucf03 avatar 5.1.2017 20:12 xkucf03 | skóre: 49 | blog: xkucf03
Git – strom větví a štítků
Přečteno: 203×
Odpovědět | Admin
Hledám program, který by mi z gitového* úložiště vyrobil přehledný graf větví (branch) a vydaných verzí (tag). Mělo by to vypadat podobně jako výstup příkazu tree, který vypisuje složky a soubory:
PROGRAM_XY/
├── v_1
│   ├── v1.0.0
│   ├── v_1.1
│   │   ├── v1.1.0
│   │   ├── v1.1.1
│   │   ├── v1.1.2
│   │   └── v1.1.3
│   └── v1.2.0
└── v_2
    ├── v2.0.0
    ├── v2.1.0
    └── v2.2.0
Chtěl bych, aby na jednoduchém obrázku všichni jasně viděli, co se z čeho odvětlilo a jaký je vztah mezi větvemi a vydanými verzemi.

Existuje na to hotový program/skript? Psali jste si někdo něco podobného?

*) případně jiného (většinou používám Mercurial), ale na aktuálním projektu to potřebuji pro Git
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Josef Kufner avatar 5.1.2017 20:37 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Git – strom větví a štítků
Odpovědět | | Sbalit | Link | Blokovat | Admin
git log --graph --decorate --all --pretty=format:%d --color=always | uniq
Hello world ! Segmentation fault (core dumped)
xkucf03 avatar 6.1.2017 23:16 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Git – strom větví a štítků
To mi moc přehledné nepřijde, je tam spousta větvení mezi jednotlivými vydanými verzemi, které tam nepotřebuji – a zároveň tam chybí ta hierarchie v_2/v2.1.0…

Ono to asi v Gitu úplně automatizovaně nejde, protože tam některé informace prostě chybí. Ale na tomto projektu se dá spoléhat na konvence – větve se jmenují v_X případně v_X.Y a štítky vX.Y.Z a platí, že štítek např. v1.0.0 byl ve větvi v_1 (a ne třeba v_2).
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Josef Kufner avatar 6.1.2017 23:24 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Git – strom větví a štítků
Ono se to značí tak, že máš větev v1.x a na ní tagy v1.1, v1.2, v1.3,… A když chceš udělat opravu ve verzi v1.2, tak uděláš větev v1.2.x a po opravě to otaguješ v1.2.1. Takže je celkem jasné, co kam patří.
Hello world ! Segmentation fault (core dumped)
xkucf03 avatar 6.1.2017 23:38 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Git – strom větví a štítků
Ono se to značí tak…
Existuje asi tisíc způsobů, jak používat verzovací systémy :-)
že máš větev v1.x a na ní tagy v1.1, v1.2, v1.3,… A když chceš udělat opravu ve verzi v1.2, tak uděláš větev v1.2.x a po opravě to otaguješ v1.2.1.
Tu konvenci mám podobnou, akorát větve mají v názvu to podtržítko, aby bylo na první pohled vidět, co je větev a co štítek.
Takže je celkem jasné, co kam patří.
Mně ano, ale tohle jsem chtěl spíš pro ostatní, aby to viděli v grafu.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
6.1.2017 23:23 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Git – strom větví a štítků
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud to nemusí být konzolový program, tak se možná dá použít Gitk.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
xkucf03 avatar 6.1.2017 23:41 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Git – strom větví a štítků
Chtěl bych to vytisknout, poslat e-mailem, příložit do dokumentace… Takže nejvíc by mi vyhovoval ten ASCII-artový (resp. unicode) strom (jako dělá příkaz tree).

Asi nejjednodušší bude si skriptem udělat mkdir a touch někde v /tmp, pak nad tím pustit tree a pak to smazat :-)
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Josef Kufner avatar 7.1.2017 00:22 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Git – strom větví a štítků
Příloha:
To se radši podívej na Graphviz.
(
  echo "digraph G { rankdir=\"LR\";"
  for t in `git tag; git branch --list | sed 's/^..//'`
  do
    p=`git describe "$t^" --abbrev=0 2>/dev/null`
    [ -n "$p" ] && echo "  \"$p\" -> \"$t\";"
  done
  echo "}"
) | dot -Tsvg -o /tmp/a.svg
Ukázka výstupu pro repozitář GitLabu v příloze.
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.