Git
Gitとは
ソースコードのバージョンを管理するツール。
Gitでバージョン管理することで何が嬉しいの?
- ファイル変更の履歴を保存できることで、任意の時点まで過去の状態に戻すことができる。
- いつ、誰が、どのファイルに、どのような変更を加えたかの履歴を残すことができる。
- チームでの共同開発を円滑に進めることができる。
Gitのバージョン管理
- 各時点でのファイルのスナップショットを撮る。
- 各コミットでは、それらスナップショットへの参照を格納する。
- もしファイルに変更がない場合は、再度スナップショットを撮るのではなく、以前の同一ファイルへのリンクを格納する。
- Subversionなどのバージョン管理ツールでは、ファイルの差分を管理してバージョン管理している。
3つの概念
ワークツリー
- 作業ディレクトリ。
- 実際にエディタでコード編集したりする場所。
- ワークツリーのファイルをからインデックスに追加(
add
)する。 - この時点でのファイルには、下記2種類が存在する。
- 追跡されているもの(
tracked
) - 追跡されていないもの(
untracked
)- 追跡されているファイル = 直近のスナップショット(
commit
)に存在したファイルのこと。
- 追跡されているファイル = 直近のスナップショット(
- 追跡されているもの(
- 追跡されているファイル(
tracked
)には、下記3つの状態が存在する。- 変更されていない(
unmodified
) - 変更されている(
modified
) - ステージされている(
staged
)
- 変更されていない(
インデックス(ステージ)
- ワークツリー内で変更を加えたファイルを一時的に保存しておく場所。
- インデックスのスナップショットをリポジトリに保存(
commit
)する。 - コミットは、機能追加や修正などの変更単位で作成するのがベストプラクティス。
- ベストプラクティス通りにコミットすれば、履歴がより細かい単位になるためロールバックしやすくなる(インデックスが存在する理由)。
リポジトリ
- スナップショットを保存する領域。
ローカルリポジトリ
- 開発者それぞれのローカル環境に作成し利用するリポジトリ。
- ローカルリポジトリのコミットをリモートリポジトリに送信(
push
)したり、リモートリポジトリのコミットをローカルリポジトリに取得(pull
)したりする。
リモートリポジトリ
- 複数人で共有するリポジトリ。
- ネットワーク上の専用サーバーや、GitHubなどのホスティングサービス上に作成し、運用する。
- ローカルリポジトリのバックアップとして機能する。