Как вывести текущий хэш коммита git-репозитория в приложении или на веб-сайте
Бывают ситуации, когда запиливаешь новый функционал или правишь старый, тестируешь — всё ок. А выкатываешь на продакшен — ничего не работает и вообще ощущение, будто изменения не накатились. Как быть уверенным, что на продакшене крутится именно тот код, который был на него залит? Одним из решений данной проблемы может стать отображение версии текущего билда. Естественно, номерация версий должна быть не ручной, а автоматической. Если вы используете git для ведения репозитория своего проекта, то в качестве номера версии можно использовать хэш-текущего комита + время комита.
Получить хэш текущего активного комита можно с помощью команды:
А время комита можно получить так:
Формат можно менять, чтобы получить timestamp, нужно указать —format=%ct.
Естественно, все эти команды не нужно дёргать в реалтайме на каждый запрос. Их достаточно вызвать 1 раз во время сборки проекта и записать, например, в файл с константами или в конфиг. Удобно делать такие сборки с помощью утилиты make.
Можно пойти дальше, и вместо некрасивого и непонятного хэша использовать более красивое и семантическое версионирование. Например, с помощью библиотек sebastianbergmann/version или nikolaposa/version.
Читайте также
Work area / stage area / commit reset(—sogt –hard –mixed) vs checkout HEAD Индекс Рабочий Каталог Сохранность РК? На уровне…
Команда git cherry-pick позволяет забрать один коммит из другой ветки и вставить его в текущую. В качестве параметра передаётся идентификатор…
Подборка команд для работы с системой контроля версий git, которые очень пригодятся в повседневной работе программиста. Большая часть команд подойдёт…
Просмотр истории коммитов в Git
Древовидный вид
Выводим полный граф коммитов c сокращёнными хешами, ссылками на коммиты и относительной датой. Используемый формат: синий сокращённый хеш коммита, зелёная дата, белые сообщение и автор, жёлтые ссылки на коммит.
Выводим полный граф коммитов c сокращёнными хешами, ссылками на коммиты и абсолютной датой. Используемый формат: синий сокращённый хеш коммита, голубая абсолютная дата, зелёная относительная дата, жёлтые ссылки на коммит, перевод строки, белые сообщение и автор.
Выводим полный граф коммитов, отводя по одной строке на коммит.
Выводим полный граф коммитов c сортировкой по дате, отображаемой в краткой форме. Используемый формат: сокращённый хеш, дата, автор, зелёные ссылки на коммит, сообщение.
Линейный вид
Вывод списка коммитов с параметрами по умолчанию.
Выводим список коммитов и показываем diff для каждого.
Выводим список коммитов и показываем статистику по каждому.
Выводим список коммитов по одному на строчке.
Выводим список коммитов с использованием следуюещго формата: сокращённый хеш коммита, автор, относительная дата, сообщение.
Если есть возможность, то всё таки коммиты приятнее изучать через специализированный интерфейс, а не из консоли. Лично я очень люблю GitExtensions:
Также удобно использовать встроенную утилиту gitk:
Полезные параметры
Все параметры команды git log не нужны, но некоторые самые полезные хорошо бы помнить. Приведу несколько примеров использования ходовых параметров.
Просмотр истории коммитов
Следующие несколько примеров используют очень простой проект «simplegit». Чтобы клонировать проект, используйте команду:
Если вы запустите команду git log в каталоге клонированного проекта, вы увидите следующий вывод:
По умолчанию (без аргументов) git log перечисляет коммиты, сделанные в репозитории в обратном к хронологическому порядке — последние коммиты находятся вверху. Из примера можно увидеть, что данная команда перечисляет коммиты с их SHA-1 контрольными суммами, именем и электронной почтой автора, датой создания и сообщением коммита.
Команда git log имеет очень большое количество опций для поиска коммитов по разным критериям. Рассмотрим наиболее популярные из них.
Сокращенный хеш коммита
Сокращенный хеш дерева
Сокращенный хеш родителей
Электронная почта автора
Относительная дата автора
Электронная почта коммитера
Относительная дата коммитера
Вам наверное интересно, какая же разница между автором и коммитером. Автор — это человек, изначально сделавший работу, а коммитер — это человек, который последним применил эту работу. Другими словами, если вы создадите патч для какого-то проекта, а один из основных членов команды этого проекта применит этот патч, вы оба получите статус участника — вы как автор и основной член команды как коммитер. Более детально мы рассмотрим разницу в главе Распределенный Git.
Данный вывод будет нам очень интересен в следующей главе, где мы рассмотрим ветвление и слияние.
Мы рассмотрели только несколько простых опций для форматирования вывода с помощью команды git log — на самом деле их гораздо больше. Наиболее распространенные опции для команды git log содержит описание как уже рассмотренных, так и нескольких новых опций, которые могут быть полезными в зависимости от нужного формата вывода.
Таблица 2. Наиболее распространенные опции для команды git log
Опция
Описание
Показывает патч для каждого коммита.
Показывает статистику измененных файлов для каждого коммита.
Показывает список измененных файлов после информации о коммите.
Показывает список файлов, которые добавлены/изменены/удалены.
Показывает только несколько символов SHA-1 чек-суммы вместо всех 40.
Отображает дату в относительном формате (например, «2 weeks ago») вместо стандартного формата даты.
Отображает ASCII граф с ветвлениями и историей слияний.
Показывает коммиты в альтернативном формате. Возможные варианты опций: oneline, short, full, fuller и format (с помощью последней можно указать свой формат).
Ограничение вывода
В таблице Опции для ограничения вывода команды git log вы можете увидеть эти и другие распространенные опции.
Таблица 3. Опции для ограничения вывода команды git log
Опция
Описание
Показывает только последние n коммитов.
Показывает только те коммиты, которые были сделаны после указанной даты.
Показывает только те коммиты, которые были сделаны до указанной даты.
Показывает только те коммиты, в которых запись author совпадает с указанной строкой.
Показывает только те коммиты, в которых запись committer совпадает с указанной строкой.
Показывает только коммиты, сообщение которых содержит указанную строку.
Показывает только коммиты, в которых изменение в коде повлекло за собой добавление или удаление указанной строки.
Например, если вы хотите увидеть, в каких коммитах произошли изменения в тестовых файлах в исходном коде Git в октябре 2008 года, автором которых был Junio Hamano и которые не были коммитами слияния, вы можете запустить следующую команду:
Из почти 40 000 коммитов в истории исходного кода Git, эта команда показывает только 6, которые соответствуют этим критериям.
Стандартные команды при работе с репозиторием (git)
В данном разделе мы собрали решение типовых задач, которые могут вам при работе с git репозиторием. В своих проектах мы используем обычную сборку git и GitLab. Поэтому в данных примерах могут быть примеры описанные при работе с данными программами.
Генерация и настройка ключей git для деплоя
Обновление проекта на git с сервера
Данная действие требуется, когда на сервере, где установлен проект, вносились правки напрямую (например, через sftp или ssh, а не через git). Для обновления необходимо проделать следующие операции:
Какие ветки создавать на новые проекты
Как залить обновления на сервер с git
Если проект имеет только боевую версию (prod):
Если проект имеет 2 версии: dev (тестовую версию) и prod (боевой проект)
Если у нас используется 2 версии проекта, то обновления заливаются в 2 ветки: dev и prod.
Как откатить коммит?
Если требуется отменить изменения в уже созданном коммите, допустим, вы что-то забыли дописать в коде, то нужно выполнить:
Если требуется откатить залитые правки до предыдущего коммита, то нужно выполнить:
Как перенести новый проект клиента в свой git?
В том случае, если проект редактировался напрямую через ftp или ssh, то требуется обновить версию проекта, размещенного на git. Для этого необходимо выполнить следующие шаги:
Анализ истории изменений (коммитов) — Введение в Git
Программирование — это не только написание нового кода, но и постоянный анализ уже написанного кода. Иногда код понятен и без слов (это хороший код), но так происходит не всегда. Код может вызывать вопросы. Почему он написан именно так, кто его написал и когда.
Ответить на эти вопросы помогает история изменений. Если коммиты сделаны хорошо, то есть они имеют понятное описание, и каждый из них делает ровно одну законченную вещь, то история становится мощным инструментом для анализа кода. Именно поэтому так важно хорошо понимать философию Git и следовать лучшим практикам при работе с ним.
Git предоставляет целую пачку команд со множеством опций, позволяющих вытащить невероятное количество информации и показать всё, что скрыто.
Git Log
Из этого вывода мы можем узнать кто, когда и какие коммиты делал. Если коммиты оформлены хорошо, то по их описанию уже многое понятно. Оформление коммитов — отдельная тема, которую мы рассмотрим позже.
Git Show
У каждого коммита есть идентификатор (говорят «хеш»), уникальный набор символов. С помощью хеша можно посмотреть все изменения, сделанные в рамках одного коммита:
Хеши коммитов в git очень длинные, и ими бывает неудобно пользоваться. Поэтому разработчики git добавили возможность указывать только часть хеша. Достаточно взять первые 8 символов и подставить их в ту команду, которая работает с коммитами:
Чаще всего вам не придётся высчитывать их самим, большая часть команд git выводит хеш коммита в сокращенном варианте, облегчая его использование. Такое упрощение хорошо работает, потому что даже первые 8 символов будут всегда уникальными.
Git Blame
Важно помнить, что изменение строчки — не то же самое, что её написание. Вполне возможно, что программист исправил небольшую опечатку, а саму строку написал кто-то до него. В любом случае, имея такой вывод, уже легко пойти дальше и изучить конкретный коммит.
Git Grep
Github
В простых ситуациях анализировать проект можно прямо на Гитхабе. Он позволяет просматривать историю коммитов, изменения в конкретном коммите и многое другое.
Самостоятельная работа
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты.
Нашли опечатку или неточность?
Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Что-то не получается или материал кажется сложным?
Загляните в раздел «Обсуждение»:
Об обучении на Хекслете
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.