読者です 読者をやめる 読者になる 読者になる

はわわーっ

はわわわわっ

[git] gitのお勉強 - その1

なんとなくgit使っていたけど、ちゃんと勉強しようと思った。その1と書いたけど続きがあるかはわからない。

使ってみる前にちょっと設定をしておく。

git config --global user.name "yomi322"
git config --global user.email "yomi322@gmail.com"

名前とメールアドレスの設定。あとは

git config --global color.ui auto

とやっておくと、カラフルで幸せな気分になれる。設定を確認する時は

% git config --list
user.name=yomi322
user.email=yomi322@gmail.com
color.ui=auto

とやればいいです。

とりあえず使う。gitで管理したいディレクトリでgit initする。

% mkdir git-test
% cd git-test
% git init
Initialized empty Git repository in /home/yomi/tmp/git-test/.git/

ファイルを追加するにはgit addしてからgit commitすればいい。試しにhello worldを出力するだけのhello.cを作ってみる。

% ls
hello.c
% cat hello.c
#include <stdio.h>

int main(void) {
    printf("hello, world\n");
    return 0;
}

% git add hello.c
% git commit -m "add hello.c"
[master (root-commit) 8870ac0] add hello.c
 1 files changed, 7 insertions(+), 0 deletions(-)
 create mode 100644 hello.c

git commit -mのあとの""の中がコミットメッセージになる。コミットログはgit logで確認できる。

% git log
commit 8870ac02fded072531ad820a38fe83473cf396b2
Author: yomi322 <yomi322@gmail.com>
Date:   Wed Apr 25 10:24:14 2012 +0900

    add hello.c

今の作業ツリーの状態がどうなっているのかを見るにはgit statusする。例えば、今の状態では

% git status
# On branch master
nothing to commit (working directory clean)

このように変更がないと言われる。試しにhello.cを変更してみる。

% cat hello.c
#include <stdio.h>

int main(void) {
    printf("git test\n");
    printf("hello, world\n");
    return 0;
}

% git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   hello.c
#
no changes added to commit (use "git add" and/or "git commit -a")

変更の中身は置いといて、modified: hello.cとなってファイルが変更されていることがわかる。ただ、no changes added to commitとあるように、この時点ではコミットしてもリポジトリに反映されない。gitでは作業ツリー、ステージングエリア、リポジトリという3つの場所でコードを管理している。作業ツリーは私たちが作業しているところで、リポジトリはコミットされたものを格納している。ステージングエリアはこの2つの間にあるもので、作業ツリーからコミットしたい変更だけを編集するために使われる。つまり、今の変更をコミットするにはgit addして変更をステージすればいい。

% git add hello.c
% git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   hello.c
#

これでコミットするとリポジトリに反映される。

% git commit -m "print git test"
[master 627eb3f] print git test
 1 files changed, 1 insertions(+), 0 deletions(-)
% git log
commit 627eb3fda3543ae43426f33e6e2ca93de55a9266
Author: yomi322 <yomi322@gmail.com>
Date:   Wed Apr 25 10:58:54 2012 +0900

    print git test

commit 8870ac02fded072531ad820a38fe83473cf396b2
Author: yomi322 <yomi322@gmail.com>
Date:   Wed Apr 25 10:24:14 2012 +0900

    add hello.c

ちょっと疲れたので、とりあえずここまで。