История изменений#
В этом уроке мы:
узнаем, что дает нам история изменений проекта;
познакомимся с командой
git logи ее опцией--reverse;перечислим все поля коммита.
В хранилищах малых проектов в среднем около нескольких сотен и тысяч коммитов, средних проектов – десятки тысяч, а крупных – сотни тысяч и миллионы. Эти числа получаются из 4 коммита в день на разработчика и 250 рабочих дней в году.
Коммиты интересны не только с точки зрения количественных показателей. История коммитов отвечает на следующие вопросы:
кто чем занимается в команде;
кто как работает;
что изменилось в программе за последнее время;
кто изменил этот файл;
кто добавил эту функцию;
кто и когда внес ошибку в программу;
насколько интенсивно идет работа над проектом;
зачем был добавлен этот код?
и некоторые другие специфические вопросы.
Также доступ к коммитам позволяет автоматизировать часть рабочих процессов в проекте:
принимать решение о повышении версии проекта;
формировать список изменений в релизе, так называемый changelog-файл.
Ответы на эти вопросы можно получить только если вы владеете инструментом по анализу коммитов – командой git log.
git log делает два крупных действия: настраивает вывод и фильтрует вывод.
Команда git log без аргументов покажет всю историю коммитов проекта в порядке обратном их созданию.
Последний коммит в проекте будет самым первым в списке, а первый коммит – самым последним.
Если вывод команды не помещается на экран, то он перенаправится в пейджер less.
Выход из пейджера происходит по команде q.
commit 317d080fd9d7d66955e4bc2055a08b4edb044cf1 (HEAD -> main, origin/main, origin/HEAD)
Author: wolodyx <wolodyx@yandex.ru>
Date: Thu Mar 9 08:42:24 2023 +0300
Исправлена утечка серверного сокета
commit 8e36f074fb3374c6d0007c934765d3f6a17d955e
Author: wolodyx <wolodyx@yandex.ru>
Date: Wed Mar 8 14:23:38 2023 +0300
Закрытие клиентских сокетов на стороне сервера
commit ea3a417d17049d6b450a0076d82898f964213b6c
Author: wolodyx <wolodyx@yandex.ru>
Date: Sat Mar 4 10:56:31 2023 +0300
Автоматическое закрытие клиента при потере связи с сервером
Перевернуть историю изменений, когда первый коммит отобразится в начале, позволяет опция --reverse команды git log.
Коммит – это объект, который несет следующую информацию: Коммит содержит следующие поля, на которые можно наложить условия для фильтрации:
информация об авторе (имя и электронная почта);
дата и время подготовки изменений;
информация о коммитере (имя и электронная почта);
дата и время фиксации изменений в хранилище.
изменения в файлах;
сообщение, описывающее изменения;
С каждым коммитом связано 40-разрядное уникальное шестнадцатеричное число, полученное хеш-функцией SHA-1 по содержимому коммита. В конечном счете мы получаем уникальное число для всех коммитов в пределах хранилища. Это число позволяет сослаться на коммит. Не обязательно вводить все его цифры, достаточно первых 3-7 цифр. Если возникнет неоднозначность из-за короткого индетификатора, то Git укажет на это.
Поле commit содержит хеш-сумму в выводе.
Поле Author отображает данные автора коммита – его имя и адрес электронной почты.
В поле Date указаны дата и время коммита в формате дня недели, названия месяца, числа, времени, года и часового пояса.
Сообщение к коммиту может быть как однострочной, так и многострочной.
Если строк несколько, то первую строку выделяют заголовком, а последующие строки, формирующие тело сообщения, отделяют от первого пустой строкой.
Автор коммита – это участник разработки, оформивший изменения, а коммитер – внесший их в хранилище.
Обычно роли автора и коммитера играет один человек, который оформляет и фиксирует изменения.
Но процесс разработки открытого ПО вносит свои особенности: не все авторы имеют доступ к официальному хранилищу.
Тогда они предлагают свои изменения через патчи.
Коммитер оценивает изменения, и если они устраивают его, вносит их в хранилище от своего имени.
При этом имя автора сохраняется.
Простой пример, где автор и коммитер разные участники – это первый коммит при создании хранилища из веб-интерфейса GitHub.
Система первым коммитом добавляет файлы лицензии и README.md от своего имени, но с данных, запрошенных от автора.
commit 49b5bac3ae3de3f26606c6ba7b8f7eb85bb558d8
Author: Владимир <wolodyx@yandex.ru>
AuthorDate: Sat Mar 4 08:18:44 2023 +0300
Commit: GitHub <noreply@github.com>
CommitDate: Sat Mar 4 08:18:44 2023 +0300
Initial commit