Чи варто використовувати минуле чи теперішнє напруження у повідомленнях про git počin? [зачинено]


531

Одного разу я прочитав, що повідомлення про git commit мають бути в сучасному режимі, наприклад, "Додати тести на x". Я завжди знаходжу себе в минулому часі, наприклад, "Додані тести на х", хоча мені здається набагато природніше.

Ось нещодавній вчинок Джона Ресіга, який показує двох в одному повідомленні:

Налаштуйте ще кілька результатів набору jQuery в тестах маніпуляцій. Також фіксували порядок очікуваних результатів випробувань.

Це важливо? Який я повинен використовувати?


12
Це питання потрібно закрити, як насамперед, на основі думки . Подивіться на відмінності думок між імперативом та минулим часом вже! Коли це було сказано, я голосую за імперативне напруження, тому що це дійсно допомагає з’ясувати, що ви робите, переписуючи свою історію, збираючи вишню, застосовуючи патчі тощо!

Подібне запитання: stackoverflow.com/questions/1753808/…
wip


Дивіться також github.com/agis-/git-style-guide
Агіс

3
@Eonil, якщо він закритий для думки, що базується тут, він буде закритий і для того, щоб базуватися на думці.
храповик вирод

Відповіді:


601

Перевага для справжньо напружених, імперативних стилів повідомлень про прихильність походить від самого Git. З документації / подачі патчів у Git repo:

Опишіть свої зміни в імперативному настрої, наприклад, "зробити xyzzy do frotz" замість "[цей патч] робить xyzzy do frotz" або "[I] змінив xyzzy на frotz", як якщо б ви давали накази в кодовій базі змінити його поведінка.

Таким чином, ви побачите багато повідомлень про вчинення Git, написаних у цьому стилі. Якщо ви працюєте над командою або з програмним забезпеченням з відкритим кодом, корисно, якщо всі дотримуються цього стилю для послідовності. Навіть якщо ви працюєте над приватним проектом, і ви єдиний, хто коли-небудь побачить вашу історію git, корисно використовувати імперативний настрій, оскільки він встановлює добрі звички, які будуть оцінені під час роботи з іншими.


90
Я думаю, що це відмінний вибір. Подумайте, що таке комісія, у різній формі: набір інструкцій щодо того, як перейти з попереднього стану в новий стан. Подібно до того, як diff говорить "додати цей рядок сюди, видаліть цей рядок тут", так і в повідомленні комісії в якісному розумінні написано "внести цю зміну". (Так, git зберігає команду просто як дерево з метаданими, але для людини важливою частиною комітету є різниця.)
Cascabel

124
Ви можете бачити комітет як набір інструкцій щодо того, як перейти від попереднього стану до нового стану; але я бачу це більше як контрольну точку в еволюції коду. Для мене повідомлення про фіксацію - це журнал того, що було зроблено в коді з моменту попередньої комісії а для колоди минулий час має набагато більше сенсу. Якщо ви дійсно вважаєте, що повідомлення про виконання зобов’язань повинно бути набором інструкцій, то необхідний час - це шлях. Я просто не думаю про це таким чином.
karadoc

10
@oschrenk: Пізніші версії файлу дали причину: "Опишіть свої зміни в імперативному настрої, наприклад" зробіть xyzzy do frotz "замість" [Цей патч] робить xyzzy do frotz "або" [I] змінив xyzzy на do frotz ", ніби ви наказуєте кодовій базі змінити її поведінку."
mipadi

44
Повідомлення про виконання зобов’язань повинно бути імперативним, в даний час напруженим, оскільки з git ви чи хтось інший може закінчитися rebaseчи, cherry-pickі, у цьому випадку, команда може бути використана поза його початковим контекстом. Як результат, повідомлення про фіксацію має бути написане окремо, не очікуючи, що читач перегляне будь-які навколишні повідомлення про фіксацію. Коли ви вибираєте вишні, виправляєте більше сенсу застосовувати "Виправити алгоритм виправлення швидкості" або "Сортування: поліпшення продуктивності" замість "Виправлена ​​помилка №124" або "Модифікована сортування для підвищення продуктивності".
Мікко Ранталайнен

5
Як я думаю про це, це те, що повідомлення повинно сказати мені, що зміниться, якщо я вирішу застосувати цю комісію до моєї гілки. Я не думаю про це як про журнал, але як про те, що я можу перейти і мені потрібно знати, що буде, коли я виберу конкретний стан.
steinybot

357

Ваш проект майже завжди повинен використовувати минулий час . У будь-якому випадку проект завжди повинен використовувати однаковий час для послідовності та чіткості.

Я розумію деякі інші аргументи, що аргументують використання теперішнього часу, але вони зазвичай не застосовуються. Наступні пункти - це загальні аргументи для написання в теперішньому часі, і моя відповідь.

  • Написання в теперішньому часі говорить комусь, що застосовуватиме зобов’язання , а не те, що ви зробили.

Це найправильніша причина, з якої б хотілося використовувати теперішній час, але тільки з правильним стилем проекту. Такий спосіб мислення розглядає всі комісії як необов'язкові вдосконалення чи функції, і ви можете вирішити, які зобов’язання зберігати та які потрібно відхилити у вашому конкретному сховищі.

Цей аргумент працює, якщо ви маєте справу з дійсно розподіленим проектом. Якщо ви маєте справу з розподіленим проектом, ви, ймовірно, працюєте над проектом з відкритим кодом. І це, мабуть, дуже великий проект, якщо він дійсно розподілений. Насправді це, мабуть, або ядро ​​Linux, або Git. Оскільки Linux, ймовірно, спричинив поширення та набуття популярності Git, легко зрозуміти, чому люди вважають його стиль авторитетом. Так, стиль має сенс у цих двох проектах. Або взагалі це працює з великими, відкритими, розповсюдженими проектами.

При цьому, більшість проектів з контролю джерел працюють не так. Зазвичай це неправильно для більшості сховищ. Це сучасний спосіб мислення про коміти: Subversion (SVN) та сховища CVS ледь можуть підтримувати цей стиль реєстрації репозиторіїв. Зазвичай гілка інтеграції обробляє фільтрування поганих реєстрацій, але вони, як правило, не вважаються "необов'язковими" або "приємними для функцій".

У більшості сценаріїв, коли ви здійснюєте зобов’язання у сховище джерел, ви пишете запис у журналі, в якому описується, що змінилося з цим оновленням, щоб в майбутньому іншим було легше зрозуміти, чому було внесено зміни. Як правило, це не є необов'язковою зміною - інші люди в проекті зобов'язані або об'єднати, або відновити його. Ви не пишете запис в щоденнику , такі як «Дорогий щоденник, сьогодні я зустрітися з хлопчиком , і він каже мені привіт.», Але замість того, щоб писати «Я зустрів хлопчика , і він сказав мені привіт.»

Нарешті, для таких нерозподілених проектів 99,99% часу, коли людина буде читати повідомлення про фіксацію, припадає на читання історії - історія читається в минулому часі. 0,01% часу буде вирішувати, застосовувати чи ні цей зобов’язання чи інтегрувати його у своє відділення / сховище.

  • Послідовність. Ось так це є у багатьох проектах (включаючи сам git). Також це роблять інструменти git, які генерують коміти (наприклад, git merge or git revert).

Ні, я гарантую вам, що більшість проектів, що коли-небудь входили в систему контролю версій, мали свою історію в минулому часі (я не маю посилань, але це, мабуть, правильно, враховуючи, що теперішній час аргумент новий після Git). Повідомлення "Перегляд" або передача повідомлень у теперішньому часі лише почали мати сенс у справді розподілених проектах - див. Перший пункт вище.

  • Люди не лише читають історію, щоб знати, "що сталося з цією базою кодів", а й відповідати на запитання на кшталт "що трапиться, коли я вишу цей виборчий комітет", або "які нові речі відбудуться з моєю базою кодів через ці зобов'язання Я можу або не можу злитися в майбутньому ".

Дивіться перший пункт. 99,99% часу, коли людина буде читати повідомлення про вчинення, - це читання історії - історія читається в минулому часі. 0,01% часу буде вирішувати, застосовувати чи ні цей зобов’язання чи інтегрувати його у своє відділення / сховище. 99,99% б'є 0,01%.

  • Зазвичай це коротше

Я ніколи не бачив хорошого аргументу, який говорить про використання неправильного часу / граматики, оскільки це коротше. Напевно ви збережете лише 3 символи в середньому для стандартного повідомлення з 50 символів. Як сказано, теперішня напруга в середньому, ймовірно, буде на кілька символів коротше.

  • Ви можете назвати зобов’язання більш послідовно з назвами квитків у вашому трекері випуску / функції (які не використовують минулий час, хоча іноді і майбутній)

Квитки записуються як щось, що зараз відбувається (наприклад, програма показує неправильну поведінку, коли я натискаю цю кнопку), або як те, що потрібно зробити в майбутньому (наприклад, текст потребує перегляду редактором).

Історія (тобто повідомлення про фіксацію) записується як щось, що було зроблено в минулому (наприклад, проблема була виправлена).


79
Я вперше почув сьогодні про передбачувану перевагу фактів імперативного стилю. Для мене це звучало настільки неприродно і химерно, що я вирішив поглянути ще кілька думок. Мені приємно бачити, що я не єдиний, хто вважає, що минуле напруження є більш природним для повідомлень про вчинки. :)
karadoc

56
Повідомлення фіксації автоматично згенерованих та перезавантажених файлів git є імперативними та мають теперішній час ("Злиття", а не "Об'єднане"; "Перезавантаження", не "Перезавантаження").
міс

13
Здається, що різниця полягає в фокусі на зміні програмного забезпечення - "Виправлено X за допомогою Y" - або сховищі - "Зробіть Y, щоб виправити X". +1 для гарного аргументу, але я думаю, що репо зазвичай має зосереджуватися на собі, а не на отриманому програмному забезпеченні.
l0b0

28
Справа в тому, що, використовуючи імператив, представляють напружені роботи для величезних проектів (наприклад, Linux), так що це очевидно масштабується. Крім того, для цього потрібно майже нульових зусиль, використовуючи протягом минулого часу. Як результат, я не бачу жодної причини (окрім того, як "старі люди звикли писати повідомлення про вчинення в минулому часі") використовувати щось інше, окрім імперативного, теперішнього часу. Якщо ви можете вивчити набір команд git, ви можете навчитися писати в імперативному та нинішньому часі.
Мікко Ранталайнен

35
Імператив не є "новим з часу git". ChangeLog існував задовго до git, і використання імперативу завжди було рекомендованим стилем у проекті GNU. gnu.org/prep/standards/html_node/Style-of-Change-Logs.html
adl

81

Я написав більш повний опис на 365git .

Використання імперативного, теперішнього часу - це те, до чого потрібно трохи звикнути. Коли я почав згадувати про це, він зустрів опір. Зазвичай у рядку "Повідомлення про фіксацію записується те, що я зробив". Але, Git - це система управління розподіленою версією, де потенційно багато місць для отримання змін. Замість того, щоб писати повідомлення, які говорять про те, що ви зробили; розгляньте ці повідомлення як інструкції щодо того, що робитиме виконання зобов’язання. Замість того, щоб укласти заголовок із заголовком:

Renamed the iVars and removed the common prefix.

Майте таке:

Rename the iVars to remove the common prefix

Що говорить комусь, що застосовуватиме зобов'язання, а не те, що ви зробили. Крім того, якщо ви подивитесь на історію вашого сховища, ви побачите, що повідомлення, згенеровані Git, також записуються в цьому часі - "Злиття" не "Об'єднано", "Перезавантажити", не "Перебазувати", тому записування в одному і тому ж часі підтримує все послідовність. Спочатку це здається дивним, але це має сенс (відгуки доступні після заявки) і з часом стає природним.

Сказавши все це - це ваш код, ваше сховище: тому створіть власні вказівки та дотримуйтесь їх.

Якщо ви все-таки вирішите піти цим шляхом, тоді git rebase -iз варіантом повторної реформи було б добре розглянути.


7
Що ж, ви склали два різних рекомендації: проект з відкритим кодом Git та регулярне використання Git. Наведене посилання взагалі не згадує про напругу . Офіційний документ Git згадує лише обмеження 50 знаків. Git - це розподілений VCS, де є багато місць, де можна отримати зміни від… розгляньте ці повідомлення як інструкції щодо того, що застосовуватиме фіксація. Це стосується лише кількох проектів, які фактично є розподіленими проектами. 99,999% Git-комітетів ніколи не застосовуватимуться вручну таким чином. У більшості проектів історія - це журнал змін, який повинен бути в минулому часі.
Метт Квіглі

4
"і має пропустити повну зупинку"
приймає

30

Дотримуйтесь теперішнього напруженого імперативу, оскільки

  • добре мати стандарт
  • він відповідає квиткам у трекері помилок, які, природно, мають форму "щось реалізувати", "виправити щось" або "тестувати щось".

16

Для кого ви пишете повідомлення? І чи читач, як правило, читає повідомлення до або після власності на себе зобов’язання?

Я думаю, що тут були надані хороші відповіді з обох точок зору, я, можливо, просто не вбачаю, що є найкраща відповідь на кожен проект. Роздільне голосування може запропонувати стільки ж.

тобто підсумувати:

  • Це повідомлення переважно для інших людей, як правило, читається в якийсь момент, перш ніж вони прийняли зміни: Пропозиція про те, що прийняти зміни, зробить їх наявним кодом.

  • Це повідомлення переважно як журнал / запис самому собі (або своїй команді), але, як правило, читає з точки зору того, як прийняв зміни та шукав назад, щоб дізнатися, що сталося.

Можливо, це призведе до мотивації вашої команди / проекту в будь-якому випадку.


10

це важливо? люди, як правило, досить розумні, щоб правильно інтерпретувати повідомлення, якщо вони не є, ви, мабуть, не повинні дозволяти їм отримувати доступ до вашого сховища!


27
Для деяких людей подібні речі мають досить багато значення.
Веслі Мерч

2
@mog посилання не робить жодної заяви про теперішнє та минуле.
закінчення

2
Якщо проект набирає масштабний час, люди, які роблять перегляд коду та полювання на помилок, побачать так багато комісій, що їм потрібна вся допомога, яку ви можете мені надати. Зараз немає жодного сенсу економити пару секунд, щоб завдавати великих головних болів у майбутньому через те, що не написати належного повідомлення про вчинення.
Мікко Ранталайнен

Я не кажу, що не пишіть хорошого повідомлення про вчинення. Я кажу, що не має значення, використовуєте ви минуле чи теперішнє час.
Майкл Болдрі

1
Звідки ви могли б знати, що особа, не в змозі інтерпретувати ваше повідомлення про вчинення, є причиною того, що ця людина недостатньо здатна, або ви недостатньо здатна написати гарне повідомлення про вчинення?
Харіс

7

Тобі вирішувати. Просто використовуйте повідомлення про фіксацію за вашим бажанням. Але це простіше, якщо ви не переходите між часом і мовами.

А якщо ви розвиваєтеся в команді - це слід обговорити і встановити фіксовано.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.