ぱそくま ろご
linux > Git > Gitとは?

Gitとは?

Gitとは?

Gitとは、ファイルの修正履歴(いつ、誰が、何を)を管理するバージョン管理システムです。 例えば、あるソフトを開発します。その後、何回か修正を加えます。この修正毎の履歴を管理するためのシステムがバージョン管理システムです。 Gitはバージョン情報をリポジトリという形式で保存します。 リポジトリはプロジェクト直下のサブディレクトリ「.git」の中に保管されます。

SVNユーザーの方へ

Gitと同様なバージョン管理システムとして有名なのはSVNです。 ただし、SVNと概念がかなり異なるのでGitを覚えるときはSVNを全て忘れたほうがよいと思います。 (commitはまだしも、addやcheckout等々、わけがわからなくなります。)



Gitの特徴

Gitの特徴的なものと言えるのが、

  • 分散リポジトリー形式
  • ステージングとコミット
  • ブランチの構造

の3つかと思います。

分散リポジトリー形式

GitはSVNとは違い全てのマシンにリポジトリがあります。この形式を分散リポジトリといいます。 分散リポジトリのうち、自分のマシンにあるものをローカルリポジトリ、それ以外をリモートリポジトリといいます。 ローカルリポジトリは「git init」で作成するか、リモートリポジトリから「git clone」を使って作成します。 リモート専用の公開リポジトリは「git init --bare」で作成します。

分散リポジトリのイメージ

よく「origin」と「mastar」と聞くことがあるかと思います。 この「orginal」はリモートリポジトリのURLの別名で、Gitがデフォルトでこの名前をつけます。 mastarはブランチ名です。

例:git config --list

[paso ~] git config --list
user.name=paso kumatarou
user.email=paso@pasokuma.net
core.editor=emacs
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=http://192.168.1.1/git/dev1.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

ステージングとコミット

Gitでファイルの履歴ができるまでの流れは以下の通りです。 (SVNユーザーは概念がかなり違うので注意してください。)

  1. Gitで管理するファイルを作成する。
  2. 作成したファイルのスナップショットをINDEX領域に登録する。(ステージング)
  3. ステージングされたファイルをリポジトリに登録する。(コミット)

「ステージング」は「git add」コマンドを使い、「コミット」は「git commit」コマンドを使って行います。 コミットを行うと1つの履歴データが作成されます。

なお、リポジトリに登録済みのファイルを修正した後も上記2と3を行う必要があります。 ですので、修正したファイルも「git add」をしないと、ステージングされません(=コミット対象外です)。 注意点は「git add」されたタイミングでINDEX領域にそのファイルのコピー(スナップショット)が作成されるので、 もしも、「git add」した後にファイルを修正した場合は、再度「git add」が必要です。

ステージングとコミットのイメージ

ブランチ

一般的なバージョン管理のブランチとは1つの開発の流れ(ライン)を指します。 新しくシステムを開発した場合は開発ラインは大抵1つでしょう。 ただし、その後は開発ラインが別れる可能性があります。 例えば、新規機能追加用の開発ラインと既存のバグフィックスの開発ラインなどです。 この1つ1つの流れをブランチと呼びます。 Git上ではブランチは連続したコミットオブジェクト(git commit実行に生成されるもの)になります。 SVNなどはブランチは作業領域的な意味合いがあるかと思いますが、Gitではコミットオブジェクトを指す単なるポインタです。 コミットオブジェクトは自分の親のコミットオブジェクトの情報を持っていますので、連続性が保たれます。 よって、マージ作業などがとても楽で、ポインタの付け替えのみとなります。