gitの基本概念
gitの基本概念
参考文献
はじめに
この記事は入門Gitをテキストとした学習した記録です。
この記事は上記参考文献を読んでの筆者の解釈なので内容についての誤った記述がある可能性があります。
とても面白い本なのでおすすめです。下記内容について詳しく書かれています。
リビジョン
リビジョンとはある時点でのプロジェクト(ファイル群)の状態のこと。コミットとも呼ぶ。
コミット
コミットは上記の意味に加えて、あるリビジョンに基づいてそれに変化を加えて別のリビジョンを作ることを意味する動詞としても使われる。
ブランチ
ブランチとは開発の文脈に応じてコミットを指し示すポインターである。そのポインターが向けられているコミットがその文脈における先頭と見なされる。
ワークツリー
リビジョンに記録されている内容はオブジェクトによって呼び出すことができる。 リビジョンではファイルは圧縮されて管理されているのでそれを編集・閲覧するにはファイルシステムの特定の領域に展開する必要がある。その領域のことをワークツリーと呼ぶ。リビジョンを選択しワークツリーに展開することをcheckoutという。ワークツリーでの作業は下記のようになる。
- ワークツリーにリビジョンを展開する(checkout)。
- ワークツリーでファイルの編集を行う。
- 新しいリビジョンを作る(commit)。同時にブランチのポインターが新しいリビジョンに向けられる。
3-wayマージ
マージとはあるブランチのリビジョンに別のブランチのリビジョンを統合する作業のこと。
このマージに用いられるのが3-wayマージと呼ばれるアルゴリズムである。
feature/A
とfeature/B
をマージする場合下記のような操作が行われる。
- 二つのブランチで共通するコミットのうち最新のもの(common ancestor)を選ぶ。
- 1と
A
との差分(変更点)を算出する。 - 1と
B
との差分(変更点)を算出する。 - 2と3を比較しそれぞれの変更点を取り入れて状態を決定する。
4での状態の決定方法は下記のようになる。
- 同一変更点はそれを採用する。
- 片方のみ変更している部分はその変更を採用する。
- 上記以外の変更点は競合(conflict)扱いとする。
A
とB
のそれぞれの変更がどのように行われたか(コミット履歴の時間や方法や理由)は考慮しない。それらの最新のコミットとcommon ancestorのみを見て状態を決定する。