Русский ▾ Topics ▾ Latest version ▾ git-commit-tree last updated in 2.49.0

НАЗВАНИЕ

git-commit-tree — создать новый объект коммита

ОБЗОР

git commit-tree <дерево> [(-p <родитель>)…​]
git commit-tree [(-p <родитель>)…​] [-S[<id-ключа>]] [(-m <сообщение>)…​]
		  [(-F <файл>)…​] <дерево>

ОПИСАНИЕ

Обычно это не то, что конечный пользователь хочет запускать напрямую. Вместо этого см. git-commit[1].

Создаёт новый объект коммита на основе предоставленного объекта дерева и выводит id нового объекта коммита в stdout. Сообщение журнала читается из стандартного ввода, если не указаны параметры -m или -F.

Параметры -m и -F могут быть указаны любое количество раз, в любом порядке. Сообщение журнала коммита будет составлено в том порядке, в котором указаны параметры.

Объект коммита может иметь любое количество родителей. Ровно с одним родителем это обычный коммит. Наличие более одного родителя делает коммит слиянием нескольких линий истории. Начальные (корневые) коммиты не имеют родителей.

В то время как дерево представляет определённое состояние каталога рабочего каталога, коммит представляет это состояние во "времени" и объясняет, как туда попасть.

Обычно коммит идентифицирует новое состояние "HEAD", и хотя Git не заботится о том, где вы сохраняете заметку об этом состоянии, на практике мы склонны просто записывать результат в файл, на который указывает .git/HEAD, чтобы мы всегда могли видеть, каким было последнее зафиксированное состояние.

ПАРАМЕТРЫ

<tree>

Существующий объект дерева.

-p <родитель>

Каждый -p указывает id родительского объекта коммита.

-m <сообщение>

Абзац в сообщении журнала коммита. Это может быть указано более одного раза, и каждое <сообщение> становится отдельным абзацем.

-F <файл>

Прочитать сообщение журнала коммита из указанного файла. Используйте - для чтения из стандартного ввода. Это может быть указано более одного раза, и содержимое каждого файла становится отдельным абзацем.

-S[<id-ключа>]
--gpg-sign[=<id-ключа>]
--no-gpg-sign

Подписывать коммиты GPG. Аргумент keyid является необязательным и по умолчанию равен идентификатору коммиттера; если указан, он должен примыкать к параметру без пробела. --no-gpg-sign полезен для отмены параметра --gpg-sign, указанного ранее в командной строке.

Информация о коммите

Коммит инкапсулирует:

  • все id родительских объектов

  • имя автора, адрес электронной почты и дата

  • имя коммиттера, адрес электронной почты и время коммита.

Комментарий к коммиту читается из stdin. Если запись журнала изменений не предоставлена через перенаправление "<", git commit-tree будет просто ждать, пока она не будет введена и не завершена с помощью ^D.

ФОРМАТЫ ДАТЫ

Переменные среды GIT_AUTHOR_DATE и GIT_COMMITTER_DATE поддерживают следующие форматы дат:

Внутренний формат Git

<unix-timestamp> <time-zone-offset>, где <unix-timestamp> — количество секунд, прошедших с эпохи UNIX (00:00:00 UTC 1 января 1970 года). А <time-zone-offset> является положительным или отрицательным смещением относительно UTC. Например, для CET (центральноевропейское время которое на 1 час опережает UTC) значение будет +0100.

RFC 2822

Стандартный формат даты, описанный RFC 2822, например, Thu, 07 Apr 2005 22:13:13 +0200.

ISO 8601

Время и дата, согласно стандарту ISO 8601, например, 2005-04-07T22:13:13'. Принимается также пробел вместо `Т. Дробные доли секунды будут отброшены, например ‘2005-04-07T22:13:13.019’ будет восприниматься как ‘2005-04-07T22:13:13’.

Note
Кроме того, часть представляющая дату принимается в следующих форматах: ГГГГ.ММ.ДД, ММ/ДД/ГГГГ и ДД.ММ.ГГГГ.

Обсуждение

Git до некоторой степени агностичен в отношении кодировок символов.

  • Содержимое blob-объектов — простая последовательность байтов, которая ни как не интерпретируется особым образом. На уровне ядра Git ни какая перекодировка не производится.

  • Пути кодируются в UTF-8 в форме нормализации C. Это относится к объектам-деревьям, файлу индекса, именам ссылок, а также к путям в аргументах командной строки, переменных среды и файлах конфигурации (.git/config (см. git-config[1]), gitignore[5], gitattributes[5] и gitmodules[5]).

    Обратите внимание, что Git на базовом уровне рассматривает имена путей просто как последовательности ненулевых байтов, ни каких перекодировок путей не происходит (за исключением Mac и Windows). Таким образом, использование путей, содержащих не-ASCII символы, будет по большей части работать даже на платформах и файловых системах, использующих устаревшие расширенные ASCII-кодировки. Однако репозитории, созданные на таких системах, не будут корректно работать на системах с UTF-8 (например, Linux, Mac, Windows) и наоборот. Кроме того, многие инструменты, основанные на Git, предполагают, что пути передаются в UTF-8, и не умеют корректно отображать другие кодировки.

  • Сообщения коммитов, как правило, кодируются в UTF-8, но другие расширенные ASCII-кодировки также поддерживаются, в частности это включает: ISO-8859-x, CP125x и многие другие, но не включает UTF-16/32, EBCDIC и многобайтовые кодировки CJK (GBK, Shift-JIS, Big5, EUC-x, CP9xx и т.д.).

Хотя мы и поощряем, использование UTF-8 в качестве кодировки сообщений коммитов, но и ядро Git, и высокоуровневые пользовательские программны разработаны так, чтобы не принуждать к обязательному использованию UTF-8 в проектах. Если все участники конкретного проекта считают более удобным использовать устаревшие кодировки, Git не запрещает это. Однако есть несколько моментов, которые стоит иметь в виду.

  1. git commit и git commit-tree будут выдавать предупреждение, если переданное ему сообщение коммита не похоже на корректную строку UTF-8, если только вы явно не объявили, что ваш проект использует устаревшую кодировку. Это можно сделать, добавив переменную конфигурации i18n.commitEncoding в файл .git/config, например:

    [i18n]
    	commitEncoding = ISO-8859-1

    Объекты-коммиты, которые будут созданные пока включена приведённая выше настройка, будут записывать значение i18n.commitEncoding в своём заголовке encoding. Это поможет другим людям, которые будут просматривать их позже. Отсутствие этого заголовка означает, что сообщение коммита использует кодировку в UTF-8.

  2. git log, git show, git blame и другие подобные команды смотрят на заголовок encoding объекта-коммита, и пытаются перекодировать сообщение журнала в UTF-8, если не указано иное. Вы можете указать нужную кодировку вывода с помощью i18n.logOutputEncoding в файле .git/config, например:

    [i18n]
    	logOutputEncoding = ISO-8859-1

    Если эта переменная конфигурации у вас не установлена, то вместо ней используется значение i18n.commitEncoding.

Заметьте, что мы сознательно решили не перекодировать сообщения коммитов прямо во время создания коммита (т.е. не принуждать к использованию UTF-8 на уровне объектов-коммитов), потому что перекодировка в UTF-8 не обязательно является обратимой операцией.

ФАЙЛЫ

/etc/mailname

СМ. ТАКЖЕ

GIT

Является частью пакета git[1]