Git Commit сообщения: 50/72 Форматирование - PullRequest
272 голосов
/ 18 февраля 2010

Тим Папа утверждает в своем блоге конкретный стиль сообщения git commit: http://www.tpope.net/node/106

Вот краткое изложение того, что он рекомендует:

  • Первая строка длиной не более 50 символов
  • Затем пустая строка
  • Оставшийся текст должен быть заключен в 72 символа

Его сообщение в блоге дает обоснование этих рекомендаций (для краткости я назову их «форматированием 50/72»):

  • На практике некоторые инструменты рассматривают первую строку как строку темы, а второй абзац как тело (аналогично электронной почте)
  • git log не обрабатывает перенос, поэтому трудно читать, если строки слишком длинные.
  • git format-patch --stdout конвертирует коммиты в электронную почту - так что для хорошей игры полезно, если ваши коммиты уже хорошо завернуты.
  • Я хотел бы добавить пункт, с которым, я думаю, Тим согласился бы: подведение итогов вашего коммита является хорошей практикой, присущей любой системе контроля версий. Это помогает другим (или вам позже) быстрее находить релевантные коммиты.

Итак, у меня есть пара деталей на мой вопрос:

  • Какой кусок (примерно) «мыслительных лидеров» или «опытных пользователей» git придерживается стиля форматирования 50/72? Я спрашиваю об этом, потому что иногда новые пользователи не знают или не заботятся о практике сообщества.
  • Для тех, кто не использует это форматирование, есть ли принципиальная причина для использования другого стиля форматирования? (Обратите внимание, что я ищу аргумент по существу, а не «я никогда не слышал об этом» или «мне все равно».)
  • Эмпирически говоря, какой процент git-репозиториев охватывает этот стиль? (Если кто-то захочет провести анализ репозиториев GitHub ... подсказка, подсказка.)

Моя точка зрения здесь не в том, чтобы рекомендовать стиль 50/72 или сбивать другие стили. (Чтобы быть открытым об этом, я предпочитаю это, но я открыт для других идей.) Я просто хочу получить обоснование того, почему люди любят или выступают против различных стилей сообщений git commit. (Не стесняйтесь поднимать вопросы, которые также не были упомянуты.)

Ответы [ 5 ]

253 голосов
/ 16 августа 2012

Относительно строки "резюме" (50 в вашей формуле), в документации по ядру Linux есть следующее: :

For these reasons, the "summary" must be no more than 70-75
characters, and it must describe both what the patch changes, as well
as why the patch might be necessary.  It is challenging to be both
succinct and descriptive, but that is what a well-written summary
should do.

Тем не менее, похоже, что сопровождающие ядра действительно стараются держать около 50. Вот гистограмма длин итоговых строк в журнале git для ядра:

Lengths of git summary lines ( посмотреть в полном размере )

Существует небольшое количество коммитов, у которых есть итоговые строки, которые длиннее (некоторые намного длиннее), чем этот график, и не делает интересную часть похожей на одну строку. (Вероятно, есть какой-то причудливый статистический метод для включения этих данных здесь, ну да ладно ... :)).

Если вы хотите увидеть необработанные длины:

cd /path/to/repo
git shortlog  | grep -e '^      ' | sed 's/[[:space:]]\+\(.*\)$/\1/' | awk '{print length($0)}'

или текстовая гистограмма:

cd /path/to/repo
git shortlog  | grep -e '^      ' | sed 's/[[:space:]]\+\(.*\)$/\1/' | awk '{lens[length($0)]++;} END {for (len in lens) print len, lens[len] }' | sort -n
49 голосов
/ 22 июля 2013

Относительно «лидеров мысли»: Линус настойчиво выступает за перенос строк для сообщения полной фиксации:

мы используем 72-символьные столбцы для переноса слов, за исключением цитируемого материалас определенным форматом строки

Исключения относятся главным образом к «непрозрачному» тексту, то есть к тексту, который не был напечатан человеком для фиксации - например, к сообщениям об ошибках компилятора.

32 голосов
/ 20 августа 2013

Разделение представления и данных приводит к тому, что мои сообщения о коммите здесь.

Ваше сообщение о фиксации не должно быть жестко заключено в любое число символов , и вместо этого следует использовать разрывы строк для разделения мыслей, абзацев и т. Д. Как части данных, а не представления. В данном случае «данные» - это сообщение, которое вы пытаетесь донести, а «представление» - это то, как пользователь видит это.

Я использую одну итоговую строку вверху и стараюсь сделать ее короткой, но я не ограничиваю себя произвольным числом. Было бы намного лучше, если бы Git фактически предоставлял способ хранить сводные сообщения как отдельную сущность от сообщения, но так как это не нужно, я должен взломать его и использовать в качестве разделителя первый разрыв строки (к счастью, многие инструменты поддерживают это означает разбить данные).

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

This is a summary line, try to keep it short and end with a line break.
This is a thought, perhaps an explanation of what I have done in human readable format.  It may be complex and long consisting of several sentences that describe my work in essay format.  It is not up to me to decide now (at author time) how the user is going to consume this data.

Two line breaks separate these two thoughts.  The user may be reading this on a phone or a wide screen monitor.  Have you ever tried to read 72 character wrapped text on a device that only displays 60 characters across?  It is a truly painful experience.  Also, the opening sentence of this paragraph (assuming essay style format) should be an intro into the paragraph so if a tool chooses it may want to not auto-wrap and let you just see the start of each paragraph.  Again, it is up to the presentation tool not me (a random author at some point in history) to try to force my particular formatting down everyone else's throat.

Just as an example, here is a list of points:
* Point 1.
* Point 2.
* Point 3.

Вот как это выглядит в программе просмотра, которая мягко переносит текст.

Это итоговая строка, старайтесь, чтобы она была короткой и заканчивалась переводом строки.

Это мысль, возможно, объяснение того, что я сделал в удобочитаемом для человека формате. Это может быть сложным и длинным, состоящим из нескольких предложений, которые описывают мою работу в формате эссе. Сейчас не мне решать (во время автора), как пользователь будет использовать эти данные.

Два разрыва строки разделяют эти две мысли. Пользователь может читать это на телефоне или широкоэкранном мониторе. Вы когда-нибудь пытались прочитать 72-символьный текст на устройстве, которое отображает только 60 символов? Это действительно болезненный опыт. Кроме того, вступительное предложение этого абзаца (при условии формата стиля эссе) должно быть введением в абзац, поэтому, если инструмент выбирает, он может захотеть не выполнять автоматическую переноску и позволить вам просто увидеть начало каждого абзаца. Опять же, дело в том, чтобы инструмент презентации, а не я (случайный автор в какой-то момент истории), пытался заставить мое конкретное форматирование перебить всех остальных.

В качестве примера приведем список точек:
* Точка 1.
* Пункт 2.
* Пункт 3.

Мое подозрение заключается в том, что автор рекомендации по сообщению коммита Git, которую вы связали, никогда не писал программное обеспечение, которое будет использоваться широким кругом конечных пользователей на разных устройствах ранее (т. Е. На веб-сайте), поскольку на этом этапе развития Программное обеспечение / вычисления Хорошо известно, что хранение ваших данных с жестко запрограммированной презентационной информацией является плохой идеей для пользователя.

5 голосов
/ 18 февраля 2010

Согласен, интересно предложить конкретный стиль работы. Однако, если у меня нет возможности установить стиль, я обычно следую тому, что было сделано для согласованности.

Взглянув на Linux Kernel Commits, проект, который запустил git, если хотите, http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bca476139d2ded86be146dae09b06e22548b67f3, они не следуют правилу 50/72. Первая строка - 54 символа.

Я бы сказал, что последовательность имеет значение. Установите надлежащие средства идентификации пользователей, которые сделали коммиты (user.name, user.email - особенно во внутренних сетях. User @ OFFICE-1-PC-10293982811111 не является полезным контактным адресом). В зависимости от проекта сделайте соответствующую деталь доступной в коммите. Трудно сказать, что это должно быть; это могут быть задачи, выполненные в процессе разработки, а затем подробности того, что изменилось.

Я не верю, что пользователи должны использовать git одним способом, потому что определенные интерфейсы для git обрабатывают коммиты определенным образом.

Я должен также отметить, что есть и другие способы найти коммиты. Для начала git diff скажет вам, что изменилось. Вы также можете сделать такие вещи, как git log --pretty=format:'%T %cN %ce', чтобы отформатировать параметры git log.

0 голосов
/ 04 июля 2019

Максимальная рекомендуемая длина заголовка действительно 50?

Я верил этому годами, но, как я только что заметил, документация "git commit" на самом деле гласит:

$ git help commit | grep -C 1 50
      Though not required, it’s a good idea to begin the commit message with
      a single short (less than 50 character) line summarizing the change,
      followed by a blank line and then a more thorough description. The text

$  git version
git version 2.11.0

Можноутверждают, что «менее 50» может означать только «не более 49».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...