Ось інвентаризація того, що типова інженерна команда тримає в git:
- Вихідний код додатку
- Визначення інфраструктури (Terraform, Pulumi, CloudFormation)
- Конфігурації CI/CD-конвеєрів
- Скрипти міграції бази даних
- Специфікації API (OpenAPI, protobuf)
- Маніфести розгортання (Kubernetes, Docker Compose)
- Шаблони конфігурації середовища
А ось що зазвичай живе поза git:
- Документація
Це дивно. Документація описує систему. Вона змінюється, коли змінюється система. Їй потрібне рецензування, версіонування, атрибуція та можливість відкату. Кожен інший артефакт із цими властивостями живе в git. Документація — ні, і ніхто не може дати гарне пояснення чому.
Типові відмовки
«Нетехнічні люди повинні редагувати документацію»
Це найпоширеніший аргумент на користь зберігання документації в Confluence чи Notion. І він обґрунтований — ви не можете просити продакт-менеджера вивчити git branching, щоб виправити помилку. Але це не аргумент проти git. Це аргумент на користь кращого інструментарію поверх git.
Git — це бекенд для зберігання та версіонування. Ніщо не вимагає, щоб люди взаємодіяли з ним напряму. Веб-редактор може створювати коміти та пушити зміни так само, як це робить CI-конвеєр. Користувач пише в браузері; система обробляє git-операції.
Протиставлення «git проти нетехнічних користувачів» — хибна дихотомія. Можна мати і те, і інше.
«Документація змінюється занадто часто для PR»
Деякі команди вважають, що вимога pull request для документації сповільнить написання. І якщо ваш процес PR вимагає двох рецензентів, перевірку CI та чергу на злиття — так, це занадто багато тертя для виправлення помилки.
Але ніщо в git не вимагає важкого процесу рецензування. Ви можете пушити напряму в main для незначних змін і використовувати гілки для структурних переробок. Суть у тому, що історія існує. Кожна зміна відстежується, атрибутується і є зворотною. Чи рецензуєте ви кожну зміну — це рішення процесу, а не обмеження інструменту.
«Наша платформа документації не підтримує git»
Раніше це було правдою, і це мало значення. Confluence, Notion та більшість вікі зберігають контент у пропрієтарній базі даних без реальної інтеграції з git. Експорт у markdown — з втратами та односторонній.
Але це обмеження конкретних продуктів, а не фундаментальне обмеження. Платформи документації, що розглядають git як джерело істини — надаючи при цьому веб-редактор для зручності — зараз існують. Технології наздогнали потребу.
«Markdown обмежений»
Справедлива критика для певних типів контенту. Markdown не підтримує нативно складні таблиці, вбудовані діаграми чи інтерактивні елементи. Але для 90% внутрішньої документації — посібників, ранбуків, архітектурних рішень, документації API, матеріалів з адаптації — markdown більш ніж достатній.
І markdown у git дає вам те, чого не може дати жоден пропрієтарний формат: портативність. Якщо через два роки ви вирішите змінити інструменти, ваш контент — це текстові файли у стандартному форматі. Спробуйте експортувати п’ять років контенту Confluence у щось корисне.
Що ви втрачаєте без Git
Якщо ваша документація живе поза git, ви втрачаєте можливості, які інженери вважають само собою зрозумілими для коду:
Blame
Хто написав цей абзац, де стверджується, що API підтримує пагінацію? Коли? У відповідь на що? З git blame ви можете простежити кожен рядок до його автора, позначки часу та повідомлення коміту. У вікі ви можете побачити «останнє редагування Сарою, 6 місяців тому» — без контексту чому.
Гілки
Ви переписуєте посібник з розгортання для нової інфраструктури. Старий посібник повинен залишатися точним до завершення міграції. У git ви створюєте гілку. Обидві версії співіснують. Ви зливаєте, коли міграція завершена. У вікі ви або підтримуєте дві сторінки (які неминуче розходяться), або редагуєте на місці та сподіваєтесь, що ніхто не піде за наполовину оновленими інструкціями.
Атомарні крос-репозиторні зміни
Найкращі зміни документації відбуваються разом зі змінами коду. PR, що додає API endpoint, повинен включати документацію для цього endpoint. Коміт, що оголошує функцію застарілою, повинен оновити документацію в тому ж коміті — або принаймні в тому ж PR. Коли документація живе у вікі, таке зв’язування неможливе. Код поставляється, а хтось створює тікет «оновити документацію», який тижнями стоїть у беклозі.
Порівняння
Що змінилося в останніх нотатках до релізу? Покажіть diff. У git git diff v1.4..v1.5 -- docs/ дає вам точно те, що змінилося. У вікі ви переглядаєте історії сторінок одну за одною, порівнюючи відрендерений вивід і сподіваючись, що помітите кожне редагування.
Автоматизація
З документацією в git ви можете будувати автоматизацію:
# Знайти документи, не оновлені за 90 днів
git log --all --diff-filter=M --name-only --since="90 days ago" -- docs/ \
| sort -u > recently_modified.txt
# Порівняти з усіма файлами документації
find docs/ -name "*.md" | sort > all_docs.txt
# Файли, НЕ змінені за 90 днів
comm -23 all_docs.txt recently_modified.txt
Спробуйте зробити це з вікі. Вам доведеться звертатися до API, парсити позначки часу та обробляти пагінацію — якщо API взагалі надає дати модифікації.
Справжня причина, чому документація не в Git
Це не технічна причина. Це історична. Документація передує сучасним DevOps-практикам. Вікі з’явилися на початку 2000-х, коли «інфраструктура як код» не існувала, а контроль версій означав SVN. Модель вікі — редагування в браузері, збереження в базу даних — мала сенс, коли альтернативою було пересилання документів Word електронною поштою.
Але інженерні практики рухалися вперед. Інфраструктура перейшла від серверів, налаштованих вручну, до декларативного коду в git. CI/CD перейшов від завдань Jenkins, налаштованих через веб-інтерфейс, до pipeline-as-code у YAML-файлах. Конфігурація перейшла від сторінок налаштувань додатків до змінних середовища та конфігураційних файлів у репозиторіях.
Документація — останній оплот. Не тому, що вона інша, а тому, що інструментарій не наздоганяв. Статичні генератори сайтів вирішили проблему «документація в git» для розробників, але виключили всіх, хто не працює з терміналом. Вікі вирішили проблему «будь-хто може писати», але відмовилися від контролю версій. Жодна сторона не подолала прірву — до недавнього часу.
Як виглядає правильний підхід
Процес роботи з документацією, що поважає git, повинен виглядати так:
- Автори створюють і редагують контент через веб-інтерфейс — термінал не потрібен
- Кожне збереження створює git commit — автоматично, непомітно
- Розробники можуть редагувати той самий контент у своєму IDE і пушити в той самий репозиторій
- Обидві сторони залишаються синхронізованими — без конфліктів, без ручного злиття
- Pull request працюють для документації так само, як для коду
- Повна git-історія доступна: blame, diff, log, branch
Це не гіпотетично. Патерн Content Ledger вирішує проблему синхронізації. Платформи, що його реалізують, дають вам досвід редагування як у вікі з git-репозиторієм як бекендом.
Якщо ви будуєте новий процес документації — або перебудовуєте той, що не працює — почніть із git як фундаменту. Виберіть інструментарій, що розглядає репозиторій як джерело істини, а не як ціль експорту. Ваше майбутнє «я», перевіряючи, що змінилося і чому, буде вдячне за існуючу історію.
Як зазначено в самій документації Git: контроль версій записує зміни файлів у часі, щоб ви могли згадати конкретні версії пізніше. Це стосується документації так само, як і коду. Можливо, навіть більше — бо код має тести для виявлення регресій, а документація має лише людську пам’ять.
Якщо ваша документація варта написання, вона варта версіонування. Покладіть її в git.
Якщо ви хочете спробувати платформу документації, де git є джерелом істини — а не доповненням — DocPlatform безкоштовний і розгортається на власному сервері. Один бінарний файл, без бази даних для управління, двостороння синхронізація з git вбудована.