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

たぶん週刊「今週の進捗」

1週間に勉強したことや実装したことをネタに、週に1回(主に土日に)更新していく予定です。「多分」なので、臨時休刊があってもご海容ください。

Git の何たるかを復習する

ろくにプログラムも書かないのに Git に手を出してみた時期が俺にもありました。
しかし何とまぁ私の脳みそメモリの揮発性の高いこと、
ちょくちょく使ってないと何がなんだかサッパリ忘れてしまいます。

とりあえずまた忘れたときに効率よく思い出せるよう備忘録としてブログに書いておこう。

基礎的な用語

そもそもコミットだのリビジョンだのという用語の意味から理解が曖昧なので。

リビジョン
プロジェクトを以前の状態に復元したり、変更履歴を調べるための、各変更終了時点でのプロジェクトの状態とリビジョン間の変更に関する情報の記録
コミット
「リビジョン」と同義だが、「コミットする」の形で「前のリビジョンに基いて、変更を加えたプロジェクトに合わせてリビジョンを更新する」という意味で動詞化して使うこともある
リポジトリ
プロジェクト開始以来の全リビジョンを記録するデータベース
ワークツリー
作業をするディレクトリ

大雑把な使い方

なお、飽くまで自分の環境で使う上での備忘録なので、
「俺のと違うぞ!」とつっこまれても我関せず。

リポジトリを初期化する
$ mkdir hoge
$ cd hoge
$ git init

とすると、hoge ディレクトリ直下に .git ディレクトリができる。
この .git ディレクトリがリポジトリになり、
つまるところプロジェクトの全リビジョンが記録される。
元々のディレクトリは、このリポジトリに付属した作業ディレクトリ、ワークツリーになる。

コミットしてみる

早速コミットしてみます。

class HelloWorld{
	public static void main(String[] args){
		System.out.println("Hello World!!");
	}
}

とりあえずこんな他愛もないプログラムHelloWorld.javaがワークツリーにあったとします。

$ git add . #版管理の対象とするファイルの追加
            #「.」で、カレントディレクトリ以下全ファイルを指定
$ git commit -m "fuga" #コミットする。 「-m "***"」で、コミット時に記録するログメッセージの指定

という具合に、版管理するファイルをaddで指定してcommit。

[master (root-commit) *******] fuga
 1 file changed, 5 insertions(+)
 create mode 100644 HelloWorld.java

これで初めてのコミット一丁上がり。

ファイルを変更してコミット

先ほどのプログラムをこう変更します。

class HelloWorld{	//HelloWorldクラスの宣言
	public static void main(String[] args){
		System.out.println("Hello World!!");	//「Hello World!」と出力
	}
}

あってもなくても変わらんようなコメント書いただけじゃんとか言わない。

で、コミットする前に

$ git diff

と入力すると、

diff --git a/HelloWorld.java b/HelloWorld.java
index 7469f8b..a751e0d 100644
--- a/HelloWorld.java
+++ b/HelloWorld.java
@@ -1,5 +1,5 @@
-class HelloWorld{
+class HelloWorld{      //HelloWorldクラスの宣言^M
        public static void main(String[] args){
-               System.out.println("Hello World!!");
+               System.out.println("Hello World!!");    //「Hello World!」と出力^M
        }
 }

と、このように最後のリビジョンからのファイルの変更箇所が表示されます。*1
(厳密には「gitに記録をリクエストしていない変更箇所」の模様)
で、コミットするには先ほどと同様に

$ git add .

とコミットのリクエストを送ってから
(どうも自分はここで躓いていたようだ…)

$ git commit -m "コメントの追加"
[master 6ecbc48] コメントの追加
 1 file changed, 2 insertions(+), 2 deletions(-)

でコミット完了。

余談

Git Hub も始めてみました。
始めたっていうかずっと前に登録してそのまんま放置してたのを
また手を付けたってだけなんですが。
よければどうぞ。

なお、この記事は個人の備忘録として書いたようなものなので
あまりアテにしないように…。

追記(2014/01/05)

長々とGit Bashを使うことを前提に進めてきたわけですが、
なんとかGit Bashから日本語でコミットできるように
いろいろいじくった結果、
vimがぶっ壊れてしまったのでGit GUIからコミットするようになってしまった。
こっちならそんなに苦労しなくても日本語でコミットできるみたいだし、なんだったのか。

Github を Windows で利用する(Git GUI編): 小粋空間

*1:「^M」とか表示されてるのはUNIXにShiftJIS 改行コードなしでうpった後やり直した名残