バージョン管理システムについて

こんにちは!来週、OTUSは「GITの使用と構成に関するスーパーワークショップ」を開始しますこれが私が今日の出版物に捧げることに決めたものです。










前書き



バージョン制御システムを編成する目的とさまざまな方法について説明することを提案します。



バージョン制御システム



バージョン制御システムは主にツールであり、ツールは特定のクラスの問題を解決するように設計されています。したがって、バージョン制御システムは、

ファイルまたはファイルのセットへの変更経時的記録し、後で特定のバージョンに戻すことができるシステムです。特定のファイルセットを柔軟に管理し、必要に応じて特定のバージョンにロールバックしたいと考えています。ファイルへの特定の変更を元に戻したり、削除をロールバックしたり、誰が何かを変更したかを確認したりできます。通常、バージョン制御システムはソースコードの保存に使用されますが、これは必須ではありません。これらは、あらゆるタイプのファイルを保存するために使用できます。



異なるバージョンのファイルを保存するにはどうすればよいですか?人々はすぐにバージョン制御システムのようなツールに来ませんでした、そして彼ら自身は非常に異なっています。提案された問題は、古き良きコピーペースト、ローカル、集中型、または分散型のバージョン制御システムを使用して解決できます。



コピーペースト



よく知られている方法をこの問題に適用すると、次のようになります。ファイルにfilename_ {version}のパターンで名前を付けます。おそらく、作成時間または変更時間を追加します。



この方法は非常に単純ですが、さまざまなエラーが発生しやすくなります。誤って間違ったファイルを変更したり、間違ったディレクトリからコピーしたりする可能性があります(結局のところ、これがこのモデルでのファイルの転送方法です)。



ローカルバージョン制御システム



バージョン制御システムの開発における次のステップは、ローカルバージョン制御システムの作成でした。それらは、ファイルへのすべての変更の記録を保持する最も単純なデータベースでした。



このようなシステムの一例は、1985年に開発されたRCSバージョン制御システム(最後のパッチは2015年に作成された)であり、バージョン制御を維持しながらファイル(パッチ)の変更を保存します。これらの変更のセットを使用すると、ファイルの任意の状態を復元できます。RCSにはLinuxが付属しています。



ローカルバージョン制御システムは、その前に設定されたタスクを適切に解決しますが、その問題は主なプロパティであるローカリティです。集合的な使用を目的としたものではありません。



一元化されたバージョン制御システム



一元化されたバージョン制御システムは、ローカルバージョン制御システムの基本的な問題を解決するように設計されています。



このようなバージョン制御システムを編成するために、ファイルのすべてのバージョンを含む単一のサーバーが使用されます。このサーバーにアクセスするクライアントは、この一元化されたリポジトリから取得します。一元化されたバージョン制御システムの使用は、長年にわたって標準となっています。これらには、CVS、Subversion、Perforceが含まれます。



これらのシステムは、サーバーが1つしかないため、管理が簡単です。しかし同時に、一元化されたサーバーの存在は、このサーバー自体の形で単一の障害点の出現につながります。このサーバーが無効になっている場合、開発者はファイルをダウンロードできません。最悪のシナリオは、サーバーの物理的な破壊(またはハードディスクのクラッシュ)であり、これはコードベースの損失につながります。



SVNの流行が過ぎ去ったという事実にもかかわらず、時には逆のコース、つまりGitからSVNへの移行があります。重要なのは、SVNでは選択的なチェックアウトが可能であり、サーバーから一部のファイルのみをダウンロードする必要があるということです。このアプローチは、後で説明するモノリポジトリを使用するときに人気が高まっています。



分散バージョン制御システム



分散バージョン制御システムは、単一の障害点を排除するために使用されます。これらは、クライアントが関心のある特定のファイルをクライアントにダウンロードするのではなく、リポジトリ全体を自分自身でダウンロードすることを意味します。リポジトリのコピーが失われた場合でも、開発者のコ​​ンピュータから復元できるため、コードベースが失われることはありません。各コピーは、データの完全なバックアップです。



すべてのコピーは等しく、互いに同期させることができます。このアプローチは、マスターマスターレプリケーションと非常によく似ています(実際にそうです)。



このタイプのバージョン制御システムには、Mercurial、Bazaar、Darcs、およびGitが含まれます。最後のバージョン制御システムについては、以下で詳しく説明します。



Gitの歴史



2005年、バージョン管理会社のBitKeeperはLinuxカーネルコミュニティとの関係を断ち切りました。その後、コミュニティは独自のバージョン制御システムを開発することを決定しました。新しいシステムの主な価値は、完全な分散化、速度、シンプルなアーキテクチャ、非線形開発の優れたサポートです。



結論



バージョン制御システムの編成方法を検討し、これらのシステムに割り当てられたタスクを解決するためのオプションについて説明し、それぞれの長所と短所について話し、Gitバージョン制御システムの歴史に精通しました。






All Articles