GitK
Gitk — это первый в своем роде графический браузер репозитория. Его можно рассматривать как оболочку графического интерфейса для git log
. С помощью Gitk можно проанализировать и наглядно представить историю репозитория. Инструмент написан на Tcl/Tk, поэтому его можно назвать кроссплатформенным. Gitk
поддерживается Полом Маккеррасом в качестве независимого проекта, не связанного с ядром Git. Стабильные версии распространяются в составе пакета Git для удобства конечных пользователей. Gitk может стать полезным учебным пособием для новичков в Git.
Gitk overview
Инструмент Gitk может принести пользу при обучении новичков в управлении версиями или разработчиков, которые переходят в Git из другой системы управления версиями, например Subversion. Gitk — удобная утилита, которая поставляется вместе с ядром Git и включает графический пользовательский интерфейс для наглядного представления внутренней механики Git. Среди других популярных графических интерфейсов Git можно выделить git-gui, а также Sourcetree от Atlassian.
Использование
Gitk вызывается аналогично git log
. При выполнении команды gitk
запускается пользовательский интерфейс Gitk, который будет выглядеть примерно так:
На левой верхней панели показаны коммиты в репозитории (сверху — самые последние). На правой нижней панели отображается список файлов, затронутых выбранным коммитом. На левой нижней панели представлены сведения о коммите и полный список изменений. Если нажать файл с правой нижней панели, на левой нижней панели отобразятся изменения в соответствующем разделе кода.
Gitk отражает текущее состояние репозитория. Если оно изменится в результате работы с командной строкой (например, изменятся ветки), Gitk нужно будет перезагрузить. Для перезагрузки Gitk можно использовать команду меню File -> Reload (Файл -> Перезагрузить).
Связанные материалы
Перемещение полного репозитория Git
СМ. РЕШЕНИЕ
Изучите Git с помощью Bitbucket Cloud
По умолчанию в Gitk отображается текущая история коммитов. Gitk имеет множество параметров командной строки, которые можно передать при инициализации. Эти параметры в основном ограничивают список коммитов, которые отображаются на верхних панелях Gitk. В общем виде командная строка с параметрами версий выглядит следующим образом:
Параметры
gitk [<options>] [<revision range>] [--] [<path>…]
<revision range>
Можно указать диапазон версий в виде
, чтобы просмотреть все версии между
и
, или же указать одну версию.
<path>…
Отображение только коммитов с определенным путем к файлу. Для отделения путей от имен версий используйте «--», чтобы отделить пути от любых предшествующих параметров.
--all
Отображение всех веток, тегов и ссылок.
--branches[=<pattern>] --tags[=<pattern>] --remotes[=<pattern>]
Displays the selected item (branches, tags, remotes) as if they were mainline commits. When <pattern>
is passed, further limits refs to ones matching the specified pattern
--since=<date>
Отображение коммитов, выполненных позже указанной даты.
--until=<date>
Отображение коммитов, выполненных раньше указанной даты.
--date-order
Сортировка коммитов по дате.
--merge
Отображение коммитов, которые изменяют конфликтующие файлы, обнаруженные в ходе слияния.
--left-right
Отображение информативных меток, указывающих, к какой стороне сравнения принадлежит коммит. Коммиты с левой стороны имеют в качестве префикса символ «меньше» (<), а коммиты с правой стороны — символ «больше» (>).
--ancestry-path
Если задан диапазон отображаемых коммитов (например, «коммит1..коммит2» или «коммит2 коммит1»
), отображаются только те коммиты, которые находятся непосредственно в цепочке предков между коммит1
и коммит2
, то есть коммиты, которые являются одновременно потомками коммит1
и предками коммит2
(более подробное объяснение см. в разделе «Упрощение истории» на странице руководства git-log(1)
).
L<start>,<end>:<file>
Параметры, которые позволяют эффективно отслеживать историю кода для заданного диапазона номеров строк.
Discussion & examples
Чтобы отобразить полезную информацию, утилите Gitk нужен базовый репозиторий с историей коммитов. Приведенный ниже код представляет собой последовательность команд Bash. С их помощью будет создан новый репозиторий с двумя ветками, в которых есть коммиты, и эти ветки будут объединены в одну.
mkdir gitkdemo &&
cd gitkdemo &&
git init . &&
echo "hello world" > index.txt &&
git add index.txt &&
git commit -m "added index.txt with hello world content"
В качестве примера изучим этот демонстрационный репозиторий с помощью Gitk. Приведенная выше последовательность команд создает новый репозиторий с одним коммитом и файлом index.txt
. Теперь вызовем gitk
для изучения репозитория.
Can Gitk compare two commits?
Продолжим работу с демонстрационным репозиторием и создадим дополнительный коммит:
echo "prpended content to index" >> index.txt &&
git commit -am "prepended content to index"
Once the proceeding commands are executed, gitk
will need to be reloaded. Either reload gitk
from the command line or use the GUI and navigate to File -> Reload
. Once reloaded we should see our new commit
.
Как видите, ссылка на главную ветку main
теперь указывает на новый коммит. Чтобы сравнить эти два коммита, воспользуемся левой верхней панелью истории. На панели истории нажмите коммит, который станет основой для сравнения. После этого щелкните правой кнопкой мыши на втором коммите для вызова контекстного меню.
В контекстном меню доступны следующие варианты:
Diff this -> selected
Diff selected -> this
При выборе любого из этих вариантов на левой нижней панели появится информация о различиях между двумя коммитами. В нашем примере она будет выглядеть так:
Результаты выполнения команды diff показывают, что в файле index.txt
появилась новая строка (prepended content to index), которая была добавлена между двумя коммитами.
How to use Gitk to compare two branches
Продолжим работу с нашим примером репозитория и создадим новую ветку.
git checkout -b new_branch &&
echo "new branch content" > new_branch_file.txt &&
git add new_branch_file.txt &&
git commit -m "new branch commit with new file and prepended content" &&
echo "new branch index update" >> index.txt &&
git commit -am "new branch commit to index.txt with new content"
Показанная последовательность команд создает новую ветку с именем new_branch
и добавляет в нее файл new_branch_file.txt
. Кроме того, добавляется новое содержимое в файл index.txt
, и выполняется дополнительный коммит для этого обновления. Теперь у нас есть новая ветка, которая опережает главную на два коммита. Нам придется перезагрузить Gitk, чтобы увидеть эти изменения.
Это отличная возможность для изучения механизма ветвления в Git. Gitk отображает коммиты в виде линейной последовательности. Термин «ветвление» подразумевает, что на временной шкале должна появиться «ветка» или форк. Ветки Git отличаются от веток в других системах управления версиями. В Git ветка — это указатель на коммит. Указатель перемещается между коммитами по мере их появления. Создавая ветку Git
, вы ничего не меняете в структуре репозитория или дереве исходного кода. В результате этой операции появляется только новый указатель.
Чтобы найти коммиты, которыми различаются эти две ветки, нужно запустить Gitk, указав диапазон версий. При выполнении команды gitk main..new_branch
откроется окно Gitk, в котором будут показаны только коммиты, расположенные между двумя ссылками на ветки.
Эта утилита эффективна при сравнении веток.
Сравнение Gitk и git-gui
git-gui — еще один графический интерфейс Git на базе Tcl/Tk. Если в Gitk основное внимание уделяется навигации и наглядному представлению истории репозитория, то инструмент git-gui ориентирован на уточнение отдельных коммитов
и работу с аннотациями отдельных файлов. Кроме того, он не отображает историю проекта. При этом из меню git-gui можно запустить Gitk для изучения истории. Этот инструмент также вызывается из командной строки с помощью команды git gui
.
Gitk summary
Подводя итоги, повторю, что Gitk — это оболочка графического интерфейса для git log
, которая представляет собой невероятно эффективный инструмент для анализа и наглядного представления истории репозитория. Кроме того, инструмент Gitk может быть полезен при изучении внутреннего устройства Git.
Поделитесь этой статьей
Следующая тема
Рекомендуемые статьи
Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.