ちなみに

火曜日の空は僕を押しつぶした。

Git入門(さいしょのいっぽ編)

最近Gitに夢中である。ので世に広めるためにメモ程度にエントリーを残すことにします。
内容は結構あやふやなので間違ってたりするかもしれません。つっこんでいただけるとvery感謝しながら修正します。
前提として環境はDebian sid,etchかMac OSX/Leopardとします。

Gitとは何か?

Git(ジット、もしくはギット)はLinux kernelのソースコードを管理するためにLinus Torvaldsが開発したオープンソースのバージョン管理システムです。
巨大なプロジェクトを素早く効率的に扱えるようにデザインされており、MercurialやBazzarの様な分散型のSCM(Source Code Management)に分類されます。

公式サイト
Git

インストール

etchのgit-coreパッケージではGitのバージョンが1.4系列*1なので、1.5系列を使うためにbackportsを使います。まず、404 Not Foundを参考にsource.listにbackportsを追加したあと、aptitudeでインストールします。
DebianではgitのパッケージがGit本体とコアの機能のみのgit-coreとその他の機能のパッケージでわかれています。git-coreパッケージ以外に必要なものは入れておくといいです。
今回はgit-cvs、git-svn、git-emailを入れることにします。

$ sudo aptitude install -t etch-backports git-core git-cvs git-svn git-email

これでインストールは完了です。

  • Debian sidの場合

sidのパッケージは1.5系列なのでそのままインストールできます。

$ sudo aptitude install git-core git-cvs git-svn git-email

Macportsにパッケージがあるのでそれを入れます。
$ sudo port install git - mobcoさんの指摘により訂正('08/05/14)

$ sudo port install git-core

以上、簡単。mac++

とりあえずの設定

名前とメールアドレスを設定しておきます。
$ git congig --global user.name 'your name' - ujihisaさんの指摘により訂正('08/05/15)

$ git config --global user.name 'your name'
$ git config --global user.email [email protected]

すると~/.gitconfigに以下の様に書き込まれます。

[user]
  name = your name
  email = [email protected]

他の設定項目については、'man git-config'で調べられます。

Gitのmanページはコマンドごとに別れていて、例えば'git init'コマンドについて調べる場合は'man git-init'で調べられます。*2

プロジェクトのインポート

以下の手順でmyprojプロジェクトを開始します。

$ mkdir myproj
$ cd myproj
$ git init
Initialized empty Git repository in .git/

これでmyprojディレクトリの中に.gitというディレクトリが作成され、git関連のものはここに置かれるようになります。
すでにあるディレクトリ内でも'git init'することによってgitリポジトリに取り込むことが可能です。

プロジェクトの状態を知る

myprojプロジェクトの状態を見るには'git status'が使えます。

$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

現在はまだ何もファイルがないのであまり見るべきところはないのですが、ここで注目は'On branch master'の部分。これは現在のBranchが'master'であることを示しています。これは後ほどBranchの話をするとき詳しく書きます。

ファイルを追加してみる

myprojプロジェクトにはまだ何もファイルがありません。これではつまらないので何かファイルを追加しましょう。
今回は'Hi, git!'と表示するプログラムをRubyで書きました。

$ vim greet.rb
(編集)
$ cat greet.rb

puts 'Hi, git!'

ではプロジェクトの状態を見てみましょう。

$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       greet.rb
nothing added to commit but untracked files present (use "git add" to track)

内容が前回と変わりました。'Untrackd files'という項目が増えてますね。これはgitが追跡していないファイルのリスとです。'git add'を使ってコミットされるファイルに含めなさいと書いてあるので従います。*3

$ git add greet.rb
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file: greet.rb
#

これでgreet.rbがコミット待ちとなりました。ファイルの追加なので'new file'となっており、変更した場合は'modified'になります
ディレクトリ下のすべてのファイルをaddするには'git add .'とします。諄いようですが詳しくは'man git-add'で。

コミットする

では'greet.rb'をコミットしてみましょう。

$ git commit greet.rb -m 'initial commit'
Created initial commit db58434: initial commit
 1 files changed, 2 insertions(+), 0 deletions(-)
 create mode 100644 greet.rb
$ git status
# On branch master
nothing to commit (working directory clean)

オプション'-m'以下はコミットメッセージとなっています。今回は初めてのコミットなので'initial commit'としましたが、通常は変更の内容を書きます。このオプションをつけなかった場合はエディタが開いて、そこでコミットメッセージを書くことになります。変更したファイルをすべてコミットする時は'-a'オプションをつけます。

長いので分割します。次回はこの続きから。

('08/05/14 追記: MacでのGitパッケージをgitとしていたのをgit-coreに修正 thx mobcovさん)
('08/05/14 追記: インストールの項目でDebianのsidとetchを勘違いしてたので修正)
('08/05/15 追記: git configをgit congigにしていたのを修正 thx ujihisaさん)


>>Git入門(ちょっとすすんだつかいかた編) - チナミニ

*1:1.4系列だとここで説明する機能が一部使えない

*2:git initはgit-initのラッパ

*3:.git/indexに追加される