Чи слід зберігати створену документацію у сховищі Git?


49

Коли ви використовуєте такі інструменти, як jsdocs , він генерує статичні файли HTML та його стилі у вашій кодовій базі на основі коментарів у вашому коді.

Чи слід перевіряти ці файли у сховищі Git чи їх слід ігнорувати .gitignore?


3
Можливо, є аргумент для їх зберігання у сховищі GitHub, оскільки ви можете публікувати статичний HTML за допомогою сторінок . Хоча тоді виникає цілком окремий набір аргументів щодо того, як ви впевнені, що вони актуальні тощо ...
Борис Павук

21
Якщо файли генеруються, то за визначенням вони не є джерелом .
chrylis -на страйк-

3
Ви публікуєте те, що хочете опублікувати. Особливо на GitHub. Якщо ви хочете, щоб усі бачили згенерований PDF чи зображення, слід включити його замість того, щоб очікувати, що всі встановлять LaTeX та скомпілюють його самі. Наприклад, це сховище було б не дуже добре, якби воно не включало створені зображення, а лише файли проекту ...
Džuris


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

Відповіді:


131

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

Тому ці файли слід ігнорувати за допомогою .gitignore.


4
Але це може залежати від версій інструментів збирання або навіть наявності інструментів збирання (наприклад, для створення деяких файлів потрібна стара версія інструменту збирання). Як ви впораєтеся з цим? Чи можете ви вирішити це у своїй відповіді?
Пітер Мортенсен

27
@PeterMortensen Якщо вам потрібен артефакт, побудований за допомогою спеціальної версії інструментів для складання, ви створюєте його за допомогою потрібної версії інструментів збирання. Така потреба є або a) виявити власноруч, і в цьому випадку ви самостійно; б) задокументовано в README ("Вам знадобиться дві встановлені 2 конкретні версії доксигену ..."); в) розглядаються сценаріїми складання (вони перевіряють наявні версії інструментів збирання та діють належним чином). У будь-якому випадку управління джерелами призначене для джерел, а не для побудови артефактів.
Joker_vD

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

4
@Alexander Ви б також поставили вбудований бінарний файл у репо? Документація побудована. Ви берете вбудовану документацію і робите її десь доступною.
1201ProgramAlarm

5
@ 1201ProgramAlarm "Чи б ви також поставили вбудований бінарний файл у репо?" Ні, тому що вбудований двійковий файл має низьке переднє значення для людей, які переглядають GitHub, порівняно з документацією. "Ви берете вбудовану документацію і робите її десь доступною." Поки це публічно розміщено, помітно пов’язане, то так, це чудово. Це, мабуть, найкращий випадок.
Олександр

23

Моє правило: коли я клоную сховище і натискаю кнопку «побудувати», то через деякий час все будується. Щоб досягти цього для вашої згенерованої документації, у вас є два варіанти: або хтось несе відповідальність за створення цих документів і введення їх в git, або ви документуєте саме те, яке програмне забезпечення мені потрібно на моїй розроблювальній машині, і ви переконайтесь, що натискаєте кнопку "build" кнопка збирає всю документацію на моїй машині.

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

@Curt Сімпсон: Маючи всі вимоги до програмного забезпечення документованого це набагато краще , ніж я бачив у багатьох місцях.


7
Не документуйте, яке програмне забезпечення комусь потрібно для складання (або принаймні не просто документуйте): змусьте скрипт збірки повідомити користувачеві, чого він відсутній, або навіть встановити його самостійно, якщо це розумно. У більшості моїх репостів будь-який грамотний розробник на півдорозі може просто запустити ./Testта отримати збірку або отримати хорошу інформацію про те, що йому потрібно зробити, щоб отримати збірку.
Керт Дж. Сампсон

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

Це ваше правило, і це хороше правило, і мені це подобається. Але інші можуть скласти свої правила.
Еморі

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

@ jpmc26 Мені здається цілком розумним інтегрувати всю збірку в IDE. Кнопка збірки на моїй машині - Command-B.
gnasher729

14

Ці файли не повинні бути зареєстровані, оскільки дані для їх генерування вже є. Ви не хочете двічі зберігати дані (DRY).

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


4

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

Але в більшості випадків наявність їх у контролі джерел не потрібна, як пояснено в інших відповідях.


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

1
Це не повинно бути на етапі фіксації. Легко може бути завданням, що перебувають вниз / CI / Jenkins, публікувати їх щоразу, коли вони вважатимуться гідними зберігання. Це цілком може бути кожне зобов’язання, але рішення слід скасувати за відсутності вагомих причин. Або, принаймні, так я бачу.
ANone

3

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


2

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

  • Чи є документація вимогою до виробництва?
  • Чи не має у вашій системі розгортання необхідних інструментів для створення документів?

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


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

2

Це залежить. Якщо ці документи:

  • Потрібно бути частиною сховища, як-от readme.md, тоді бажано зберігати їх у git repo. Тому що впоратися з цими ситуаціями на автоматизованому шляху може бути складним.

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

  • Знадобиться багато часу для їх побудови, тоді виправдано зберегти їх.

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

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

  • Є конкретна прийнята причина для всіх команд, які повинні бути прийняті на посаду, то виправдано зберігати їх у репо-релізі. (Ми не знаємо вашого контексту, ви та ваша команда)

У будь-якому іншому сценарії це слід сміливо ігнорувати.

Однак, якщо виправдати їх утримувати в git repo, це може бути ознакою ще одного більшого питання, з яким стикається ваша команда. (Не має системи CI або подібних, жахливих проблем з роботою, зіткнувся з простоєм під час будівництва тощо)


1

Як принцип контролю версій, у сховищі повинні зберігатися лише "первинні об'єкти", а не "похідні об'єкти".

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

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

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