0
0

バージョン管理ツール(VCS)とGitについて

Posted at

記事の目的

  • Pro Gitを基に記事を作成しました。
  • 後ほど記事の改修しやすいように元の記事から分離しました。
  • バージョン管理システムとはなんぞやGitとはなんぞやをコンセプトに書きました。

本文

1.バージョン管理(VCS)

  • そもそもVCSとは
    一つのファイルやファイルの集合体に対して時間とともに加えられていく変更を記録するシステムで、後で特定バージョンを呼び出すことができるようにすること。

  • できること
    ・ファイルを以前の状態に戻す。
    ・プロジェクト丸ごとを以前の状態に戻す。
    ・過去の変更履歴を比較
    ・問題が起こっているかもしれないものを誰が最後に修正したかを確認できる。
    ・誰がいつ問題点を混入させたかを確認したり。
    ・ファイルを失ったり、やっていることがメチャクチャになっても普通は簡単に復活させられる。
    などなど
    しかも、これらのことにかかるオーバーヘッドは僅かである。

  • ローカルバージョン管理システム
    ・有名なVCSツール:RCS
    ・多数の人々が使っているバージョン管理手法は、他のディレクトリにファイルをコピーする。
    特徴:シンプルで分かりやすいがすごく間違いが起こりやすい。
    問題点:うっかり間違ったファイルに書き込んだり、上書きするつもりのないファイルを上書きしてしまったり。
    例:

: ls
新しいファイル, 新しいファイル2, 真新しいファイル,
真新しいファイル2, 真新しいファイル2-1

・解決法:ローカルのVCSの開発
バージョン管理下のファイルに対する全ての変更を保持するシンプルなデータベースによるもの
問題点:他のシステムを使う開発者と共同作業ができない(もしくは面倒臭い)。バックアップをとってなかったらパソコンが壊れたら全て失うリスクあり。

  • 集中バージョン管理システム(CVCS)
    ・有名なシステム:CVS, Subversion, Perforceなど
    ・ローカルとの比較:他のシステムを使う開発者と共同作業ができる。
    ・特徴:バージョン管理されたファイルを全て持つ一つのサーバーと、その中心点からファイルをチェックアウトする多数のクライアントでなっている。長年の間、バージョン管理の標準だった。
    ・利点:ローカルと比べて、プロジェクトの他の皆が何をしているのか、全員がある程度わかる。管理者は、誰が何をできるのかについて、きめ細かくコントロールできる。一つのCVCSを管理するだけなので、全てのクライアントのローカル・データベースを取り扱うより、ずっと簡単。
    ・マイナス面:中央サーバーがダウンすると共同作業ができなくなる。ローカルVCSと同じく壊れたら全て失うリスクあり。

  • 分散バージョン管理システム(DVCS)
    ・有名なシステム:Git, Mercurial, Bazaar, Darcs
    ・特徴:CVCSの良いところを継ぎ、マイナス面を改善した。
    ・一は全、全は一みたいな感じ
    ・クライアントは、ピックアップするのみでなくてリポジトリ全体をミラーリングする。
    つまり、サーバーをコピーすることになるので実質バックアップをとっている。
    ・階層モデルなどの、集中システムでは不可能な幾つかのワークフローが構築できるようになった。

2.Gitとは

  • Gitざっくり略史
    Linux開発コミュニティが今まで使っていたDVCS(BitKeeper)が無課金で使えなくなったから作った。
    Gitは、DVCSを扱っていた教訓を元に作った。

  • Gitシステム開発時の目標
    ・スピード
    ・シンプルな設計
    ・ノンリニア開発(数千の並列ブランチ)への強力なサポート
    ・完全な分散
    ・Linuxカーネルのような大規模プロジェクトを(スピードとデータサイズで)効率的に取り扱い可能

  • 特徴
    データについての考え方:スナップショットで、差分ではない
    ネットワークについて:ほとんど全ての操作がローカル
    履歴について:完全性を持つ。転送中に情報を失う、もしくは壊れたファイルを取得することはない。
    データベース操作:通常はデータを追加するだけ
    三つの状態:コミット済み、修正済み、ステージ済み(Working Directory, Ataging Area, .git directory(Repository))

  • 通常ワークフロー
    1.作業ディレクトリのファイルを修正します。
    2.修正されたファイルのスナップショットをステージング・エリアに追加して、ファイルをステージします。
    3.コミットします。

3.Gitと他VCSの違い

Gitは、他のVCS(CVS, Subversion, Perforce, Bazaar等々)とは大きく異なっている。

Git
データについての考え方 ミニ・ファイルシステムのスナップショットの集合 情報をファイルを基本とした変更のリストとして格納
スピード ほぼローカルだから早い ネットワーク遅延損失してるからモッサリ
データの保証 情報ロスなし あるらしい
データ作業 追加するだけ 複雑な操作があるらしい

参考文献

Gitについてのリンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0