2


0

「派生」ファイルをバージョン管理しますか。

バージョン管理システムへのオンラインインタフェースを使用することは、コードの最新バージョンの公開された場所を持つための良い方法です。 例えば、私はLaTeXパッケージをここに持っています(それは変更が実際にうまくいくことが確認されるときはいつでもCTANにリリースされます):

パッケージ自体は単一のファイル(この場合はpstool.tex)から派生し、処理されると、ドキュメント、readme、インストーラファイル、およびLaTeXで使用されるパッケージを構成する実際のファイルが生成されます。

このファイルをダウンロードしたいユーザーが簡単にできるように、マスターファイルpstool.texだけでなく、上記のすべての派生ファイルをリポジトリ自体に含めます。 つまり、パッケージファイルpstool.styはマスターファイルの生成されたサブセットなので、コミットするたびに変更回数が2倍になります。

これはバージョン管理の倒錯ですか?

'' '' '

@https://stackoverflow.com/questions/39154/do-you-version-derived-files#39157 [Jon Limjap]は良い点を挙げた。

_ ダウンロードサーバーとしてバージョン管理に頼るのではなく、生成したファイルを他の場所にダウンロードして公開する方法はありますか。 _

それが、この場合の問題の核心です。 はい、パッケージのリリース版は他のところから入手できます。 そのため、生成されていないファイルのみをバージョン管理する方が実際的には意味があります。

一方、@https://stackoverflow.com/questions/39154/do-you-version-derived-files#39179 [Madir]のコメント:

_ 現実的で繰り返される利便性はコストを上回り、それは舞台裏で負担されます _

また、ユーザーがバグを見つけて私がすぐにそれを直すと、彼らはリポジトリに行き、「インストール」ステップを実行しなくても作業を続けるのに必要なファイルをつかむことができます。

そして、これが私の特定のプロジェクト群にとってのより重要なユースケースであると私は思います。

5 Answer


4


リポジトリ自体に含まれているスクリプトを使用して自動的に生成される可能性があるファイルはバージョニングしません。 これは、チェックアウト後に、これらのファイルをワンクリックまたはコマンドで再構築できるためです。 私たちのプロジェクトでは、これを可能な限り簡単にし、それによってこれらのファイルのバージョン管理の必要性を防ぐようにしています。

1つのシナリオ私は、出力を生成するために必要なツールが利用できないかもしれないプロダクション環境(または非開発環境)での使用のために製品の特定のリリースを「タグ付けする」場合にこれが役に立つかもしれないところに想像できます。

私達はまた私達のプロダクトの解放された版とのアーカイブを作成し、アップロードできる私達の造りの原稿でターゲットを使用する。 これは本番サーバーにアップロードすることも、製品のユーザーがダウンロードするためのHTTPサーバーにアップロードすることもできます。


2


小規模システムのASP.NET開発にはTortoise SVNを使用しています。 ほとんどのコードはASPXとして解釈されますが、手動のコンパイルステップによって生成される約12個のバイナリDLLがあります。 これらのソースコードを理論的にバージョン管理することはあまり意味がありませんが、開発環境から本番システムに正しくミラーリングされるようにするのは確かに便利です(ワンクリック)。 また、災害時には、前のステップへのロールバックはSVNでのワンクリックです。

それで私はその弾丸をかみ砕いてそれらをSVNアーカイブに含めました - 現実的で繰り返される便利さは舞台裏で支えられている費用を上回ります。


1


必ずしもそうとは限りませんが、ソース管理のベストプラクティスでは、明白な理由から、生成されたファイルを含めないことをお勧めします。

ダウンロードサーバーとしてバージョン管理に頼るのではなく、生成したファイルを他の場所にダウンロードして公開する方法はありますか。


1


通常、派生ファイルはバージョン管理に保存しないでください。 あなたのケースでは、派生ファイルを含むtarballを作成したリリース手続きを構築することができます。

あなたが言うように、派生ファイルをバージョン管理下に置くことはあなたが対処しなければならないノイズの量を増やすだけです。


0


場合によっては、sysadminタイプのユースケースであり、生成されたファイル(スクリプトから作成されたDNSゾーンファイルなど)自体が本質的に重要であり、リビジョン管理は線形監査証跡よりも優先されます。分岐タグ付きソース管理。