Визуализация топологии отрасли в git

Я играю с git изолированно на своей машине, и мне трудно поддерживать ментальную модель всех моих ветвей и совершает. Я знаю, что могу сделать git log, чтобы увидеть историю фиксации, где я есть, но есть ли способ увидеть всю топографию отрасли, что-то вроде этих карт ascii, которые, кажется, используются повсюду для объяснения ветвей?

      .-A---M---N---O---P
     /     /   /   /   /
    I     B   C   D   E
     \   /   /   /   /
      `-------------'

Просто кажется, что кто-то идет и пытается забрать мой репозиторий, будет сложно понять, что происходит.

Думаю, на меня влияет AccuRev поток браузера...

Ответы

Ответ 1

git log --graph или gitk. (Оба также принимают --all, которые будут отображать все ветки вместо текущего.)

Edit: Для имен ветвей и компактного представления попробуйте: git log --graph --decorate --oneline

Ответ 2

Я обычно использую

git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"

С цветами (если ваша оболочка Bash):

git log --graph --full-history --all --color \
        --pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"

Это будет печатать текстовое представление следующим образом:

* 040cc7c       (HEAD, master) Mannual is NOT built by default
* a29ceb7       Removed offensive binary file that was compiled on my machine and was hence incompatible with other machines.
| * 901c7dd     (cvc3) cvc3 now configured before building
| * d9e8b5e     More sane Yices SMT solver caller
| | * 5b98a10   (nullvars) All uninitialized variables get zero inits
| |/
| * 1cad874     CFLAGS for cvc3 to work succesfully
| *   1579581   Merge branch 'llvm-inv' into cvc3
| |\
| | * a9a246b   nostaticalias option
| | * 73b91cc   Comment about aliases.
| | * 001b20a   Prints number of iteration and node.
| |/
|/|
| * 39d2638     Included header files to cvc3 sources
| * 266023b     Added cvc3 to blast infrastructure.
| * ac9eb10     Initial sources of cvc3-1.5
|/
* d642f88       Option -aliasstat, by default stats are suppressed

(Вы можете просто использовать git log --format=oneline, но он свяжет фиксацию сообщений с цифрами, что выглядит менее симпатичным IMHO).

Чтобы создать ярлык для этой команды, вы можете отредактировать файл ~/.gitconfig:

[alias]
  gr = log --graph --full-history --all --color --pretty=tformat:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s%x20%x1b[33m(%an)%x1b[0m"

Однако, как отмечает Sodel the Vociferous в комментариях, такую ​​длинную команду форматирования трудно запомнить. Обычно это не проблема, так как вы можете поместить ее в файл ~/.gitconfig. Однако, если вам иногда приходится регистрироваться на удаленном компьютере, где вы не можете изменить файл конфигурации, вы можете использовать более простую, но более быструю версию:

git log --graph --oneline

Ответ 3

У меня есть 3 псевдонима (и 4 псевдонима для быстрого использования), которые я обычно ~/.gitconfig файл ~/.gitconfig:

[alias]
    lg = !"git lg1"
    lg1 = !"git lg1-specific --all"
    lg2 = !"git lg2-specific --all"
    lg3 = !"git lg3-specific --all"

    lg1-specific = 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(auto)%d%C(reset)'
    lg2-specific = 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(auto)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
    lg3-specific = 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 cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)%n''          %C(white)%s%C(reset)%n''          %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)'

git lg/git lg1 выглядит так:

git lg1

git lg2 выглядит так:

git lg2

и git lg3 выглядит так:

git lg3

Примечание. Ответ скопирован и улучшен после ответа по адресу fooobar.com/questions/8316/... поскольку он гораздо более уместен здесь, чем был там.Оставьте копию другого вопроса по историческим причинам - сейчас он закрыт, а на ответ ссылается куча других ответов.

Ответ 4

В любой из этих рецептов (на основе git log или gitk) вы можете добавить --simplify-by-decoration, чтобы свернуть неинтересные линейные части истории. Это делает намного больше топологии видимой сразу. Теперь я могу понять большие истории, которые были бы непостижимы без этого варианта!

Я почувствовал необходимость опубликовать это, потому что это, похоже, не так хорошо известно, как должно быть. Он не появляется в большинстве вопросов о переполнении стека о визуализации истории, и мне потребовалось немало усилий для поиска - даже после того, как я знал, что хочу этого! Я наконец нашел его в этом отчете об ошибке Debian. Первое упоминание о переполнении стека, по-видимому, является этим ответом Антуаном Пелиссе.

Ответ 5

Gitk когда-нибудь больно читать.

enter image description here

Мотивируйте меня написать GitVersionTree.

enter image description here

Ответ 6

"99.999% моего времени просматривает историю git lg, а 0,001% - git log"

Просто поделитесь 2 псевдонимами журналов, которые могут быть полезны. (настроить из .gitconfig)

[Alias]
     lg = log --graph --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
     hist = log --graph --full-history --all --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
  • git lg будет видеть текущую историю ветвей.
  • git hist увидит всю историю ветвей.

Ответ 7

Мне нравится, git log:

 git log --graph --oneline --branches

(также с -all, для просмотра удаленных ветвей также)

Работает с последними выпусками Git: введено с 1.6.3 (Thu, 7 мая 2009 г.)

  • "--pretty=<style>" для семейства журналов команд теперь можно записать как "--format=<style>". Кроме того, --format=%formatstring является короткой рукой для --pretty=tformat:%formatstring.

  • "--oneline" является синонимом слова "--pretty=oneline --abbrev-commit".

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix
| | * 8183707 a first bug10 fix
| |/
| * e727105 a second evol for 2.0
| * 473d44e a main evol
|/
* b68c1f5 first evol, for making 1.0

Вы также можете ограничить диапазон отображения журнала (количество коммитов):

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all -5
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix

(показывать только последние 5 коммитов)


Что мне не нравится в текущем выбранном решении:

 git log --graph

Он отображал слишком много информации (когда я хочу только посмотреть краткое резюме):

PS D:\git\tests\finalRepo> git log --graph
* commit 4919b681db93df82ead7ba6190eca6a49a9d82e7
| Author: VonC <[email protected]>
| Date:   Sat Nov 14 13:42:20 2009 +0100
|
|     a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <[email protected]>
| Date:   Sat Nov 14 13:41:50 2009 +0100
|
|     a first bug10 fix
|

gitk отлично, но заставляет меня покинуть сеанс оболочки для другого окна, в то время как быстрое отображение последних n совершается быстро.

Ответ 8

Взгляните на Gitkraken - кросс-платформенный графический интерфейс, который показывает топологию ясным способом.

Топология

Здесь вы найдете видеоурок о некоторых дополнительных функциях.

Ответ 9

Gitg - отличный инструмент для Linux, похожий на Gitx для OS X. Просто запустите "gitg" в командной строке откуда-то внутри вашей древовидной структуры репозитория (то же самое с gitx).

Ответ 10

Я нашел "git -big-picture" весьма полезным: https://github.com/esc/git-big-picture

Он создает довольно 2D-графики, используя dot/graphviz вместо довольно линейных, "одномерных" представлений gitk и друзей. С опцией -i он показывает точки ветвления и фиксирует коммиты, но оставляет все в промежутке.

Ответ 11

Хорошим веб-инструментом является ungit. Он работает на любой платформе, поддерживаемой node.js и git. Существует видео о том, как он работает для тех, кто находит такие вещи проще, чем чтение...

enter image description here

Ответ 12

Посмотрите BranchMaster.

Я написал его, чтобы визуализировать сложную структуру ветвей, свернув все коммиты между ними на одну строку. Цифры указывают количество коммитов.

enter image description here

Ответ 13

Giggle рисует приятные графики

Ответ 14

У Tortoise Git есть инструмент под названием "График ревизий". Если вы работаете в Windows, достаточно просто щелкнуть правой кнопкой мыши по вашему репозиторию → Tortoise Git → Revision Graph.

Ответ 15

Я использую следующие псевдонимы.

[alias]
    lol = log --graph --decorate --pretty=oneline --abbrev-commit
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all

У этого есть больше информации в цветовой схеме, чем псевдонимы, которые я видел выше. Это также кажется довольно распространенным явлением, поэтому у вас может быть шанс, что он будет существовать в другой среде или сможет говорить об этом в беседе, не объясняя это.

С скриншотами и полным описанием здесь: http://blog.kfish.org/2010/04/git-lola.html

Ответ 16

Никто не упомянул tig? Это не сворачивает ветки как "BranchMaster", но...

Это быстро, работает в терминале.

Поскольку это так быстро (+ управление с клавиатуры), вы получаете отличный UX, это почти как мой " ls " для каталогов, содержащих git-репозитории.

https://jonas.github.io/tig/

Он имеет обычные ярлыки, / для поиска и т.д.

The revision graph

(ps. это терминал на фоне этого скриншота, сейчас он выглядит лучше, но мой компьютер отказывается делать скриншот, извините)

(pps. Я тоже использую gitkraken и у меня действительно четкие визуализации, но он намного тяжелее tig)

Ответ 17

У меня есть псевдоним git log в ~/.gitconfig для просмотра истории графа:

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

С псевдонимом git l покажет что-то вроде этого:

enter image description here

В Git 2.12 + вы даже можете настроить цвета линий графика, используя log.graphColors конфигурации log.graphColors.

Что касается формата журналов, он похож на --oneline, с добавлением имени автора (относительно .mailmap) и относительной даты автора. Обратите внимание, что синтаксис %C(auto), который указывает Git использовать цвета по умолчанию для хэша коммита и т.д., Поддерживается в Git> = 1.8.3.

Ответ 18

Для пользователей Mac: закажите (не каламбур) бесплатный инструмент с открытым исходным кодом GitUp: http://gitup.co/

Мне нравится способ отображения графиков, он понятнее, чем некоторые другие инструменты, которые я видел.

Проект находится здесь: https://github.com/git-up/GitUp

GitUp screenshot

Ответ 19

Я нашел это сообщение в блоге, которое показывает краткий путь:

git log --oneline --abbrev-commit --all --graph --decorate --color

Я обычно создаю псевдоним для вышеуказанной команды:

alias gl='git log --oneline --abbrev-commit --all --graph --decorate --color'

и просто используйте gl.

или добавьте псевдоним в конфиг git. Откройте ~/.gitconfig

[alias]
        lg = log --oneline --abbrev-commit --all --graph --decorate --color

и используйте это так: git lg

Ответ 21

Gitx также является фантастическим инструментом визуализации, если вы оказались на OS X.

Ответ 22

Мой личный псевдоним, через .gitconfig, есть:

graph = log --graph --color --all --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"

Ответ 23

Другая команда git log. Этот с столбцами с фиксированной шириной:

git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short

Ответ 24

Старый пост, но посмотрите SmartGit. Это очень напоминает визуализацию ветвей Tortoise HG, и это бесплатно для некоммерческого использования.

Ответ 25

В Windows есть очень полезный инструмент, который вы можете использовать: расширения git. Это инструмент gui и делает операции git очень легкими.

Также он открывается.

http://gitextensions.github.io

Ответ 26

Я пробовал --simplify-by-decoration, но все мои слияния не показываются. Поэтому я вместо этого просто обрезаю строки без символов "\" и "/" в заголовках, всегда сохраняя строки с "(" указание ветвей сразу после этого ". При отображении истории ветвей я вообще не заинтересован в комментариях коммита, поэтому Я также удаляю их. В итоге я получаю следующий псевдоним оболочки.

gbh () { 
    git log --graph --oneline --decorate "[email protected]" | grep '^[^0-9a-f]*[\\/][^0-9a-f]*\( [0-9a-f]\|$\)\|^[^0-9a-f]*[0-9a-f]*\ (' | sed -e 's/).*/)/'
}

Ответ 27

мы можем сделать это более сложным?

Как насчет простого git log --all --decorate --oneline --graph (вспомните A Dog = --all - Decorate --oneline --Graph)

Ответ 28

Официальный сайт Git привлек некоторые сторонние инструменты графического интерфейса платформы. Нажмите здесь Инструменты git GUI для платформы Linux

Я использовал gitg и GitKraken для платформы Linux. Оба хорошо, чтобы понять дерево коммитов