Как стать автором
Обновить

Комментарии 93

И это не удивляет, к сожалению. Как вижу на github что кого-то бомбануло, смотрю профиль — очень часто ex-ussr. Даже горячие парни испанцы нервно курят в уголке.
НЛО прилетело и опубликовало эту надпись здесь
Да, вот как раз мне в этом треде все объясняют, какой я мудак на русском форуме :) Только вот там не было вопросов

Ну смотрите. Вы ворвались в чужой репозиторий, к которому не имеете никакого отношения, и рассказываете, что тот, кто сделал этот коммит 6 лет назад, мудак и что-то вам должен.


Где ещё, кроме как на русском форуме, вам объяснят, кто тут на самом деле мудак?

Комментарий добавлен в закладки

Так ведь речь идет о российском менталитете, то есть только русские объясняют какой вы мудак, иностранцы тактично об этом умалчивают, ибо зачем отравлять общение. Даже испанцы-итальянцы кстати, вот в чем парадокс. Хорошая статья была на Хабре под названием «Почему мы злые?», я даже не помню, то ли ее и вовсе заминусовали, то ли еле-еле в плюс вывели, ибо казалось бы, можно тоже быть тактичнее, но многим просто изображение в зеркале не понравилось, но как говорится неча на зеркало пенять… Так что все логично, и ваш коммент оказался очень к месту как раз именно на российском ресурсе.
У вас там аж 4 вопроса
Скрин конечно обрезан интересно — там есть еще второй абзац, где идут конкретные претензии к такому подходу, и уже дальше они обсуждаются.
При этом автор комментария всё равно не прав. Длинный коммит действительно сложнее гуглить, но так ли вообще надо гуглить коммиты? Нужно посмотреть историю файла — есть git log и git blame. Нужно посмотреть информацию о задаче — есть трекеры вроде Jira, где и должны решаться подобные вопросы.

Я — автор комментария. Там в проекте 27к коммитов в проекте, а именно этот коммит был сделан на изменение одного символа. Вся информация в сообщении этого коммита без сомнения ценна и полезна, с деталями, с историей, однако она ничего не стоит, поскольку найти эту информацию будет невозможно, так как сообщение в коммите к изменению одного символа является труднодоступной информацией. Проект когда-то заплатил за эту информацию, но теперь она не стоит ничего, поскольку бесполезно барахтается в море из 27к коммитов. Сможет ли найти эту информацию будущий участник проекта, если столкнется с той же ошибкой? Сообщения к коммитам не гуглятся. А если воспользоваться поиском по гитхабу — то будет слишком много информации на выходе, можете попробовать. Вместо того, чтобы писать такое длинное труднодоступное сообщение (файла, к которому был сделан этот "мой любимый git-коммит" уже нет в проекте — modules/router/templates/, поэтому найти этот коммит еще сложнее), можно было бы написать тест, который проверит кодировку в проекте. Можно было бы написать где-то в readme топик с информацией о используемой кодировке и почему.

Я уже несколько раз прочитал фразу "сообщения к коммитам не гуглятся", но до сих пор не могу её понять. Что это значит? Кто ищет коммиты в гугле? Если проблема возникает на проекте, в котором я работаю, то я буду искать информацию через сам git (git log --grep=...), и то же самое написано в статье. И в этом случае подробный commit message будет мне только на руку, т.к. он содержит много слов, потому будет попадать в большое число более-менее релевантных "запросов к git log". Это не "труднодоступность", а, наоборот, высокая доступность информации.

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

И в этом случае подробный commit message будет мне только на руку, т.к. он содержит много слов
А зачем эти «много слов» нужны? Изначально программа выводила информацию, что ошибка связана с кодировкой. Это означает что надо не в гугле/гите информацию о проблеме искать, а кодировку проверять.

Большинство программистов при обнаружении проблем используют другой инструмент для поиска решений. Чаще всего это google, или stackoverflow. Очень малая часть программистов (я бы даже сказал, что это исключение из правила) использует git log --grep, когда у них произошла ошибка кодировки при выполнении скриптов в проекте.

Очень малая часть программистов (я бы даже сказал, что это исключение из правила) использует git log --grep, когда у них произошла ошибка кодировки при выполнении скриптов в проекте.
Это же ещё надо знать, что данная проблема уже рассматривалась
Я думаю тут смысл в том что проще в ридми написать «у нас такая-то кодировка, иначе баги»
Вместо того чтобы оставлять эти знания где-то в истории комитов.
Hу и плюс вброс на обсуждение темы про нафига никому не нужную историю коммитов.

Достаточно, чтобы увидеть грубость ("Are you crazy guys?") и сломанный английский.

как ты думаешь, а твое замечание про «сломанный английский» не попахивает русским менталитетом?
Русский менталитeт уже бомбанул в комментах на гитхабе

Я всегда знал, что Линус Торвальдс русский!

Россия — родина слонов!
Человек пытается предотвратить неверный, по его мнению, путь развития отрасли — документация в комментах репозитория, вопросы и обсуждения в пулл-реквестах, подписка на закрытый msdn-репозиторий

Ну камон, какая это документация?
По большому счету весь коммит-мессадж должен был свестись к "заменил непечатаемый символ на пробел", этого всем достаточно и всем ясно, это норма. Нет там никакой проблемы, десятки подобных комитов с еще более аскетичным "fix typo" делаются ежедневно, не та тут ситуация чтобы писать какие-то доки и на отрасль тут уж точно никакого влияния нет.


Автор комита, имхо, молодец, и дело сделал и оставил немного контекста, для таких вот случайных свиделей.

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

Да, вот только баг-трекер потом меняют или закрывают, и в коммитах остаётся только череда ни о чём не говорящих коммитов типа "JIRA-1234", "JIRA-765" и т.д.
В данном случае мы имеем дело с ситуацией, когда лучше иметь некоторый избыток информации. Ничто не мешает продублировать её и в коммит, и в баг-трекер.

Все популярные хостинги кода github, gitlab, bitbucket имеют встроенный баг-трекер, есть даже система контроля версий fossil с баг-трекером встроенным напрямую в репозиторий. Всё сделано для того чтобы сохранить историю, но всё равно случается такое что история может потеряться.
Поэтому соглашусь что неплохо было бы иметь некоторый избыток информации, например добавить заголовок задачи, но копировать абсолютно всё из баг-трекера вплоть до комментариев это уже слишком.

И вот в один прекрасный момент владелец хостинга в очередной раз решает тихо и незаметно поменять условия использования, и все оттуда потихоньку сваливают. Репозитории, конечно, остаются, ведь в распределённых системах полная копия есть у каждого, и вот её залили на гитлаб вместо гитхаба. А в коммитах — "fixed #123", но такого issue на новом месте нет, и ссылка ссылается в пустоту, по ней даже нельзя выяснить, где раньше лежал этот самый 123.

А в чем проблема импортировать тикеты из GitHub в GitLab с сохранением номеров тикетов? Посмотрите на туже Doctrine.

Просто потерявшаяся история — это только половина проблемы.

У Magento репозиторий на гитхабе, и они помечают коммиты номером таска в своей _внутренней_ JIRA. Ну, то есть, ты видишь однострочный commit message «MC-12345 Починил вот такую пепяку» и гадаешь, ту ли они пепяку починили…

Вот в этом разница между открытой разработкой проекта и проектом с открытым исходным кодом.

То есть вас смущает, то что проекте с открытым исходным кодом в коммите ссылаются на тикет который нельзя почитать? Как и сказал ilammy, это не проблема git или GitHub в частности.


Какую альтернативу вы предложите в контексте обсуждаемой стати при использовании внутренней JIRA? Описывать в каждом коммите полный текст тикета? И даже если тикет на десятку, сотню или даже тысячу коммитов? А как на счет обсуждений тикета? Их тоже дублировать в сообщении к коммитам?

Писать такой commit message, чтобы суть коммита была ясна хотя бы в общих чертах без доступа к джире. Тут, конечно, требуется умение излагать кратко. :)

НЛО прилетело и опубликовало эту надпись здесь
насколько я помню, едвали не половина населения Австралии — иммигранты в 1-2 поколении, преимущественно из Азии. Не так давно собеседовался в компанию, где работает бывший коллега. HR была девочка из Индии. Собеседовали тоже 2 индуса и испанец. На фоне в офисе «этнических» белых австралийцев (естественно, я не о бушменамах), как-то тоже не фигурировало. Поэтому тут ничего удивительного.
НЛО прилетело и опубликовало эту надпись здесь
Если вам повезло родиться в хорошей стране и хорошей семье, то средняя карьера дальше уже слабо зависит от навыков, «в среднем все найдут что делать».
НЛО прилетело и опубликовало эту надпись здесь
Я не про реально богатые семьи, а просто про хорошие.
Есть деньги на образование, интеллект более-менее присутствует. Куда? Программирование — стильно-модно-молодёжно. А дальше по накатанной — тут поработал год, там поработал два, вот уже опыт три года, завёл блог, пишешь о том, как важно создавать хороший код.
В России такого тоже полным-полно, а приедь какой-нибудь таджик сюда, так ему для устройства программистом придётся много чего показывать и доказывать. Но здесь ещё туда-сюда деньги считают, а в богатых странах и с этим полегче.
> Увы, там все имена безошибочно европейские
Так себе показатель. Я сейчас работаю с офисом в Чикаго, из десяти человек, с которыми регулярно контактирую, шестеро — китайцы, и все они подписываются именами типа Dan, Chuck и Paul, потому что у них там так принято.
Но там стоит вполне себе «Стив Ларссон»
Напомнило анекдот
В аэропорту пограничник проверяет паспорта прибывающих. В очереди стоит явный японец, и когда до него доходит очередь, пограничник обнаруживает в его паспорте ФИО «Свен Свантессон» 8-O Он спрашивает:
— Вы выглядите как японец, а имя-фамилия у Вас типично скандинавские. Как такое вышло?
— Понимаете, когда я иммигрировал к вам в страну, на иммиграционном контроле прямо передо мной стоял скандинав. А когда дошла очередь до меня, пограничник стал заполнять мои документы и спросил, какие у меня имя и фамилия, и я честно ответил: «Таки Еже».
НЛО прилетело и опубликовало эту надпись здесь
Похоже скорее просто на опечатку. Вместо ORANGE возможно должна быть роботизированная трансмиссия или вариатор. Ну или просто пример неудачный, раз вы изменили реальную суть объектов )
НЛО прилетело и опубликовало эту надпись здесь
Извините, просто хочу для себя уяснить, в целях повышения образованности. В приведенном вами коде проблема в том, что трансмиссия авто может быть ручной, автоматической, а может быть оранжевым цветом?
… и в форме котика.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
И это аутсорсер не из какой-нибудь страны третьего мира, а из Австралии. Все имена в git log — европейские. Я их теперь навсегда запомнил, и лично для меня теперь Австралия уравнялась со странами третьего мира. Потому что такую дичайшую невежественность как в коде, так и в организации процессов вокруг него, встречал очень редко.

Я вынужден вас огорчить. Как это не прискорбно, но профессиональная IT-культура России одна из топовых в мире. Я правда сравниваю только с Германией, но таких заморочек как в России тут нет и близко. Например, в России микросервисы уже пару лет как вышли из моды, а нам тут месяц назад устроили презентацию «Смотрите! Микросервисы! Как круто! Давайте попробуем?». Пробовать разумеется никто не будет…
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
А что сейчас у нас в моде? (пилю микросервисы на grpc).
Все зависит от контекста.
Все internal проекты — имеет смысл выносить в трекеры задач всю историю коммуникаций и поиска решения.
А публичные — очень полезно иметь один источник правды.
хорошей практикой является указание в комментарии к коммиту номера задачи из багтрекера
Конечно, если коммит имеет отношение к какому-то тикету, номер тикета надо указывать, и это-то обычно не забывают делать. Но коммит не обязательно должен закрывать какой-то известный баг или реализовывать запланированную фичу; кроме того, если на каждый коммит надо глядеть в багзиллу и продираться через портянки комментариев, работать с таким кодом (заниматься археологией) становится очень тяжело.
дублировать эту информацию ещё и в коммит кажется несколько избыточным
Репозиторий — штука вполне самодостаточная, и не стоит гвоздями прибивать к нему багтрекер вместо того, чтобы просто писать нормальные логи. :-)
поэтому обычно в описании к коммиту приводится только то что было изменено в данном конкретном коммите
Что было изменено понятно и из диффа, зачем же дифф тупо переводить на английский? Хороший лог должен объяснять, почему были сделаны изменения, причем так, чтобы было понятно и без контекста, годы спустя. Собственно, за этим когда-то и придумали правило-совет про 30%-what-70%-why.

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

Тут ошибка выше уровнем. Какой-то код тупо ждет US-ASCII на вход, не умея в что-то сложнее 7 бит, и вот его и надо патчить так, чтобы понимал, скажем, комменты на французском. А разраб "просто" сделал так, что тесты проходят (что в принципе не так просто оказалось — найти 0xA0 среди 0x20 можно в хекс-редакторе, но не в большинстве обычных текстовых редакторов).

А нужно ли? Всё зависит от проекта и его целей.

Это как снабдить стиралку функциями хлебопечки на случай, если кому-то понадобится засунуть туда тесто.

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

НЛО прилетело и опубликовало эту надпись здесь
Это когда ты знаешь что искать…

А баг в примере из разряда чертовщины, которая вымораживают мозг просто своим присутствием.

Если не сталкивались, то трудно объяснить тот вагон эмоций, который возникает от ошибок такого рода: ошибка, которой не может быть потому, что не может быть в принципе.
А ведь казалось бы, что мешает разработчикам компилятора либо парсера немного позаботиться о пользователях:

error: unknown start of token: \u{a0}
 --> src/main.rs:2:19
  |
2 |     println!("{}", 42);
  |                   ^
Unicode character ' ' (No-Break Space) looks like ' ' (Space), but it is not
А баг в примере из разряда чертовщины, которая вымораживают мозг просто своим присутствием.
Вся такая чертовщина возникает на абсолютно ровном месте, из-за чьей-то. Некоторые технологии принципиально не приспособлены для задач для каких их используют. Но обвиняют почему-то чертовщину.

А Вы ещё не выработали привычку, встретив баг при обработке текстовой строки, переключать редактор в HEX-режим, чтобы посмотреть, что за х...hex-ня в строке?

НЛО прилетело и опубликовало эту надпись здесь
> Жаль, давно перешел на vim, и до сих пор не знаю, есть ли в нем что-то аналогичное.

ga
А Вы ещё не выработали привычку, встретив баг при обработке текстовой строки, переключать редактор в HEX-режим, чтобы посмотреть, что за х...hex-ня в строке?
Анимешники не смотрят hex коды, анимешники просто читают заклинание
grep --color='auto' -P -n "[^\x00-\x7F]" путь-к-файлу

А я просто открываю FAR, там это всё из коробки (и отображение кодов, и подсветка отсутствующих в текущей кодировке символов)

Лёгким движением руки пример выше можно заставить искать по всему проекту/нескольким файлам. FAR сможет сразу же показать эти символы, без прокручивания, или же сразу для нескольких файлов?

Пишете макрос, и будет вам ЩАСТЬЕ.

НЛО прилетело и опубликовало эту надпись здесь
всё же придерживаюсь мнения, что комментарий должен быть минималистичным, строго по сути и со ссылкой на соответствующий таск в трекере, где уже, по желанию, проблема и пути решения могут быть изложены высокохудожественным языком, с долей «человечности» и без ограничений по количеству символов.
На ревью порой проще открыть таск и почитать, в чём была проблема, и потом воочию глянуть, как она была решена. А вот как раз имя таска в трекере должно отражать суть проблемы максимально точно.
ИМХО лучше такие лонг-риды писать в PR description чем в коммит мессаг, а в коммит мессаге оставлять просто краткое описание и обязательно ссылку на issue (по которой можно будет найти впоследствии PR). Коммит мессаг в разы тяжелее ревьювить и править ремарками чем PR description.

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

Не все разработчики работают исключительно с GitHub. Даже open source проекты нередко используют его лишь как зеркало, а главные репозитории хранят у себя под замком. PR и issue — это внешние сущности по отношению к git. И в этом смысле они не сильно отличаются от внешнего баг-трекера.


Ну и, опять же, удобство — это дело субъективное. Мне, например, часто удобнее смотреть код на своей локальной машине, а не через веб. Когда открываешь дифф, например, через git show <hash> | vim -, открываются приятные возможности. Например, большие коммиты можно смотреть по частям и удалять просмотренное. Или открывать в двух окнах редактора дифф и актуальную версию файла, чтобы они были рядом. Или прямо из диффа запускать поиск по Ctrl+]. Куча вариантов, в общем

Ну и, опять же, удобство — это дело субъективное.

Дело не в удобстве, дело в организации процесса. Польза от таких лонг ридов в первую очередь проявляется тогда, когда они ревьювятся вместе с кодом (иначе нет никакой гарантии что этому полотну текста вообще можно верить). Польза на ревью от этого двойная — во первых, ревьюерам не приходится гадать что означает та или иная ревью-дельта, вместо этого они сразу могут начать с чтения такой вот "документации", где оригинатор им все разъясняет, а потом сверять "что написано в доках" с тем "что написано в коде". Это резко увеличивает скорость и качество ревью. Во вторых, ревьюеры могут давать ремарки на "документацию", если им в ней что-то неясно. На выходе получается не просто проревьювленный код, а проревьювленный и полностью задокументированный солюшен.


Но если "документация" — в коммит мессагах, ревьюить ее становится резко сложнее. Мессаг не отредактировать без пересоздания коммита, а амендить коммиты на каждую ремарку от ревьюера — путь к косякам и ненависти.

Полностью поддерживаю. В комментарии ценна только первая строка — она видна в логе, остальное — шум.
Да и все равно потом будет squash and merge (в нашей команде) и в коммите останется только ссылка на PR и его title.
У парня отняли час жизни и он решил отыграться на тех, кто будет читать этот коммит.
Он был зафиксирован в одном из открытых репозиториев Government Digital Service — службы, занимающейся развитием цифровых услуг в Великобритании и поддерживающей проект GOV.UK
Очень круто, кстати, что часть «государственного кода» выкладывается в опенсурс, причем не под какой-нибудь непонятной драконовской лицензией, а под простой MIT License.
«За счёт людей (налогоплательщиков) и для людей».
Конституционная монархия с Палатой Лордов часто оказывается более народной чем иные «демократии».
Мы на внутреннем проекте пробуем использовать для таких описаний git notes

Представляю коллегу автора, которому нужно ревьювить по 20 коммитов в день.
Рассказ полезный, но место ему действительно в knowledge base и stack overflow.
Вряд ли кто будет искать текст ошибки в гитлоге, или посмотрит историю правок конфига столкнувшись с подобной ошибкой, и тем более вряд ли тут оно поможет поправить парсер.
Если же это было где-то опубликовано, стоит приложить ссылку — там могли откомментить люди с альтернативной точкой зрения или столкнувшиеся с похожей, но другой проблемой. Откомментить же этот опус по существу негде.

Попробуйте Conventional Commits. Писать в инфинитиве, без заглавных букв и точек.
Точки-то с заглавными буквами чем помешали? Да у них самих в примере «Commit message with both ! and BREAKING CHANGE footer» стоит точка в конце, настолько это бессмысленное требование.
В русской версии документации нет точки в строке с BREAKING CHANGE
Я сам сначала скептически отнесся к такому подходу, но когда попробовал разные варианты, нашел для себя эти требования удобными. Заглавные буквы и точки создают визуальный шум, например, при работе с GIT в IDE. Понятно, что это правило нельзя буквально распространять на всё, например, на имена классов.

Это как coding style: можно взять за основу то, что нравится и поменять то, то не нравится, и описать свой вариант.


Идея с префиксами мне нравится.

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

Непонятно только, почему feat и fix — это префиксы коммитов, а не веток. Мой подход: делать бранчи в виде


feat/<scope>/<feature-name>-#<task-id>,
fix/<scope>/<issue-name>-#<issue-id>,


а в коммитах писать по образцу:


[+-*!] <project scope>: <why the change was made> [<task-or-issue-id>],


где [+-*!] — это метки о добавлении/удалении/изменении/важном изменении, <project scope> — какая часть проекта затронута.


Примеры веток:
fix/installation/windows-installer-#12345
feat/authentication/federated-auth-#54321


Примеры коммитов:
+ Installer: components A was missing in Windows installation
- Installer: component Z is obsolete
* Authentication: user name format now conforms specs (#98765)

НЛО прилетело и опубликовало эту надпись здесь

Нет, эти метки не говорят о том, фикс это или фича. Это лишь некое поверхностное (и опциональное) обобщение того, что человек увидет в diff-ах: было ли что-то добавлено, убрано или изменено. Фикс/фича — это сущности более высокого уровня, для них в идеале должен быть заведён тикет/таск, он может включать множество коммитов добавляющих/удаляющих/изменяющих код, и в идеале это должно происходить в отдельной ветке.

НЛО прилетело и опубликовало эту надпись здесь

Атомарные коммиты обычно очень маленькие, потому что чтобы сделать фичу, часто нужно сделать это в несколько шагов. Поэтому если "замусоривать" означает "плодить кучу мелких коммитов", то атомарные как раз "замусоривают", т.е. плодят длинную-длинную колбасу коммитов.


возможно, было бы правильнее объединить эти коммиты: так мы показываем, что они имеют отношение друг к другу

Для логического объединения коммитов и предотвращения замусоривания бранчи и сделаны: называем ветку "fix/something", делаем в ней все нужные коммиты, потом сливаем рабочую ветку с мастер-веткой, и там будет коммит "Merged fix/something", по которому понятно, что произошло. Далее, хочешь — смотри только мастер, где "один коммит — один фикс/фича", без замусоривания, а хочешь лезь в ветку и смотри, какие конкретно шаги были сделаны, чтобы имплементировать этот фикс или фичу.


Ну в принципе можно этот мердж-коммит описать по принципам Conventional Commits, а ветку удалить или схлопнуть до одного коммита, но мы обычно сохраняем их, потому что бывает полезно восстановить по коммитам ход мысли и работы.

НЛО прилетело и опубликовало эту надпись здесь

Это не очень хороший коммит, включаю режим "разрешите докопаться" :)


внедрил несколько тестов

Каких? Почему бы не упомянуть здесь же хеши коммитов? А вдруг не в порядке именно тест — как мне в этом убедиться?


несколько тестов в ветку feature… Они хорошо работали… но при запуске… завершался с ошибкой

Т.е. в нашей идеальной сферической истории появился коммит, в котором сломался билд (добавлен неработающий тест). Появилось место, где git bisect будет спотыкаться, тесты падать. Фикс болтается отдельно. Отсюда вопрос: если так получилось потому что сломанный feature уже смерджили и squash' ить было поздно — то как-то? Если ещё не смерджили, то почему фикс не закоммитили вместе со сломанным тестом?

Целый час моей жизни не вернуть...

Всё оплачено работодателем.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий