Чому я повинен писати повідомлення про фіксацію?


18

Чому я повинен писати повідомлення про фіксацію? Я не хочу, і я думаю, що це дурно кожен раз.

Фронтальний інтерфейс GUI, який я використовую, без назви примусить вас це зробити. Я чую, як інші роблять це кожен раз, навіть якщо вони використовують VCS у командному рядку.

Якщо я виконую кілька разів на день і не закінчив функцію, про що я пишу? Я ТІЛЬКИ коли-небудь пишу повідомлення після багатьох комісій, і я відчуваю, що настав час для міні-тегів або коли я роблю фактичний тег.

Я маю рацію чи щось мені не вистачає? також я використовую розподілену систему


1
Не турбуйтеся, просто скажіть "бла" в рядку коментарів. Поки ви ніколи не ділитесь кодом з ким-небудь ще і доки ніхто більше ніколи не буде працювати над ним, і поки вам ніколи не потрібно буде відкидати код і до тих пір, поки ви ніколи не зробите жодної помилки коду і ... почекайте хвилинку, чому ви знову використовуєте контроль версій?
Майкл Дюррант

Відповіді:


24

Всім людям, які говорять "виконайте лише тоді, коли у вас є корисне, добре продумане повідомлення для написання, і коли ваша функція на 100% завершена, і у вас є одиничні тести на це", я кажу: Ви все ще в думці SVN .

Якщо ви використовуєте git , це я б назвав розумним робочим процесом:

  1. Виконуйте так часто, як вам подобається . Напишіть там будь-яке старе швидке повідомлення. Ніхто цього не побачить.
  2. Скажімо, 10 комісій, ви закінчили цю функцію, над якою працювали. Тепер пишіть тести і виконайте ці тести. Або все, що ви хочете. Якщо вам подобається TDD, спершу пишіть тести, мені все одно, а також не git.
  3. git rebase -iвід першого "безладного" доручення, яке ви додали, і виправити свою краєзнавчу історію, видаляючи, редагуючи, опускаючи та іншим чином очищаючи свою недавню історію в логічні, чисті записи з приємними повідомленнями .
  4. Після прибирання попросіть когось зняти з вас.
  5. Промийте і повторіть.

Зауважте, що крок 3 - це коли ви закінчуєте ті приємні зобов’язання, які ви мали після цього, і що, використовуючи SVN, вам доведеться утриматися від виконання зобов'язань, поки ви не зробите перші два кроки, і саме це пропонує більшість інших відповідей. IOW, ви не хочете наносити свій напівзаписаний, неперевірений код іншим, тому ви не зобов’язуєтесь протягом тижня, поки ваша функція не буде виконана. Ви не використовуєте керування версіями з повним потенціалом.

Також зауважте, що будь-де між кроками 1 і 3 ви можете git pushвнести зміни до свого приватного дзеркала репо на сервері, щоб отримати безкоштовні резервні копії, якщо ваш жорсткий диск ноутбука помер.


Гарна відповідь, мені це подобається. Мені трохи страшно використовувати rebase. Ось стаття про те, що вона йде не так і як відновити її bluemangolearning.com/blog/2009/03/…

@acid, якщо ви оновлюєте власні приватні зміни, конфліктів не повинно бути. Крім того, ви повинні спробувати важко втратити що - небудь в мерзотника.
Олексій Будовський

4
мій робочий процес, git скелі
Nazgob

1
@Boris: Тому що він чітко говорить про git, який явно НЕ підрив

3
Написати речення, в якому зазначається, що ви щойно зробили, не повинно бути жодної значущої роботи, а руйнування історії за допомогою ребазу здається неприємним. Припустимо, ви ввели помилку у 5-му з тих десяти комітетів, які не виявилися лише через тиждень. Можливість прив’язати це до одного невеликого комітету допоможе вам дуже багато.
Гурт Робота

55

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


38
Ну тоді він може прочитати 5000 рядків спагетті, які я щойно зареєстрував, ДЖЕШ !!! Деякі люди просто ледачі!
Едвард Странд

9
Тому що, коли бідний присоска прийде за вами (через 3 роки) і подивиться на історію і піде ... WTF .. WTF .. WTF, він, принаймні, матиме уявлення про те, що відбувається. Ви можете легко додати коментар, наприклад "звичайна реєстрація, функція X, неповна".
quick_now

3
@ acidzombie24: Оскільки кожен фіксатор повинен говорити, для чого він був - навіть якщо це "виправлено друкарський текст у ....", немає жодної сенси в історії ревізій, якщо ви не знаєте, для чого потрібні зміни.
Орлінг

11
@quickly_now, бідний присосок може бути навіть ти самим. На жаль, це одна з речей, яку ви повинні випробувати, щоб повною мірою оцінити це.

2
@acidzombie - чому ти перевіряєш неповні зміни ??
Едвард Странд

35

Ви коментуєте свій вихідний код, правда?

Ви пишете найкращі коментарі, ті, що кажуть, чому як код говорять тільки як ?

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

Для будь-якого активного програмного забезпечення цей конкретний коментар виявиться в чомусь подібному

gitk - всі зразки

(знайдено на веб-сайті http://longair.net/blog/2009/04/25/a-few-git-tips/ ). Це дозволяє переглядати, хто працював над програмним забезпеченням, коли і що вони робили.

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


2
@acidzombie, я можу говорити лише за git, але ви можете зробити невеликі кроки на місцевому рівні, а потім згрупувати їх усі разом в один комітет при натисканні вгору за течією. Після цього повідомлення про фіксацію може бути описовим.

2
@acidzombie, чому ти береш на себе зобов’язання, якщо ти не зробив достатньо змін, щоб отримати коментар? Будь ласка, поясніть.

2
@Thor: Оскільки контроль версій захищає ваш код від втрати, і навіть напівзроблений код слід захищати.
Ben Voigt

1
@Ben, комісії призначені для тривалого зберігання і повинні точно відображати робочі "шматки". Захист від втрат, на мою думку, є ортогональним для контролю версій, і ним слід керуватися відповідною системою резервного копіювання. Я виявив, що Time Machine для Mac надзвичайно добре підходить для цієї мети - сподіваюся, подібна система доступна і для Windows.

2
+1 Я фанат не забруднювати свій джерело управління безглуздими зобов'язаннями. Це полегшує пошук певної фіксації (через корисні коментарі), і я знаю, що коли я перевіряю код, він завжди знаходиться в робочому стані. Традиційне програмне забезпечення для резервного копіювання - кращий варіант захисту мого локального сховища між проміжними комісіями. Це добре працює з DVCS, але ви повинні пам’ятати, що локальна реєстрація насправді не є резервною копією коду.
Адам Лір

15

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

Коміти слід робити з поважних причин - вони мають бути пов’язані з завданнями, які ви розбили за функцією, над якою працюєте. Незалежно від того, чи є ці завдання формальними чи просто на думці, кожна зміна, яку ви здійснюєте, повинна більш-менш виконати завдання і, отже, бути певною мірою функціональною.

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

  • Повторно відновив клас користувача для кращої інкапсуляції
  • Створені заглушки API, щоб інтерфейси можна було використовувати в класі контролера
  • Перетворив клас бази даних в абстрактний клас, так що макетна база даних може бути використана в тестових випадках

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


1
+1, це здається, що він чинить занадто часто або на поганих зупинках. Якщо він просто хоче гарну точку резервного копіювання для деяких експериментальних змін, він може використовувати індекс, тимчасову гілку, змінити попередні коміти замість створення нових або навіть використовувати буфер скасування у своєму редакторі.
Карл Білефельдт

1
@Karl: Лінійка IIRC у своїй гутковій розмові Google говорила, що в середньому за день робиться 6 комісій. Тепер я не знаю, скільки вважається багатьом, але в цьому проекті зараз я погодився, коли у мене з'явилися деякі роздуми (я петлю потрібні дані, я нічого з цим не роблю), після того, як я створив інтерфейс, але перед тим, як серіалізація працює. і я зараз працюю над тим, щоб серіалізація працювала, хоча у мене був інтерфейс 2 години тому. Я покладу і скажу «основи рефлексії», коли це спрацює, але на перших трьох, чому я коли-небудь залишаю коментар, коли я легко бачу, коли функції «працюють» кожен x здійснює.

Насправді я можу затриматися, поки не отримаю базовий тест, тому що в іншому випадку, якщо я коментую кожне зобов’язання, як би я знав, що з них має стійке відображення? "основи рефлексії", "відображення серіалізувати" "тест на серіалізацію рефлексії" Припускаючи, що серіалізація є обов'язковою, вона може бути другою або третьою. Тест може означати тест одиниці або тест може означати тестування, якщо його робота над базовими класами, які мені потрібні. Я просто думаю, що коментування має сенс, коли я можу сказати «основи роздумів про роботу», а не здогадуюсь, що з них насправді означає, що основи працюють. Крім того, його легше скувати / знаходити, коли є менше для читання.

@acid, вся мета зобов'язання полягає в тому, щоб мати можливість повернутися до нього або порівняти зміни з ним. Якщо вам коли-небудь потрібно робити це з попередніми зобов'язаннями, як ви знаєте, який вибрати? Тут не потрібно писати романи. "робота інтерфейсу", "робота серіалізації" та "робота над рефлексією", на мою думку, просто чудові. Не існує фіксованої максимальної кількості комітетів на день, але якщо ваші повідомлення читатимуться як "деяка робота над інтерфейсом" "ще деяка робота над інтерфейсом" "інтерфейс майже зроблено", ви здійснюєте занадто часто і потрібно просто використовувати індекс.
Карл Білефельдт

@Karl: Що таке індекс btw? Я знаю, що у Git є прихований, але я не думаю, що ти говориш про це. Що це робить?

12

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

Не робіть з них великої справи. Бути чесним:

  • "Відредаговані об'єкти просторового індексу, даоси та інтерфейси користувача для обробки функції X"
  • "Поступова реєстрація для запиту на функції # 1234 та помилки № 5678"
  • "Я зламав останню збірку. Це файли, які я пропустив."

Нехай це буде короткою та "великою картиною". Якщо можливо, зверніться до номера проблеми у вашій функції / помилки. Деякі інтерфейси управління версіями містять поле для подібних речей.


2
+1 - ідея тримати її короткою. Короткий і простий і досить хороший - це прекрасно.
quick_now

1
ІМХО ще кращим керівництвом буде загальний рецепт "якомога коротший і довший"; оскільки іноді просто неможливо тримати його коротко, не жертвуючи важливою інформацією
hvr

11

Це зменшує кількість WTF / хвилину;)

введіть тут опис зображення

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


4
Я б проголосував за це, якби ви детальніше пояснили, чому це правда.
SingleNegationElimination

@TokenMacGuy - Вибачте, я не слідкую за цим.
Грак

1
Як виразні повідомлення про фіксацію Зменшують WTF / Minute (вони, звичайно, є)
SingleNegationElimination

@TokenMacGuy - я вважав, що це було очевидно.
Грак

9

Тож решта вашої команди знає, що WTF ви проводите перевірку змін у проектному дереві.


7
Я додаю повідомлення про фіксацію для своїх проектів, коли Я ТІЛЬКИ РОЗРОБНИК! Тому що, коли я повернувся через 2 роки, щоб подивитися на цей матеріал, я хочу знати, що WTF я робив у той час. Я прекрасно знаю, що 99% часу це не буде розглянуто. 1% часу, який врятує мене від 2-х тижнів агонії, і я думаю, що ціна введення 10-секундного повідомлення про фіксацію вартує довгострокової вигоди, яку я отримаю.
quick_now

@quickly_now, навіть агонія ? Є чи ваш код , що погано?

1
@quickly_now: Амінь до цього. Через рік-два з мене виходить багато коду, що кожен останній шматочок мав зробити через кілька місяців, бог лише знає. Боже, і моя історія перегляду.
Орлінг

О, так. Я теж згоден. Я думаю про це як досвід == смиренність.
Майкл Дюрант

8

тому що якщо ви не практикуєте введення пристойних повідомлень про прихильність, ви опинитесь як мій колега, який вводить такі повідомлення

no changes

або

testing

для комісій із понад сотнею змінених файлів (тут не жартую !!).

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


1
звучить як ідеальний кандидат на експертну перевірку перед вчиненням, якщо я коли-небудь його чув.

2
о людино, я працював з такими людьми. Приводить мене в горіхи.
sevenseacat

4

Чому ви берете на себе зобов’язання, якщо зміни не мають сенсу?

Просто здійснюйте зміни, які мають значення. Наприклад, я зробив досить великий рефакторинг на другому тижні, який зайняв у мене близько 3 днів. Я мав би тонни комісій за цей час. Деякі були досить невеликими змінами ("перейменований клас X у Y, щоб відобразити нову відповідальність" або "метод Z () перейшов у клас Q"), а інші були дуже великими. Коли я закінчую функцією / рефакторингом, я перевіряю, чи можуть бути скасовані деякі коміти (принаймні, це підтримує git, не знаю про інші інструменти), але зазвичай я залишаю їх так, як це допомагає пізніше.

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


3

уявіть собі умову, коли ви зламали вашу систему, внісши певні зміни і усвідомити це після декількох команд. Ви не пам'ятаєте, що було в зміні, але ви пам'ятаєте, що щось може піти не так, коли ви вдосконалювали функцію X або видаляли файл з модуля Y.

Але, на жаль, номер редакції не говорить вам про те, коли ви змінили X чи Y. Тож його вибір вибирав або читати всі коди, вчинені протягом останніх N днів, або просто читати детальні повідомлення про фіксацію, які ви написали (набагато читабельніше, ніж код).

Отже, якщо ви пишете такий самий, нудний, марний, не пов’язаний з ним текст у повідомленні про фіксацію, оскільки вам це доведеться, це шкідливіше, ніж повідомлення про фіксацію. Тому що замість того, щоб знайти корінь помилки, помилкове повідомлення призведе до помилок.

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


Чому я повинен робити це під час кожного вчинення, а не в кінці дня, через день або коли я закінчую функцію?

1
чому ти робиш це часто, якщо у нього немає «природних» причин?

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

@ acidzombie24 Ну, не вчиняйте напівфабрикати, якщо вам це не потрібно. І тому інші люди можуть бачити, що ви робите / працюєте, коли одного дня телефонуєте хворим, і нічого не працює. Або так ви можете згадати, де ви зупинилися, коли вам доведеться сидіти на засіданнях 2 дні. Або так ви легше визначити, яка редакція порушила складання, і подивіться на різницю.
нос

@ Thorbjørn: Чому б я не вчинив змін, які я не хочу повторювати?

3

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

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

Думка в мене виникла до того, як Control Control використовується двома розрізненими способами, один із документування змін у проекті, а інший як допомога розробникам на місці ... і ці два повністю відрізняються один від одного. Повідомлення про вчинення дуже важливі в одному напрямку, а в іншому можуть бути марними.


3

Вам щось не вистачає. Там повинно бути причиною для виконання коммітов в іншому випадку ви б не робити це.

Все, що вам потрібно зробити в коментарі, - це викласти причину словами, навіть якщо вона є тільки wip: adding new state objects


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

2

Як і багато інших, я в свій вільний час трохи кодую і використовую систему контролю ревізії, щоб відстежувати як розвиток, так і зміни. Кількість наявного у мене вільного часу сильно варіюється від тижня до тижня та місяця до місяця. У багатьох випадках траплялися випадки, коли я не мав би часу кодувати проект протягом тижнів чи навіть місяців наприкінці, і такий час, як я, зазвичай коливався від 10 хвилин (типовий день) до 40 хвилин (добрий день). Це, звичайно, не чудові умови - особливо для налагодження проблем.

Важливо було вести нотатки, які не загубляться, а легко отримуються. Наприкінці кожного сеансу робота сесії буде завершена детальним повідомленням. Тоді я міг пройти історію подій і відстежувати мій прогрес і роздуми. Це дозволило мені підібрати там, де я був минулого тижня чи минулого місяця з найменшою втратою дорогоцінного часу.

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


2

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


Один погляд на мій неймовірно очевидний код, і вони миттєво дізнаються все, що він робить, і всі дивовижні тести, які він проходить на 100%. Вибачте, я сьогодні в настрої з гумором [тому я ДИТЯ];)
Майкл Дюрант

1

Якщо ви не коментуєте свої зобов’язання, ви можете спробувати прокоментувати зміни в джерелі. З часом це може захаращувати джерело.


2
Я не спокушаюсь цього зробити

1

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

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


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