Я уже некоторое время использую Git и недавно начал использовать его для маркировки своих выпусков, чтобы мне было легче отслеживать изменения и видеть, какая версия работает у каждого из наших клиентов (к сожалению, код в настоящее время требует что у каждого клиента есть своя копия сайта PHP, я меняю это, но это медленно).
В любом случае, мы начинаем набирать обороты, я подумал, что было бы здорово показать людям, что изменилось с момента последнего релиза. Проблема в том, что я не веду журнал изменений, потому что не знаю, как это сделать. В это время я могу запустить журнал и создать его вручную, но это очень быстро утомит.
Я пробовал гуглить «git changelog» и «git manage changelog», но я не нашел ничего, что действительно говорило бы о процессе изменения кода и о том, как это совпадает с журналом изменений. В настоящее время мы следим за процессом разработки Рейн Хенрикс, и мне бы понравилось то, что с этим связано.
Есть ли стандартный подход, который мне не хватает, или это область, где каждый занимается своим делом?
Большое спасибо за ваши комментарии / ответы!
--graph
, который наглядно показывает, в каких ветвях находятся коммиты.git log
вывода в журнал изменений не имеет смысла. Вам нужно выполнить фильтрацию и редактирование, чтобы иметь читаемый журнал изменений, иначе зачем вам вообще нужен журнал изменений? Я думаю, что вы можете автоматизировать создание журнала изменений, но, пожалуйста, не делайте сырых копийgit log
!Вы можете использовать некоторую версию журнала git, чтобы помочь вам:
Если вы правильно называете свои ветки, так что слияние с мастером отображается как что-то вроде «Объединенная ветка Feature-Foobar», вы можете сокращать вещи, показывая только это сообщение, а не все маленькие коммиты, которые вы слили, которые вместе образуют характерная черта:
Возможно, вам удастся дополнить это собственным сценарием, который может делать такие вещи, как удаление битов «объединенной ветви», нормализация форматирования и т. Д. В какой-то момент вы, конечно, должны написать его самостоятельно.
Затем вы можете создать новый раздел для журнала изменений один раз для каждой версии:
и зафиксируйте это в вашей версии.
Если ваша проблема заключается в том, что эти темы коммитов не похожи на те, которые вы хотели бы поместить в журнал изменений, у вас есть два варианта: продолжать делать все вручную (и стараться не отставать от него более регулярно, вместо того, чтобы играть в ловушку). на момент релиза), или исправьте свой стиль сообщения коммита. Один из вариантов, если субъекты не собираются делать это за вас, заключался бы в размещении строк типа «изменить: добавленная функция foobar» в теле ваших сообщений о коммите, чтобы позже вы могли сделать что-то вроде того,
git log --pretty=%B | grep ^change:
чтобы получить только те супер Важные биты сообщений.Я не совсем уверен, насколько больше, чем этот мерзавец может реально помочь вам создать ваши журналы изменений. Может быть, я неправильно истолковал, что вы подразумеваете под «управлять»?
источник
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я автор gitchangelog, о котором я буду говорить в следующем.
TL; DR: Вы можете проверить собственный журнал изменений gitchangelog или вывод ascii , сгенерировавший предыдущий.
Если вы хотите сгенерировать журнал изменений из вашей истории git, вам, вероятно, придется рассмотреть:
По желанию вам может потребоваться некоторая категоризация (новые вещи, изменения, исправления) ...
Имея все это в виду, я создал и использую gitchangelog . Он предназначен для использования соглашения о сообщениях git commit для достижения всех предыдущих целей.
Наличие соглашения о коммитах обязательно для создания хорошего журнала изменений (с использованием или без использования
gitchangelog
).принятие сообщения
Ниже приведены предложения о том, что может быть полезно подумать о добавлении в ваши сообщения фиксации.
Возможно, вы захотите разделить ваши коммиты на большие разделы:
Кроме того, вы можете пометить некоторые коммиты:
Попробуйте написать сообщение о коммите, ориентируясь на пользователей (функциональность) как можно чаще.
пример
Это стандарт,
git log --oneline
чтобы показать, как эта информация может храниться:Итак, если вы заметили, я выбрал формат:
Чтобы увидеть фактический результат вывода, вы можете заглянуть в конец страницы PyPI gitchangelog
Чтобы увидеть полную документацию моего соглашения о коммитах, вы можете увидеть справочный файл gitchangelog.rc.reference
Как создать из этого изысканный журнал изменений
Тогда довольно легко сделать полный список изменений. Вы можете сделать свой собственный сценарий довольно быстро, или использовать
gitchangelog
.gitchangelog
сгенерирует полный журнал изменений (с поддержкой секционирования какNew
,Fix
...) и будет разумно настраиваться в соответствии с вашими собственными соглашениями о фиксации. Он поддерживает любой тип вывод , благодаря шаблонированию черезMustache
,Mako templating
и имеет устаревшую систему по умолчанию письменного в сыре питона; все 3 современных движка имеют примеры того, как их использовать, и могут выводить журнал изменений, как тот, который отображается на странице PyPI в gitchangelog.Я уверен , что вы знаете , что есть много других
git log
дляchangelog
инструментов там также.источник
А ближе к делу CHANGELOG. Скажи мне, если тебе нравится.
источник
--format
, как описано в git-scm.com/docs/git-log#_pretty_formatsgitlog-to-changelog
Сценарий пригодится для создания GNU-стилеChangeLog
.Как показано
gitlog-to-changelog --help
, вы можете выбрать коммиты, используемые для генерацииChangeLog
файла, используя любую из опций--since
:или передавая дополнительные аргументы после
--
, которые будут переданыgit-log
(вызваны внутреннеgitlog-to-changelog
):Например, я использую следующее правило на верхнем уровне
Makefile.am
одного из моих проектов:Это правило используется во время выпуска для обновления
ChangeLog
последними еще не записанными сообщениями о фиксации. Файл.last-cl-gen
содержит идентификатор SHA1 самого последнего записанного коммитаChangeLog
и хранится в репозитории Git.ChangeLog
также записывается в хранилище, так что его можно редактировать (например, для исправления опечаток) без изменения сообщений фиксации.источник
Поскольку создание тега для каждой версии является наилучшей практикой, вы можете разделить журнал изменений по версиям. В этом случае эта команда может помочь вам:
источник
Для проектов GitHub это может быть полезно: github-changelog-generator
Он генерирует журнал изменений из тегов закрытых выпусков и объединенных pull-запросов.
Этот CHANGELOG.md был сгенерирован этим сценарием.
Пример:
источник
Я также сделал библиотеку для этого. Он полностью настраивается с помощью шаблона «Усы». Это может:
Я также сделал:
Подробнее о Github: https://github.com/tomasbjerre/git-changelog-lib
Из командной строки:
Или в Дженкинс:
источник
Это то, что я люблю использовать. Он получает все коммиты с момента последнего тега.
cut
избавляется от хеша коммита. Если вы используете номера тикетов в начале ваших сообщений о коммите, они группируются сsort
. Сортировка также помогает , если вы префикс некоторых коммитов сfix
,typo
и т.д.источник
Я позволил серверу CI передать следующее в файл с именем
CHANGELOG
для каждого нового выпуска с датой, указанной в имени файла для выпуска:источник
Для журнала изменений стиля GNU я приготовил функцию
С этим:
gnuc
и теперь мой буфер обмена содержит что-то вроде:
Затем я использую буфер обмена в качестве отправной точки для обновления ChangeLog.
Он не идеален (например, файлы должны быть относительно их пути ChangeLog, поэтому
python/py-symtab.c
без негоgdb/
я буду редактироватьgdb/ChangeLog
), но это хорошая отправная точка.Более продвинутые скрипты:
Я должен согласиться с Tromey: дублирование данных git commit в ChangeLog бесполезно.
Если вы собираетесь внести изменения, составьте хорошее резюме того, что происходит, возможно, как указано на http://keepachangelog.com/
источник
Основанный на bithavoc , он перечисляет
last tag
доHEAD
. Но я надеюсь перечислить журналы между 2 тегами.Список журналов между 2 тегами.
Например, в нем будут перечислены журналы от
v1.0.0
доv1.0.1
.источник