Связывание документации с комментариями коммита Git

Использование git для отслеживания изменений в проекте позволяет участникам добавлять комментарии к каждой фиксации. Если руководящие принципы проекта и контроль менеджеров ограничивают эти комментарии форматом, полезным для включения в документацию проекта — историю, журнал изменений или руководство пользователя, в зависимости от случая, было бы неплохо сделать ссылку на комментарии коммита, а не перепечатайте или скопируйте/вставьте их в соответствующие документы. Как создавать и поддерживать эти ссылки, а также выбирать, какие из них включать в какие потоки документации (т. е.: руководство пользователя, история, спецификации, руководство по обслуживанию и т. д.)?

Здесь следует отметить, что, хотя git известен разработкой программного обеспечения, он не ограничивается этим. Это одинаково полезно для любой системы, где нескольким участникам необходимо координировать и отслеживать свои усилия. Такие альтернативы включают бизнес-презентацию, разработанную командой, учебник с несколькими авторами и исследовательский проект — как сбор данных, так и отчеты.


Дополнительная информация:

Репозиторий git всегда доступен локально, но не всегда в Интернете (например, на GitHub). Таким образом, метод, основанный на API, разработанном для конкретного веб-узла, вероятно, непригоден для использования. Хотя в этих API есть некоторые богатые возможности.

Сама документация может быть в git, и часто ее части будут, хотя это и не гарантия. Только комментарии коммитов git гарантированно находятся в git, где бы они ни размещались. Части документов в git находятся в уценке, как бы они ни создавались. В большинстве случаев основная часть написания документа выполняется в графическом текстовом процессоре (MS Word, LibreOffice Writer и т. д.) и может быть сохранена в формате XML или RTF, хотя предпочтение отдается формату DocBook XML.

Инструмент для использования может быть изменен, эта возможность будет частью процесса принятия решений. Выходные форматы в основном PDF и HTML, хотя уценка также иногда полезна. Сами комментарии фиксации либо преобразуются в основную часть документации в виде абзаца или аннотации, либо сохраняются как есть (необработанный текст) для информационного пузыря или сноски, в зависимости от целевого документа и целей проекта.

Основная цель состоит в том, чтобы инструмент «втягивал» комментарии в документацию динамически по предпочтениям, а не перепечатывал их вручную или копировал/вставлял из git в исходный код документации.

Вы пытаетесь вставить комментарии в документы или просто ссылаетесь на них?
@DavidVogel Пытается связать их текст с документом, а не копировать/вставлять или перепечатывать.
Это зависит от используемых вами систем. Доступны ли комментарии через Интернет (например, на GitHub) или они находятся на внутреннем сервере? Какой инструмент публикации вы используете для управления форматом экспорта? Каков исходный формат документов (HTML, XML, mardown и т. д.)?
@DavidVogel Помогает ли редактирование контексту?
Я уже час писал ответ и у меня две страницы текста. Теперь я понимаю, что, возможно, вы уже знаете все, что я собираюсь рассказать. Вот краткое резюме: я не знаю такого инструмента, но понимаю, как его программировать для некоторых исходных форматов и рабочих процессов. Это зависит от того, что именно вы ожидаете от ссылок и какой рабочий процесс вы хотите реализовать.
Вы хотите извлекать комментарии один раз при создании документации или каждый раз, когда пользователь открывает страницу или документ (если это то, что вы подразумеваете под «динамически»)? Вы хотите продолжить работу в различных WYSIWYG-редакторах и вам нужно добавить в них ссылки на комментарии? Вы хотите выбирать коммиты вручную или программно?
На рынке может не быть готового инструмента, но API обычно предоставляют способ. Подумайте о том, чтобы поговорить с разработчиком, чтобы он написал инструмент, использующий этот API для сбора комментариев.

Ответы (4)

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

$ git log --format=%B -n 1 <sha-1> > filename.txt

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

Вот с трубой, а не с напильником и мне при делах. Отнимает работу от инструмента документирования и удаляет проблему из критериев для инструмента. Практически любым способом, но лучше найти/заставить инструмент читать файл со стандартного ввода, чем с прямой ссылкой на git. *nix в своих лучших проявлениях, делайте что-то одно и делайте это хорошо.

Идентификация коммита

Универсальным идентификатором каждого коммита является его SHA1 — 40-значное шестнадцатеричное число, подобное этому:

3e0b5fb09d70d0457d7e5ae7892504f6e1b45f33

Этот коммит взят из репозитория конструктора документации Sphinx. В комментарии говорится:

Merge pull request #4556 from tk0miya/4543_autodoc_test_fails_with_py353

Fix #4543: test for autodoc fails with python 3.5.3

Разумный способ сделать постоянную ссылку на коммит — сохранить его SHA1 и использовать его для доступа к коммиту через различные интерфейсы — см. примеры ниже.

Получение сведений о коммите

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

Командная строка и локальный репозиторий

Первый вариант — когда код имеет доступ файловой системы к репозиторию.

$ git show -s --format=%B 3e0b5fb09d70d0457d7e5ae7892504f6e1b45f33

Merge pull request #4556 from tk0miya/4543_autodoc_test_fails_with_py353

Fix #4543: test for autodoc fails with python 3.5.3

Существуют различные --formatварианты получения необходимых сведений о коммите.

API и удаленный репозиторий

Вы также можете использовать SHA1 для получения сведений о коммите из удаленного репозитория. Скажем, у вас есть самостоятельная установка GitLab, и вы хотели бы получать сообщение коммита через GitLab API . Вот как может выглядеть запрос GET:

curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" \
"https://gitlab.example.com/api/v4/projects/5/sphinx/commits/3e0b5fb09d70d0457d7e5ae7892504f6e1b45f33"

Ответ представляет собой JSON с большим количеством деталей коммита.

Выбор коммитов

Если вы хотите автоматически выбирать значимые коммиты, вам нужно какое-то правило или соглашение, чтобы ваша команда отмечала такие коммиты.

Например, многие команды работают с методологиями «поток git» или «поток GitHub/GitLab», в которых работа выполняется в функциональных ветках, а затем объединяется в стабильную ветку. Каждое слияние приводит к фиксации слияния. Если члены вашей команды пишут осмысленные сообщения в коммитах слияния, это хороший источник для журнала изменений.

Чтобы получить сообщения фиксации слияния, используйте git log --merges. В этом примере мы получаем хэш (SHA1, %H), дату создания ( %ad) и сообщение фиксации ( %B), разделенные символами новой строки ( %n):

$ git log --format='%H%n%at%n%B' --merges   

Вы можете захотеть упаковать вывод в какой-нибудь удобный формат, например JSON:

$ git log  --merges --format='{%n  "hash": "%H",%n  "timestamp": %at,%n  "subject": "%s"%n}'
{
  "hash":3e0b5fb09d70d0457d7e5ae7892504f6e1b45f33,
  "timestamp": 1517848081,
  "subject": "Merge pull request #4556 from tk0miya/4543_autodoc_test_fails_with_py353"
}

...

Здесь применяется тот же список --formatопций .


Несколько дней назад я видел сообщение именно об этой идее на слабом канале WtD — я хочу сказать, что этот подход назывался typson + docson, и он напрямую извлекал комментарии в систему документации с места в карьер — обсуждение на базе пользователей, похоже, указывало на то, что это предназначено как внутренняя система документов, ей потребуются небольшие настройки, но этого будет достаточно.

Нашел это в своей истории - надеюсь, это поможет.

ссылка на демонстрационную страницу: http://lbovet.github.io/typson-demo/

ссылка на страницу docson github: https://github.com/lbovet/docson

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

Внешний интерфейс к базе данных дает еще один способ доступа к комментариям, однако он не делает их внесение в документацию проще, чем копирование/вставка в командной строке. Использование копирования/вставки - это то, чего я пытаюсь избежать, не находя другого метода поиска того, что копировать/вставлять.
Комментарий был «было бы неплохо дать ссылку на комментарии коммита». Внешний интерфейс действительно ссылается на комментарии. Так почему голосование против?