Должно ли в сообщении git commit указываться файл, который был изменен?


50

В первой строке сообщения git commit у меня есть привычка упоминать файл, который был изменен, если изменение не охватывает несколько файлов, например:

Add [somefunc] to [somefile] 

Это хорошая вещь или нет?

Ответы:


84

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

Вы добавили somefuncметод для выполнения требования, а именно:

  • добавить функцию,
  • удалить ошибку или
  • рефакторинг исходного кода.

Это означает, что ваши сообщения журнала должны скорее объяснять, какие функции / ошибки были затронуты или какова была цель рефакторинга.


5
Следует также поговорить о том, почему . Какие еще варианты вы рассматривали и почему выбрали именно этот?
Джей Базузи

2
Я комментирую коммиты так же, как комментировал код, только с точки зрения более высокого уровня (т.е. меньше информации, больше суммирования). Лично я делаю это до уровня файла / модуля (в git), но только потому, что коммиты дешевы, и мне нравится читать историю как книгу. YMMV.
Эван Плейс,

1
Если по какой-то причине человек фиксирует сразу несколько файлов, которые не связаны с одной и той же ошибкой, я предпочитаю, чтобы они указывали имена файлов и идентификаторы ошибок до начала лета. Мне не нужно знать file.cpp: добавлен getMethod (), но мне бы хотелось, чтобы идентификатор ошибки # 10 file.cpp: приличное лето. Если они передадут кучу файлов, которые распределены по нескольким отчетам об ошибках, мы поговорим, потому что мне это не очень нравится. Я бы предпочел, чтобы они сделали несколько коммитов. По одному на каждую проблему, которую они решают.
Уильям

@William: Кроме того, в случае возникновения проблемы с одним исправлением ошибки, можно исправить это с минимальными усилиями. Объедините десять исправлений ошибок в одном коммите, и это может быть серьезной проблемой.
Дэвид Торнли

59

Нет. Есть много способов проверить содержимое коммита. Комментарий должен описывать цель коммита.


30

Не забудьте добавить номер билета / номера .

Если у вас есть какая-либо функция или система отслеживания ошибок с тикетом # или проблемой # , обязательно укажите этот ID # в коммите. Это поможет всем, кто хочет узнать больше о функции или проблеме, над которой вы работали.

В моем последнем проекте был макрос, который был разработан, чтобы удостовериться, что первые 7 цифр комментария были действительным номером проблемы из явного квеста (наша система отслеживания проблем / функций).


Как вы делаете изменение рефакторинга?
Жюль

У рефакторинга @Jules есть билет #, который никогда не заканчивается
Caleth

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

@ScottMcIntyre Хотя это может быть правдой, я не уверен, что это хорошая идея. Рефакторинг часто лучше всего выполнять оппортунистически или как часть процесса разработки кода, основанного на рефакторинге кода. Как Фаулер выразился , «Планируемое рефакторинга [...] знак того, что команда не сделала достаточно рефакторинга , используя другие рабочие процессы». Или, более прямо, Рон Джеффрис: Рефакторинг - не в отставание! ,
Жюль

3

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

Для наборов изменений одного файла это не нужно.

Первая строка - это высокоуровневое описание набора изменений, например, ссылка на дефект или пользовательская история.


3

Если это релевантная информация в повествовании о коммите, то да, включите его. Если единственным битом информации является само имя файла, то нет.

Например, это имеет смысл: «Переместил функцию build_foo () из fooutil.c в foobase.c, так как большинство программ, которые хотят использовать build_foo (), уже включают foobase.c»

На этот раз нет: «Обновлен build_foo () в fooutil.c, чтобы получить параметр bar».


1

Я хочу добавить другую точку зрения здесь.

Мой ответ - да или нет. Но обычно я бы сказал, да.

Контроль версий действительно достаточно мощный, чтобы знать, какой файл обновляется. Но когда мы делаем

$ git log

Мы видим только сообщение о коммите. Это то, что делает большинство людей.

Посмотрев в сам журнал. Это добавляет дополнительный контекст к этому. Например:

readme.md: Fix typo detected by language tool

Это лучше чем

Fix typo detected by language tool

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

API: Fix reset password not sent email to user

Читая его, мы узнаем, что исправляемая ошибка находится в компоненте API и, вероятно, в каталоге API в базе кода.

Однако мы могли бы сделать

$ git show COMMIT_ID --name-only 

но это добавляет еще один шаг, чтобы получить файлы.


0

Единственный раз, когда я вижу, что это полезно для регистрации одного файла, это если вы внесли изменения в функцию, используемую во многих местах в файле, в результате чего diff будет загроможден. Уже тогда я поставил бы трекер изменений # и текстовое описание изменения первым.


-1

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

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

Больше коммитов, чаще. Таким образом вы можете не быть настолько многословным в своих сообщениях.


-2

Не должно

Каждый, кто заинтересован, может увидеть изменения в истории

Это также невозможно в больших системах, так как многие файлы могут быть сгенерированы автоматически

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.