1.1 使い始める - バージョン管理に関して
バージョン管理の変遷
- ローカル CVS: Local VCS(Version Control System)
- バージョン管理下のファイルに対する全ての変更を保持するデータベース
- 例: RCS
- リビジョン間のパッチ(ファイル間の差分)の集合を特殊なフォーマットでディスク上に保持する
- パッチの積み上げにより任意時点ので状況を再現可能
- 集中バージョン管理システム: CVCS(Concurrent Versioning System)
- 複数人と共同で作業するために開発された管理システム
- 例: CVS, Subversion, Perforceなど
- 関係性:
- Central VCS Server:
- バージョン管理されたファイルをすべて持つ中央サーバー
- Client Server:
- Central Serverからファイルをチェックアウトする
- Central VCS Server:
- 問題点:
- Central Server が単一障害点
- 複数人と共同で作業するために開発された管理システム
- 分散バージョンシステム: DVCS(Distributed Version Control System)
- クライアントがリポジトリ(管理対象のファイル、ディレクトリ、更新履歴などの一軍)全体をミラーリングする
- 例: Git, Mercurial, Bazaar, Darcs
- 各クライアントが実質的にバックアップとなる
- クライアントがリポジトリ(管理対象のファイル、ディレクトリ、更新履歴などの一軍)全体をミラーリングする
1.3 使い始める - Gitの基本
スナップショットで、差分ではない
- Subversion:
- 変更部分のみ保存し計算する方式
- 特定バージョンは差分を積み上げて計算
- Git:
- スナップショット方式
- 変更ファイル全体を新規保存
- 未変更は参照
- 特定バージョンを直接参照できる
- スナップショット方式
ほとんど全ての操作がローカル
- 操作においてネットワーク上のcfnオンポー年ととの通信を必要としない
- 例: 履歴を閲覧するために、Gitはサーバーに履歴を取得しに行って表示する必要はない
Gitは完全性を持つ
- ファイルの内容もしくはGit内のディレクトリ構造をもとに、SHA-1ハッシュが計算される
- Gitは全てのオブジェクト(blob、tree、commit)を保存する際、内容からSHA-1ハッシュを計算
24b9da6552252987aa493b52f8696cd6d3b00373Gitは通常はデータを追加するだけ
- Gitで行動するとき、“データを消去”することは難しい
三つの状態
-
修正済
- ファイルに変更を加えていますが、データベースにそれがまだコミットされていないことを意味する
-
ステージ済:
- 次のスナップショットのコミットに加えるために、現在のバージョンの修正されたファイルに印をつけている状態を意味する
-
コミット済:
- ローカル・データベースにデータが安全に格納されていることを意味する
-
登場する要素:
- Gitディレクトリ(.git directory(Repository))
- ファイルやディレクトリなどのオブジェクトの要約とオブジェクトのデータベースがあるところ
- Gitの最も重要な部分で、他のコンピューターからリポジトリをクローンしたときに、コピーされる
- 作業ディレクトリ(Working Directory)
- プロジェクトの一つのバージョンの単一チェックアウト
- これらのファイルはGitディレクトリの圧縮されたデータベースから引き出されて、利用するか修正するためにディスクに配置される
- ステージング・エリア(Saging Area)
- 次のコミットに何が含まれるかに関しての情報を蓄えた一つのファイル
- 「インデックス」と呼ばれることもある
- Gitディレクトリ(.git directory(Repository))
1.6 使い始める - 最初のGitの構成
Git は、git configと呼ばれるツールから設定変数を取得、制御する
Git の設定変数は以下の3つの異なる場所に格納されうる。
また、3→2→1の順で設定値は上書きされる。(3. .git/configが優先される)
-
/etc/gitconfigファイル
- システム上の全てのユーザーと全てのリポジトリに対する設定値を保持
--systemオプションを指定して設定
~/.gitconfigor~/.config/git/configファイル- 特定のユーザーに対する設定値を保持
--globalオプションを指定して設定
- 現在使っているリポジトリのGitディレクトリにある
.git/config:- 特定の単一リポジトリに対する設定値を保持
個人の識別情報
Gitインストール時に最初にすべきことは、ユーザー名とEmailアドレスを設定すること
作成するコミットに永続的に焼き付けられることになる
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
設定の確認
設定を確認したい場合は、その時点でGitが見つけられる全ての設定を一覧するコマンドである git config --list を使う
$ git config --list
user.name=John Doe
user.email=johndoe@example.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...
//特定のキーを指定する場合
$ git config user.name
※ 1~3の異なる設定ファイルから同一のキーを読み込むため、同一のキーが複数回表示されることになる
※この場合、Githはそれぞれの同一のキーに対して最後の値を使用する
# 2.2 Git の基本 - 変更内容のリポジトリへの記録
3.1 Git のブランチ機能 - ブランチとは
ブランチとは
Git にコミットすると、Gitはコミットオブジェクトを作成して格納する
このオブジェクトには、以下の情報が含まれる
- ステージしたスナップショットへのポインタ
- 作者、メッセージのメタデータ
- コミットの直接の親となるコミットへのポインタ
コミットオブジェクトの情報が含まれる
- tree オブジェクト
- commitオブジェクト
- blobオブジェクト