Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

История изменений

История изменений

В этом уроке мы:

В хранилищах малых проектов в среднем около нескольких сотен и тысяч коммитов, средних проектов -- десятки тысяч, а крупных -- сотни тысяч и миллионы. Эти числа получаются из 4 коммита в день на разработчика и 250 рабочих дней в году.

Коммиты интересны не только с точки зрения количественных показателей. История коммитов отвечает на следующие вопросы:

Также доступ к коммитам позволяет автоматизировать часть рабочих процессов в проекте:

Ответы на эти вопросы можно получить только если вы владеете инструментом по анализу коммитов -- командой 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