数ヶ月前、私はSubversionとGITを掘り下げましたが、がっかりしました。ソースコードは正常に処理されますが、他の側面は処理されません。たとえば、バージョン管理下のWebサイトでは、ファイル/ディレクトリの所有権、ファイル/ディレクトリの読み取り/書き込みアクセス、アクセス制御リスト、タイムスタンプ、データベースコンテンツを管理する必要があります。および外部リンク。1か月前のバックアップからリロードするのと同じくらい完璧な復帰を実行できるバージョン管理システムはありますか?
数ヶ月前、私はSubversionとGITを掘り下げましたが、がっかりしました。ソースコードは正常に処理されますが、他の側面は処理されません。たとえば、バージョン管理下のWebサイトでは、ファイル/ディレクトリの所有権、ファイル/ディレクトリの読み取り/書き込みアクセス、アクセス制御リスト、タイムスタンプ、データベースコンテンツを管理する必要があります。および外部リンク。1か月前のバックアップからリロードするのと同じくらい完璧な復帰を実行できるバージョン管理システムはありますか?
回答:
バージョン管理システムの役割について混乱しています。実行中のWebサイトのバックアップシステムになることは意図されておらず、また意図されていませんでした。静的コンテンツを管理する非常に優れた機能を備えているため、制御された方法で本番環境に移行できます。タグ付けと自動化されたチェックアウトを適切に使用することで、急速に変化するサイトでさえバージョン管理システムに保持できます。
バージョン管理システムは、先月のサイトの見た目から今日の見た目への移行方法を伝えることができます(少なくともソース管理下にあるコンポーネントの場合)。Webサイトを再構築するために必要なものすべてを含める必要があります(動的コンテンツを除く)。他の人が指摘したように、許可と所有権への変更はすべてスクリプト化し、そのスクリプトをバージョン管理に含める必要があります。
通常、Webサイトのアクセス許可は非常に簡単です。(基本的に、Webサーバーがすべてのコンテンツを読み取り、ほとんど書き込むことができないことを確認する必要があります。)Webサーバーのサブバージョン、および場合によってはgitで書き込み可能にする必要があるいくつかのディレクトリのディレクトリ所有権を除いて、権限を処理します。Webサーバーによって書き込み可能なディレクトリには、通常、Webサイトのソースとは別に管理される動的コンテンツ(Webサイトから作成および更新される)が含まれます。
Webサイトで複雑な権限とACLを持つWebサイトで作業するように頼まれた場合、Webサイトの管理に使用されるプロセスについて深刻な懸念があります。バージョン管理システムを実装してACLを移動することは、私が真剣に検討するソリューションの1つです。
ブログのエントリやコメントなどの動的コンテンツは、通常、サイトの構築に使用されるバージョン管理ではなく、データベースまたはその他のデータストアに含まれています。データストアは、コンテンツのバージョン管理を提供するように配置できます(このソフトウェアと同様)。多くのWikiは、バージョン管理システムを使用して改訂を追跡します。
編集:
私が使用している修正は、(a)バージョン管理がまったくない、(b)本番サイトがマスターサイト、(c)変更があるたびにアーカイブする、(d)ACLのようなジャンクを削除する、(e)インストールスクリプトは、ファイルのアクセス許可のような他のジャンクを修正します。
これらの問題は、サイトをバージョン管理システムにインポートし、プロセスを変更してマスターシステムがそのシステムを通じて更新されるようにすることで処理できます。(a)、(b)、および(c)はバージョン管理によって直接処理されます。リリースにタグを付けて、(c)の機能を向上させることができます。(d)通常、サイトを変更するのは展開システムのみである場合、問題はありません。サイトコンテンツにACLを必要としたことはありません。
(e)初期作成時および主要な変更時にのみ実行する必要があります。また、バージョン管理からサイトを更新し、頻繁に実行するスクリプトが含まれている場合があります。これらのスクリプトは、嫌悪感制御システムでサイトを維持する場合、非常に単純になる傾向があります。
しかし、なぜこれを行う一般的なシステムを誰も構築していないのでしょうか?
バージョン管理システムを使用する場合は必要ないためです。
バージョン管理システムはこのすべてを追跡できますが、追跡するものはありません。
CVSとSubversionはどちらも、使用している場合に追跡する必要があるものを追跡します。バージョン管理システムを使用していないため、追跡する必要があるものは追跡しません。バージョン管理システムを使用しているときに追跡する必要があるものを追跡します。
バージョン管理を使用してコンテンツを管理しているいくつかのサイトで働いてきました。ステージングサイト、展開の頻度、および更新の完全性に関する要件はすべて異なっていました。サイトのバージョン管理が満たされると、残りの要件は比較的簡単に満たすことができました。CVSとSubversionの両方のドキュメントには、可能な更新方法の提案があります。
バージョン管理されたコンテンツ内の特定の領域へのアクセスを制限するには、ACLが必要になる場合があります。しかし、私は信頼に基づいて仕事をする傾向があります。バージョン管理により、誰がいつ何をしたかを簡単に確認できます。ファイルを再フォーマットしない場合、誰がどの行をいつ追加したかを示すファイルの注釈付き履歴を簡単に取得できます。
あなたの場合に必要なのは構成管理ツールだと思います。私が使ったものは人形です。
引用:
ファイル/ディレクトリの所有権、ファイル/ディレクトリの読み取りおよび書き込みアクセスの管理、
私はそれを1行で行いました(ユーザーが存在することを確認し、ディレクトリが存在することを確認するなど)...
アクセス制御リスト、
これがWindows ACLの場合、Windows用の特定のCMツールがあります...
タイムスタンプ、
再び、操り人形スクリプトの1行のtouch unixコマンドでこれを行うことができます。
データベースの内容。
それは多くのフレームワークで構築されており、そうでなければすべてがそこにあることを保証するcronジョブですか?
および外部リンク。
それについて何も知らない。
もちろん、構成管理コードを作成した後、バージョン管理システムに配置する(または関連するシステムで取得する)こともできます。それらから逃れることはできません:-)。
すべてのデジタルドキュメントのすべての側面を管理する究極のバージョン管理システムがあります。ザナドゥと呼ばれ、ファイルシステムなどが一般的になる前から1960年にTheodor Holm Nelsonによって作成されました。したがって、理論的にはすべてが完全に解決されます。実際には、XanaduはNelsonが想定したように実装されたことはありませんが、Webやバージョン管理システムなど、より多くの特殊なシステムに影響を与えました。ネルソンの作品は今でも一読する価値があります-そして、彼らはすべての側面を管理する一般的なVCSが存在しない理由の質問に答えるかもしれません。