生成されたドキュメントはGitリポジトリに保存する必要がありますか?


49

jsdocsのようなツールを使用すると、コード内のコメントに基づいてコードベースに静的なHTMLファイルとそのスタイルが生成されます。

これらのファイルをGitリポジトリにチェックインするか、.gitignoreで無視する必要がありますか?


3
ページを使用して静的HTMLを公開できるため、GitHubリポジトリにそれらを格納する引数がある場合があります。その後、けれども引数の全く別のセットは、あなたは彼らが最新の状態にしていることを確認する方法として生じる等...
ボリス・スパイダー

21
ファイルが生成される場合、定義上、それらはsourceではありません。
クリリス

3
公開したいものを公開します。特にGitHubで。生成されたPDFまたは画像をすべての人に見せたい場合は、すべての人がLaTeXをインストールして自分でコンパイルすることを期待する代わりに、それらを含める必要があります。例えば、このことは、生成された画像のみのプロジェクトファイル...含まれていない場合は、リポジトリは非常に良いではないでしょう
Džuris


7
サードパーティライブラリの消費者として、オンラインドキュメントのないライブラリ(リポジトリのサブフォルダにあるか、readmeからリンクされているかを問わず)を10回表示した場合、クリックしてそれらのライブラリをすべて10回スキップします。ライブラリが自分のニーズを満たしているかどうかを確認するためだけに、30分間Doxygenをいじるつもりはありません。
アレクサンダー

回答:


131

特定のニーズがない場合、バージョン管理にチェックインされた他のファイルを使用してビルドツールからビルド、再作成、構築、または生成できるファイルはチェックインしないでください。ファイルが必要な場合、他のファイルから(再)ビルドできますソース(通常、ビルドプロセスの一部として)。

したがって、これらのファイルは.gitignoreで無視する必要があります。


4
ただし、これはビルドツールのバージョンやビルドツールの可用性に依存する場合があります(たとえば、一部のファイルを生成するには、古いバージョンのビルドツールが必要です)。どのようにそれを処理しますか?あなたの答えでそれを解決できますか?
ピーターモーテンセン

27
@PeterMortensen特別なバージョンのbuldツールでビルドされたアーティファクトが必要な場合、必要なバージョンのビルドツールでビルドします。そのような必要性は次のいずれかです。a)自分で発見された場合。b)READMEに文書化されています(「doxygenの2つの特定バージョンをインストールする必要があります...」); c)ビルドスクリプトによる処理(利用可能なビルドツールのバージョンを確認し、適切に動作します)。いずれにしても、ソース管理はソース用であり、ビルドアーティファクト用ではありません。
Joker_vD

2
この答えは、継続的な展開サーバーが簡単にアクセスできる方法でドキュメントを構築して公開する場合にのみ実行可能であると思います。それ以外の場合、アクセシビリティを向上させるために、レポジトリ内のドキュメントを「キャッシュ」することには大きな価値があります。ソフトウェアのドキュメントを見るためだけに、ビルドスクリプトをいじる必要はありません。
アレクサンダー

4
@Alexanderビルドされたバイナリもリポジトリに入れますか?ドキュメントが構築されます。構築されたドキュメントを受け取り、どこかでアクセスできるようにします。
1201ProgramAlarm

5
@ 1201ProgramAlarm「ビルドされたバイナリもリポジトリに入れますか?」いいえ、ビルドされたバイナリは、ドキュメントと比較して、GitHubを閲覧している人々にとって前払い価値が低いためです。「作成したドキュメントを受け取り、どこかでアクセスできるようにします。」それが公的にホストされ、目に見える形でリンクされている限り、それは素晴らしいことです。おそらく最良のケースです。
アレクサンダー

23

私のルールは、リポジトリを複製して「ビルド」ボタンを押すと、しばらくしてからすべてがビルドされるということです。生成されたドキュメントでこれを実現するには、2つの選択肢があります。誰かがこれらのドキュメントを作成してgitに入れるか、開発マシンで必要なソフトウェアを正確にドキュメント化し、「ビルド」を押すことを確認しますbuttonは、私のマシン上にすべてのドキュメントを作成します。

生成されたドキュメントの場合、ヘッダーファイルに1つの変更を加えただけでドキュメントが変更されるはずです。各開発者のマシンでこれを行うと、誰かがそれを更新したときだけでなく、常に正しいドキュメントが必要になります。他にも、何かを生成するのに時間がかかり、複雑で、ライセンスが1つしかないソフトウェアが必要な場合などがあります。その場合は、1人にgitに入れる責任を与える方が良いでしょう。

@Curt Simpson:すべてのソフトウェア要件を文書化することは、私が多くの場所で見たよりもはるかに優れています。


7
誰かがビルドに必要なソフトウェアを文書化しないでください(または、少なくとも文書化するだけではありません):ビルドスクリプトにユーザーに不足しているものを伝えさせるか、それが合理的であればそれ自体をインストールします。私のリポジトリのほとんどでは、中途半端な有能な開発者なら誰でも実行./Testしてビルドを取得したり、ビルドを取得するために必要なことについての良い情報を取得したりできます。
カートJ.サンプソン

5
あなたが指定した場合、生成されたドキュメントをgitに入れることが良いことには本当に同意しません。それが私たちがアーティファクトとアーカイブを持っている理由です。
スルタン

それがあなたのルールであり、それは良いルールであり、私はそれが好きです。しかし、他の人は独自のルールを作ることができます。
エモリー

あなたのマシンにはビルドボタンがないので、「ビルドコマンドを実行する」ことを意味すると思います。...ビルド全体がIDEと統合されることを期待している場合を除き、完全に不合理です。
jpmc26

@ jpmc26ビルド全体をIDEに統合することはまったく合理的です。私のマシンのビルドボタンはCommand-Bです。
gnasher729

14

これらのファイルは、生成するデータが既に存在するため、チェックインしないでください。データを2回(DRY)保存する必要はありません。

CIシステムがある場合は、おそらくドキュメントをビルドし、そのビルド用に保存して、Webサーバーに公開できます。


4

それらを何らかのリポジトリー(同じまたは異なるリポジトリー、できれば自動的に生成されたもの)に保管する利点の1つは、文書に対するすべての変更を確認できることです。これらのdiffは、ソースコードのdiffよりも読みやすい場合があります(具体的には、実装の変更ではなく仕様の変更のみに関心がある場合)。

ただし、他の回答で説明したように、ほとんどの場合、ソース管理にそれらを含める必要はありません。


1
そのためには、コミットを作成するために使用されるすべてのレポに事前コミットフックが必要になります。ドキュメント生成プロセスが完全に自動化されていない場合、ドキュメントがコードと同期していないコミットを取得するためです。そして、これらの壊れたコミットは、コミットされていないドキュメントよりも理解しやすさを損ないます。
cmaster

1
これはコミット段階である必要はありません。ストレージにふさわしいとみなされるたびにそれらを公開するのは、簡単にダウンストリーム/ CI / Jenkinsの仕事になるでしょう。これは各コミットである可能性がありますが、正当な理由がない場合は決定を分離する必要があります。または、少なくともそれは私が見る方法です。
アノン

3

無視されます。とにかくリポジトリのユーザーがそれらを再構築できるようにしたいと思うでしょう、そしてそれはドキュメントが常に同期していることを確実にするという複雑さを取り除きます。すべてを1か所にまとめて、何もビルドする必要がない場合、ビルドされたアーティファクトを1か所にまとめない理由はありません。ただし、ソースリポジトリは実際にはこれを行うのに適した場所ではありませんが、複雑さはほとんどの場所よりも痛いためです。


2

展開プロセスによって異なります。ただし、生成されたファイルをリポジトリにコミットすることは例外であり、可能であれば回避する必要があります。次の質問の両方にYesで回答できる場合、ドキュメントのチェックインが有効なオプションである可能性があります。

  • ドキュメントは本番環境の要件ですか?
  • 展開システムには、ドキュメントを構築するために必要なツールがありませんか?

これらの条件が当てはまる場合は、おそらくレガシーシステムまたは特別なセキュリティ制約のあるシステムで展開しています。別の方法として、生成されたファイルをリリースブランチにコミットし、マスターブランチをクリーンに保つことができます


1
生成されたファイルをリリースブランチにコミットすることは、すべての状況で機能するわけではありませんが、特にマークダウンから構築された静的Webサイトなど、優れたソリューションである場合にはいくつかあります。ビルドプロセスの一部としてそのようなコミットを簡単に生成するための特別なツールビルドすることで十分な頻度で行います。
カートJ.サンプソン

2

場合によります。それらのドキュメントの場合:

  • のように、リポジトリの一部である必要がある場合readme.md、gitリポジトリに保存することをお勧めします。これらの状況を自動化された方法で処理するのは難しい場合があるためです。

  • CIシステムのように、自動化された方法でビルドおよび更新する方法がなく、一般ユーザー向けに表示することを意図している場合は、gitリポジトリに保存することをお勧めします。

  • それらを構築するのに多くの時間を要し、それらを保持する正当な理由があります。

  • 一般ユーザー(ユーザーマニュアルなど)に表示されることを目的としており、構築にかなりの時間がかかりますが、以前のドキュメントにアクセスできなくなり(オフライン)、それをgitリポジトリに保持する正当な理由があります。

  • 一般ユーザー向けに表示されることを意図しており、その変更/進化の履歴を表示する必要があります。以前のバージョンのドキュメントをコミットしたまま、以前のバージョンにリンクした新しいバージョンをビルド/コミットする方が簡単です。正当。

  • すべてのチームがコミットされる特定の受け入れられた理由があり、それをgitリポジトリに保持する正当な理由がある。(私たちはあなたのコンテキストを知りません、あなたとあなたのチームはします)

他のシナリオでは、無視してください。

ただし、それらをgitリポジトリに保持する正当な理由がある場合は、チームが直面している別の大きな問題の兆候である可能性があります。(CIシステムまたは同様の恐ろしいパフォーマンスの問題がなく、構築中にダウンタイムが発生するなど)


1

バージョン管理の原則として、「プライマリオブジェクト」のみをリポジトリに保存し、「派生オブジェクト」は保存しないでください。

ルールには例外があります。つまり、派生オブジェクトを必要とするリポジトリのコンシューマがあり、それらを生成するために必要なツールがないことが合理的に予想される場合です。材料の量が扱いにくいなど、他の考慮事項が重くなりますか?(プロジェクトがすべてのユーザーにツールを提供するだけの方が良いでしょうか?)

これの極端な例は、コンパイラがその言語自体で書かれている珍しいプログラミング言語を実装するプロジェクトです(よく知られた例には、OcamlまたはHaskellが含まれます)。コンパイラのソースコードのみがリポジトリにある場合、誰もビルドできません。仮想マシンで実行できるコンパイラのコンパイルバージョンがないため、そのコンパイラのソースコードをコンパイルできます。さらに、言語の最新の機能はコンパイラソース自体ですぐに使用されるため、ビルドには常に最新バージョンのコンパイラが必要です。 1か月前には存在しなかった言語機能を使用します。この状況では、コンパイラーのコンパイル済みバージョンをほぼ確実にリポジトリーにチェックインし、最新の状態に保つ必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.