どのバージョン管理システムがすべての側面を管理できますか?[閉まっている]


17

数ヶ月前、私はSubversionとGITを掘り下げましたが、がっかりしました。ソースコードは正常に処理されますが、他の側面は処理されません。たとえば、バージョン管理下のWebサイトでは、ファイル/ディレクトリの所有権、ファイル/ディレクトリの読み取り/書き込みアクセス、アクセス制御リスト、タイムスタンプ、データベースコンテンツを管理する必要があります。および外部リンク。1か月前のバックアップからリロードするのと同じくらい完璧な復帰を実行できるバージョン管理システムはありますか?


12
代わりにバックアップシステムが必要なように見えますか?
マッケ

2
MacのOS XでWebサイトを実行することを検討しましたか?Time Machineは、おそらく現在利用できる最も単純なバックアップソリューションであり、必要に応じて非常に簡単にロールバックできます。

1
このトピックに真剣に興味がある場合は、ソースコードのバージョン管理システムを超える、ファイルシステムのバージョン管理とデータベースのバージョン管理の研究をご覧ください。
ヤコブ

scmが処理しないようなものを処理するためのスクリプトを少し書くことの何が問題になっていますか?そのようにして、必要なものを取得し、ソース管理下で取得します。
ニュートピア

回答:


44

バージョン管理システムの役割について混乱しています。実行中の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。
マッケ

2
+1それにもかかわらず、他の人があなたの答えから利益を得ることができるように、質問がされているのは良いことです。
オリバークレア

バージョン管理システムは、「OK、この他のコンピューターで、7月28日の時点でサイトを構築してください」と言う機能を提供することになっています。バージョン管理は、変更を追跡するため、バックアップよりも効率的です。それ以外の場合、はい、毎日のバックアップで問題ありません。
アンディキャンフィールド

はい、使用している修正は、(a)バージョン管理なし、(b)本番サイトがマスターサイト、(c)何か変更があるたびにアーカイブする、(d)アーカイブスクリプトがACLのようなジャンクを削除する、および( e)インストールスクリプトは、ファイルのアクセス許可のような他のジャンクを修正します。しかし、なぜこれを行う一般的なシステムを誰も構築していないのでしょうか?バージョン管理システムはこのすべてを追跡できますが、追跡するものはありません。
アンディキャンフィールド

+1:すばらしい答え。ただし、バージョン管理システムがそれらを追跡することはないので、追加することはできません。権限とユーザー名はホスト固有であり、その形式はシステム固有です。特に異なるオペレーティングシステムの場合、ツールがそれらを異なるホストに自動的に移植する方法はありません。
ジャン・ヒューデック

10

それらのすべてとそれらのどれも。

あなたの質問の親密な方法で、これらの詳細を直接管理するためにソース管理を取得することは悪い考えです。

ただし、bashスクリプト(* nix)またはpowershellスクリプト(Windows)を作成して、これらの目標の一部またはすべてを達成できます。このスクリプトはソース管理に保存できます。

次に、そのスクリプトをビルドアーティファクトの1つにして、展開の一部として実行できます。


この。すべてのソースを持つという考えは、VCSからソースを引き出して、完成した製品を構築するために使用できるということです。
Blrfl

2

私見バージョン管理システム自体は、そのように使用されることを意図していません。

しかし、私がしがちなのは、1つのビルドファイル/ PowerShellファイルを実行するだけでソース管理からバージョンを取得できることを確認することで、すべてが再び稼働します。

このためにあなたがする必要があります:

  • アプリがソース管理で依存するすべてのライブラリ
  • 環境を設定するビルドファイル
  • 環境の要件に関する指示(SQLサーバーのインストールをソース管理に配置したくない)

1

あなたの場合に必要なのは構成管理ツールだと思います。私が使ったものは人形です。

引用:

ファイル/ディレクトリの所有権、ファイル/ディレクトリの読み取りおよび書き込みアクセスの管理、

私はそれを1行で行いました(ユーザーが存在することを確認し、ディレクトリが存在することを確認するなど)...

アクセス制御リスト、

これがWindows ACLの場合、Windows用の特定のCMツールがあります...

タイムスタンプ、

再び、操り人形スクリプトの1行のtouch unixコマンドでこれを行うことができます。

データベースの内容。

それは多くのフレームワークで構築されており、そうでなければすべてがそこにあることを保証するcronジョブですか?

および外部リンク。

それについて何も知らない。

もちろん、構成管理コードを作成した後、バージョン管理システムに配置する(または関連するシステムで取得する)こともできます。それらから逃れることはできません:-)。


「タイムスタンプ-もう一度、パペットスクリプトの1行に1つのUNIXコマンドを挿入すると、これができる」という意味がわかりません。私のサイトでは、サイトバージョンを取得するために、サイトツリー全体をスキャンし、最新のファイルの日付と時刻を返します。バージョン管理の「チェックアウト」で、ファイルに「今」としてではなく、チェックイン時と同じタイムスタンプを付けたい。1つのUNIXコマンドでそれをどのように行いますか?
アンディキャンフィールド

もちろん、「タッチ」を探しています。これをチェックしてください:en.wikipedia.org/wiki/Touch_(Unix)。一般に、現在の時間をチェックアウトするときに適用されますが、何らかの理由で別のタイムスタンプが必要な場合は、これを行う方法です。
ディミトリオスミストリオティス

私は実際にあなたの質問の論理的根拠が好きでした。あなたは可能な限り自動化したいのです。それは「正しい方法」です。業界のもっと多くの人々が同じように考えていたらいいのに…
ディミトリオス・ミストリオティス

0

すべてのデジタルドキュメントのすべての側面を管理する究極のバージョン管理システムがあります。ザナドゥと呼ばれ、ファイルシステムなどが一般的になる前から1960年にTheodor Holm Nelsonによって作成されました。したがって、理論的にはすべてが完全に解決されます。実際には、XanaduはNelsonが想定したように実装されたことはありませんが、Webやバージョン管理システムなど、より多くの特殊なシステムに影響を与えました。ネルソンの作品は今でも一読する価値があります-そして、彼らはすべての側面を管理する一般的なVCS​​が存在しない理由の質問に答えるかもしれません。

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