git-notes
Имя
git-notes — добавление заметок к объектам или просмотр заметок
Синопсис
git notes [list [<object>]] git notes add [-f] [--allow-empty] [--[no-]separator | --separator=<paragraph-break>] [--[no-]stripspace] [-F <file> | -m <msg> | (-c | -C) <object>] [-e] [<object>] git notes copy [-f] ( --stdin | <from-object> [<to-object>] ) git notes append [--allow-empty] [--[no-]separator | --separator=<paragraph-break>] [--[no-]stripspace] [-F <file> | -m <msg> | (-c | -C) <object>] [-e] [<object>] git notes edit [--allow-empty] [<object>] [--[no-]stripspace] git notes show [<object>] git notes merge [-v | -q] [-s <strategy> ] <notes-ref> git notes merge --commit [-v | -q] git notes merge --abort [-v | -q] git notes remove [--ignore-missing] [--stdin] [<object>…] git notes prune [-n] [-v] git notes get-ref
Описание
Добавляет, удаляет или читает заметки, связанные с объектами, не изменяя сами объекты.
По умолчанию заметки сохраняются и читаются из refs/notes/commits, но это значение по умолчанию можно переопределить. См. разделы ПАРАМЕТРЫ, КОНФИГУРАЦИЯ и ОКРУЖЕНИЕ ниже. Если эта ссылка не существует, она будет незаметно создана при первой необходимости сохранить заметку.
Обычно заметки используют, чтобы дополнить сообщение коммита, не изменяя сам коммит. Заметки можно показывать с помощью git log вместе с исходным сообщением коммита. Чтобы отличить эти заметки от сообщения, хранящегося в объекте коммита, заметки форматируются с отступом, как и сообщение, после строки без отступа «Заметки (<refname>):» (или «Заметки:» для refs/notes/commits).
Заметки также можно добавлять к патчам, подготовленным с помощью git format-patch, используя параметр --notes. Такие заметки добавляются к патчу в качестве комментария после строки-разделителя из трёх дефисов.
Чтобы изменить набор заметок, показываемых с помощью git log, см. обсуждение notes.displayRef в разделе КОНФИГУРАЦИЯ.
Сведения о том, как переносить заметки между командами, переписывающими коммиты, см. в конфигурации notes.rewrite.<command>.
Подкоманды
-
list -
Вывести объект заметок для указанного объекта. Если объект не указан, показать список всех объектов заметок и объектов, к которым они относятся (в формате «<note-object> <annotated-object>»). Эта подкоманда используется по умолчанию, если подкоманда не указана.
-
add -
Добавить заметки к указанному объекту (по умолчанию — к
HEAD). Прервать выполнение, если у объекта уже есть заметки (для перезаписи существующих заметок используйте-f). Однако при интерактивном использованииadd(когда содержимое заметок вводится в редакторе) существующие заметки будут открыты в редакторе вместо прерывания выполнения (как в подкомандеedit). Если указано несколько параметров-mи-F, между сообщениями будет вставлена пустая строка. Используйте параметр--separator, чтобы указать другой разделитель. Перед добавлением заметки можно интерактивно отредактировать и уточнить сообщение или сообщения, заданные параметрами-mи-F, используя-e(в редакторе). -
copy -
Скопировать заметки первого объекта на второй объект (по умолчанию — на
HEAD). Прервать выполнение, если у второго объекта уже есть заметки или у первого объекта заметок нет (для перезаписи существующих заметок второго объекта используйте-f). Эта подкоманда эквивалентна:gitnotesadd[-f]-C$(gitnoteslist<from-object>) <to-object>В режиме
--stdinсчитывать из стандартного ввода строки в формате<from-object> SP <to-object> [ SP <rest> ] LF
и копировать заметки из каждого
<from-object>в соответствующий ему<to-object>. (Необязательный параметр<rest>игнорируется, чтобы команда могла прочитать входные данные, переданные хукуpost-rewrite.)--stdinнельзя использовать вместе с именами объектов, указанными в командной строке. -
append -
Добавить новые сообщения, заданные параметрами
-mили-F, к существующей заметке либо создать новую заметку, если её нет, для указанного объекта (по умолчанию —HEAD). При добавлении к существующей заметке перед каждым новым сообщением вставляется пустая строка в качестве разделителя абзацев. Разделитель можно настроить с помощью параметра--separator. Перед добавлением заметки можно интерактивно отредактировать заметки для добавления, заданные параметрами-mи-F, используя-e(в редакторе). -
edit -
Редактировать заметки для указанного объекта (по умолчанию — для
HEAD). -
show -
Показать заметки для указанного объекта (по умолчанию — для
HEAD). -
merge -
Слить указанную ссылку на заметки с текущей ссылкой на заметки. Будет предпринята попытка внести в текущую ссылку на заметки («локальную») изменения, сделанные в указанной ссылке на заметки («удалённой») после базового коммита слияния (если он есть).
Если возникнут конфликты и стратегия автоматического разрешения конфликтов заметок (см. раздел «СТРАТЕГИИ СЛИЯНИЯ ЗАМЕТОК») не указана, будет использоваться обработчик
manual. Этот обработчик извлекает конфликтующие заметки в специальное рабочее дерево (.git/NOTES_MERGE_WORKTREE) и предлагает пользователю вручную разрешить там конфликты. После этого пользователь может либо завершить слияние с помощьюgitnotesmerge--commit, либо отменить его с помощьюgitnotesmerge--abort. -
remove -
Удалить заметки для указанных объектов (по умолчанию — для
HEAD). Если в командной строке указан ноль или один объект, это эквивалентно передаче пустого сообщения заметки подкомандеedit.В режиме
--stdinтакже удаляются имена объектов, переданные через стандартный ввод. Иными словами,--stdinможно использовать вместе с именами объектов из командной строки. -
prune -
Удалить все заметки для несуществующих или недостижимых объектов.
-
get-ref -
Вывести текущую ссылку на заметки. Это простой способ получить текущую ссылку на заметки (например, из скриптов).
Параметры
-
-f -
--force -
При добавлении заметок к объекту, у которого уже есть заметки, перезаписать существующие заметки (вместо прерывания выполнения).
-
-m<msg> -
--message=<msg> -
Использовать указанное сообщение заметки (вместо запроса ввода). Если указано несколько параметров
-m, их значения объединяются в отдельные абзацы. -
-F<file> -
--file=<file> -
Взять сообщение заметки из указанного файла. Используйте
-, чтобы прочитать сообщение заметки из стандартного ввода. -
-C<object> -
--reuse-message=<object> -
Использовать указанный blob-объект (например, другую заметку) в качестве сообщения заметки. (Чтобы копировать заметки между объектами, используйте вместо этого
gitnotescopy<object>.) Подразумевает--no-stripspace, поскольку по умолчанию сообщение копируется дословно. -
-c<object> -
--reedit-message=<object> -
Как
-C, но при указании-cзапускается редактор, чтобы пользователь мог дополнительно отредактировать сообщение заметки. -
--allow-empty -
Разрешить сохранение пустого объекта заметки. По умолчанию пустые заметки удаляются автоматически.
-
--separator=<paragraph-break> -
--separator -
--no-separator -
Задать строку, используемую в качестве пользовательского разделителя абзацев (при необходимости в конце добавляется символ новой строки). Если указано
--no-separator, между абзацами не добавляются разделители. По умолчанию используется пустая строка. -
--stripspace -
--no-stripspace -
Очистить пробельные символы. В частности (см. git-stripspace[1]):
-
удалить пробельные символы в конце всех строк
-
заменить несколько идущих подряд пустых строк одной пустой строкой
-
удалить пустые строки в начале и конце ввода
-
при необходимости добавить отсутствующий \n в конец последней строки.
--stripspaceиспользуется по умолчанию, за исключением-C/--reuse-message. Однако имейте в виду, что это зависит от порядка аналогичных параметров. Например, в случае-C<object>-m<message> будет использоваться--stripspace, поскольку значение по умолчанию для-mпереопределяет предшествующий параметр-C. Это известное ограничение, которое может быть устранено в будущем. -
-
--ref=<ref> -
Работать с деревом заметок в
<ref>. ПереопределяетGIT_NOTES_REFи настройкуcore.notesRef. Если ссылка начинается сrefs/notes/, указывается её полное имя; если она начинается сnotes/, к ней добавляется префиксrefs/, а в остальных случаях для формирования полного имени ссылки добавляется префиксrefs/notes/. -
--ignore-missing -
Не считать ошибкой запрос на удаление заметок для объекта, к которому заметки не прикреплены.
-
--stdin -
Допустим только для
removeиcopy. См. соответствующие подкоманды. -
-n -
--dry-run -
Ничего не удалять; только вывести имена объектов, заметки для которых были бы удалены.
-
-s<strategy> -
--strategy=<strategy> -
При слиянии заметок разрешать конфликты заметок с помощью указанной стратегии. Поддерживаются следующие стратегии:
manual(по умолчанию),ours,theirs,unionиcat_sort_uniq. Этот параметр переопределяет настройкуnotes.mergeStrategy. Дополнительные сведения о каждой стратегии слияния заметок см. в разделе «СТРАТЕГИИ СЛИЯНИЯ ЗАМЕТОК» ниже. -
--commit -
Завершить выполняющееся
gitnotesmerge. Используйте этот параметр после разрешения конфликтов, сохранённых командойgitnotesmergeв.git/NOTES_MERGE_WORKTREE. Это изменяет частичный коммит слияния, созданный командойgitnotesmerge(сохранённый в.git/NOTES_MERGE_PARTIAL), добавляя заметки из.git/NOTES_MERGE_WORKTREE. Ссылка на заметки, хранящаяся в символической ссылке.git/NOTES_MERGE_REF, обновляется и указывает на результирующий коммит. -
--abort -
Отменить или сбросить выполняющееся
gitnotesmerge, то есть слияние заметок с конфликтами. При этом просто удаляются все файлы, связанные со слиянием заметок. -
-q -
--quiet -
При слиянии заметок не выводить сообщения.
-
-v -
--verbose -
При слиянии заметок выводить подробные сообщения. При очистке заметок выводить имена всех объектов, заметки для которых удаляются.
Обсуждение
Заметки к коммитам — это blob-объекты, содержащие дополнительную информацию об объекте (обычно сведения, дополняющие сообщение коммита). Эти blob-объекты берутся из ссылок на заметки. Ссылка на заметки обычно является веткой, содержащей «файлы», пути к которым соответствуют именам объектов, описываемых этими файлами; для повышения производительности в пути включено несколько разделителей каталогов [1].
Каждое изменение заметок создаёт новый коммит в указанной ссылке на заметки. Поэтому историю заметок можно просмотреть, например, с помощью команды git log -p notes/commits. В настоящее время в сообщении коммита указывается только операция, вызвавшая обновление, а авторство коммита определяется по обычным правилам (см. git-commit[1]). В будущем эти подробности могут измениться.
Ссылка на заметки также может указывать непосредственно на объект дерева. В этом случае историю заметок можно просмотреть с помощью команды git log -p -g <refname>.
Стратегии слияния заметок
По умолчанию используется стратегия слияния заметок manual. Она извлекает конфликтующие заметки в специальное рабочее дерево для разрешения конфликтов (.git/NOTES_MERGE_WORKTREE) и предлагает пользователю разрешить конфликты в этом рабочем дереве. После этого пользователь может либо завершить слияние с помощью git notes merge --commit, либо отменить его с помощью git notes merge --abort.
Пользователи могут выбрать одну из следующих автоматических стратегий слияния с помощью параметра -s/--strategy или соответствующей настройки notes.mergeStrategy:
ours автоматически разрешает конфликты заметок в пользу локальной версии (то есть текущей ссылки на заметки).
theirs автоматически разрешает конфликты заметок в пользу удалённой версии (то есть указанной ссылки на заметки, сливаемой с текущей ссылкой).
union автоматически разрешает конфликты заметок, объединяя локальную и удалённую версии.
cat_sort_uniq похожа на стратегию union, но дополнительно к объединению локальной и удалённой версий сортирует получившиеся строки и удаляет повторяющиеся строки из результата. Это эквивалентно применению конвейера команд оболочки «cat | sort | uniq» к локальной и удалённой версиям. Эта стратегия полезна, если заметки имеют построчный формат и при слиянии требуется избежать дублирования строк. Обратите внимание: если в локальной или удалённой версии до слияния есть повторяющиеся строки, эта стратегия слияния заметок также удалит их.
Примеры
С помощью заметок можно добавлять аннотации со сведениями, которые были недоступны на момент создания коммита.
$ git notes add -m 'Tested-by: Johannes Sixt <j6t@kdbg.org>' 72a144e2
$ git show -s 72a144e
[...]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Notes:
Tested-by: Johannes Sixt <j6t@kdbg.org> По сути, заметка — это обычный blob-объект Git, допускающий любые форматы (и их отсутствие). Заметки из произвольных файлов можно создавать с сохранением двоичных данных с помощью git hash-object:
$ cc *.c $ blob=$(git hash-object -w a.out) $ git notes --ref=built add --allow-empty -C "$blob" HEAD
(Нельзя просто использовать git notes --ref=built add -F a.out HEAD, так как этот способ не сохраняет двоичные данные.) Разумеется, показывать заметки в нетекстовом формате с помощью git log не имеет смысла, поэтому для практической работы с такими заметками, вероятно, потребуется написать специальные инструменты.
Конфигурация
-
core.notesRef -
Ссылка на заметки, с которой следует читать заметки и работать вместо
refs/notes/commits. Должно быть указано полное имя ссылки. Эту настройку можно переопределить с помощью переменных окружения и параметров командной строки.
Содержимое этой секции выше данной строки не включается из документации git-config[1]. Далее приводится тот же текст, что и в этой документации:
-
notes.mergeStrategy -
Стратегия слияния, используемая по умолчанию при разрешении конфликтов заметок. Должна иметь одно из значений:
manual,ours,theirs,unionилиcat_sort_uniq. По умолчанию используетсяmanual. Дополнительные сведения о каждой стратегии см. в разделе «СТРАТЕГИИ СЛИЯНИЯ ЗАМЕТОК» документации git-notes[1].Эту настройку можно переопределить, передав параметр
--strategyкоманде git-notes[1]. -
notes.<name>.mergeStrategy -
Стратегия слияния, используемая при слиянии заметок в
refs/notes/<name>. Переопределяет более общую настройкуnotes.mergeStrategy. Дополнительные сведения о доступных стратегиях см. в разделе «СТРАТЕГИИ СЛИЯНИЯ ЗАМЕТОК» документации git-notes[1]. -
notes.displayRef -
Ссылка (или ссылки, если задан шаблон glob либо параметр указан несколько раз), из которой следует читать заметки при показе сообщений коммитов с помощью команд семейства
gitlog, в дополнение к набору ссылок по умолчанию, заданному параметромcore.notesRefилиGIT_NOTES_REF.Эту настройку можно переопределить с помощью переменной окружения
GIT_NOTES_DISPLAY_REF, которая должна содержать разделённый двоеточиями список ссылок или шаблонов glob.Для несуществующих ссылок будет выведено предупреждение, но шаблоны glob, которым не соответствует ни одна ссылка, будут молча проигнорированы.
Эту настройку можно отключить параметром
--no-notesкоманд семейства git-log[1] или с помощью параметра--notes=<ref>, поддерживаемого этими командами.Эффективное значение
core.notesRef(возможно, переопределённое значениемGIT_NOTES_REF) также неявно добавляется в список показываемых ссылок. -
notes.rewrite.<command> -
При переписывании коммитов с помощью
<command>(в настоящее времяamendилиrebase), если значение этой переменной равноfalse, git не будет копировать заметки из исходного коммита в переписанный. По умолчанию используетсяtrue. См. такжеnotes.rewriteRefниже.Эту настройку можно переопределить с помощью переменной окружения
GIT_NOTES_REWRITE_REF, которая должна содержать разделённый двоеточиями список ссылок или шаблонов glob. -
notes.rewriteMode -
При копировании заметок во время переписывания коммита (см. параметр
notes.rewrite.<command>) определяет, что делать, если у целевого коммита уже есть заметка. Должно иметь одно из значений:overwrite,concatenate,cat_sort_uniqилиignore. По умолчанию используетсяconcatenate.Эту настройку можно переопределить с помощью переменной окружения
GIT_NOTES_REWRITE_MODE. -
notes.rewriteRef -
При копировании заметок во время переписывания коммита задаёт ссылку (с полным именем), заметки из которой следует копировать. Можно указать шаблон glob — в этом случае будут скопированы заметки из всех соответствующих ссылок. Эту настройку также можно указать несколько раз.
Значение по умолчанию отсутствует; чтобы включить переписывание заметок, необходимо настроить эту переменную. Установите для неё значение
refs/notes/commits, чтобы включить переписывание заметок по умолчанию к коммитам.Значение можно переопределить с помощью переменной окружения
GIT_NOTES_REWRITE_REF. Дополнительное описание её формата см. выше в разделеnotes.rewrite.<command>.
Окружение
-
GIT_NOTES_REF -
На какую ссылку следует воздействовать при работе с заметками вместо
refs/notes/commits. Это переопределяет настройкуcore.notesRef. -
GIT_NOTES_DISPLAY_REF -
Список ссылок или шаблонов glob, разделённых двоеточиями, указывающий, из каких ссылок, помимо значения по умолчанию из
core.notesRefилиGIT_NOTES_REF, следует читать заметки при отображении сообщений коммитов. Это переопределяет настройкуnotes.displayRef.Для несуществующих ссылок будет выдано предупреждение, но шаблон glob, не соответствующий ни одной ссылке, будет молча проигнорирован.
-
GIT_NOTES_REWRITE_MODE -
При копировании заметок во время переписывания коммитов определяет, что делать, если у целевого коммита уже есть заметка. Должно быть одним из значений:
overwrite,concatenate,cat_sort_uniqилиignore. Это переопределяет настройкуcore.rewriteMode. -
GIT_NOTES_REWRITE_REF -
При переписывании коммитов определяет, какие заметки копировать из исходного коммита в переписанный. Должен быть указан список ссылок или шаблонов glob, разделённых двоеточиями.
Если переменная окружения не задана, список копируемых заметок зависит от настроек
notes.rewrite.<command> иnotes.rewriteRef.
/fe/30/…/680d5a…: последовательность имён каталогов, состоящих из двух шестнадцатеричных цифр каждое, за которой следует имя файла с оставшейся частью идентификатора объекта. notes
© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-notes