Gitの基礎練習

真似してみました。Windows XPコマンドプロンプトでgitの基本的なコマンドを動かしていきます。 gitを学び始めるきっかけにどうぞ。

元ネタ: http://www.hyuki.com/techinfo/svninit.html

ダウンロードとインストール

Windowsユーザは、「Git on MSys」を使うのがよさそうです。

http://code.google.com/p/msysgit/

Windowsと言いつつ、いきなりmingwというかUNIX shellな世界に突入してしまいますが、気にしないようにしましょう。ダウンロードは以下。

http://code.google.com/p/msysgit/downloads/list

私は Git-1.5.5-preview20080413.exe をダウンロードしてみました。とりあえず一番新しそうなやつを持ってきてインストールすればいいでしょう。

リポジトリ用のディレクトリを作ります

リポジトリ用のディレクトリC:\home\reposを作ります。

$ pwd
/c/home/
$ mkdir repos
$ cd repos
$ pwd
/c/home/repos

プロンプトやらコマンドやらファイルのセパレータやらが違うのは気にしないでください。微妙にWindowsじゃない感じ。

リポジトリを初期化します

はじめにリポジトリを初期化します。この初期化は、そのリポジトリを使う最初だけ行います。

$ git init
Initialized empty Git repository in .git/
 
$ ls -la
total 0
drwxr-xr-x    3 maki     Administ        0 May 22 01:19 .
drwxr-xr-x    4 maki     Administ        0 May 22 01:17 ..
drwxr-xr-x    6 maki     Administ        0 May 22 01:19 .git

新しいモジュールを作ってインポートします

新しいモジュールをリポジトリにインポートします。

ディレクトリとファイルを作成します

まずは作業場所を整え、readme.txtというファイルを作ります。

$ mkdir work
$ cd work/
$ mkdir myproject
$ cd myproject/
$ echo "This is readme file." > readme.txt
$ cat readme.txt
This is readme file.
カレントディレクトリ以下を新しいモジュールmyprojectとしてリポジトリにインポートします

インポートするリポジトリは、file:///C:/home/repos/myprojectのようにURLで指定することもできますが、ふつうのファイルのパスの方が扱いやすいのでそちらにしてみます。

とはいえ、ここは分散レポジトリなので、SVNとはやり方がだいぶ違います。
まず、カレントディレクトリをひとつの新しいリポジトリとしてgit initし、ファイルを追加します。

$ git init
Initialized empty Git repository in .git/
$ git add .
warning: LF will be replaced by CRLF in readme.txt

次に、先ほど作った中心となるリポジトリではなく、今作ったカレントディレクトリのレポジトリにコミットします。

$ git commit -a -m "Initial import."
Created initial commit 9739dfa: Initial import.
warning: LF will be replaced by CRLF in readme.txt
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 readme.txt

そして、そのカレントのレポジトリから、先ほどの中心となるレポジトリにpushします。

$ git push /c/home/repos master
Counting objects: 3, done.
Writing objects: 100% (3/3), 231 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To c:/home/repos
 * [new branch]      master -> master

これでインポートが完了しました。

練習なので作業場所を削除します
$ cd ..
$ rm -r myproject

ここまでで、myprojectディレクトリの内容はなくなりましたが、リポジトリにはmyprojectというモジュールがすでに登録されています。

cloneして作業開始

myprojectモジュールをcloneしよう
$ git clone /c/home/repos myproject
Initialized empty Git repository in c:/work/myproject/.git/
$ cd myproject/
$ ls
readme.txt
$ cat readme.txt
This is readme file.

確かにreadme.txtが取り出せています。

実は、ここには管理用のディレクトリ .git も隠し属性付きで作られています。

$ ls -la
total 1
drwxr-xr-x    3 maki     Administ        0 May 22 01:35 .
drwxr-xr-x    3 maki     Administ        0 May 22 01:35 ..
drwxr-xr-x    7 maki     Administ        0 May 22 01:35 .git
-rw-r--r--    1 maki     Administ       22 May 22 01:35 readme.txt
差分を確認します

readme.txtファイルに一行追加してから、「元にしたリビジョン(リビジョン1)」と「作業コピー」との差分を確認してみましょう。

$ echo "Nice to meet you." >> readme.txt
$ cat readme.txt
This is readme file.
Nice to meet you.
$ git diff
diff --git a/readme.txt b/readme.txt
index 050dbb1..f407ccf 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
 This is readme file.
+Nice to meet you.
warning: LF will be replaced by CRLF in readme.txt
コミットすると編集結果がリポジトリに反映されます

作業コピーに加えた修正は、コミットして、さらにpushしてはじめて中心のリポジトリに反映されます。コミットするときには、-mオプションで修正内容を書きます。

$ git commit -a -m "Add a greeting."
warning: LF will be replaced by CRLF in readme.txt
Created commit warning: LF will be replaced by CRLF in readme.txt
9aa769c: Add a greeting.
 1 files changed, 1 insertions(+), 0 deletions(-)
$ git push
Counting objects: 5, done.
Writing objects: 100% (3/3), 281 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To c:/home/repos/.git
   9739dfa..9aa769c  master -> master

とりあえずここまで。

追記: id:takahashim:20080523#p2 に続きます。