ホーム > 技術情報 > Gitの基礎練習 | 検索 | 更新情報 |
|
バージョン管理ツールGitの基礎練習です。
Windows XPのコマンドプロンプトでGitの基本的なコマンドを動かしていきます。
Gitを学び始めるきっかけにどうぞ。
(筆者もまだGitを使いこなしているわけではありません。
誤りのご報告、改善提案などは大歓迎です。フィードバックからよろしくお願いします)
Windows XPのコマンドプロンプトで、 バージョン管理ツールGitの基本的なコマンドを動かしてみましょう。
この文書の通りに実行すると、 基本的なGitのコマンドをひととおり試すことができます(できるはずです)。
バージョン管理というものやGitについての解説は省き、 オペレーションだけを示します。
Gitのホームページにある、 Downloadのページから、 Win と書かれている二つのリンクのうち、 msysGitと書かれている側のリンク、 http://code.google.com/p/msysgit/downloads/listをたどります。 ファイルの一覧が出るので、新しいものを選んでダウンロードします。
(もう一つのリンクのほうはCygwinです。 Cygwinに慣れている人やSubversionの連携を考えている人はこちらがいいという話もありますが、 結城はまだ試してません。ごめんなさい。 WindowsのGit環境については、WindowsでのGit環境構築とその注意点もご参考にどうぞ)
結城が以下で使ったファイルは、 Git-1.6.4-preview20090730.exe です。
ダウンロードしたファイルを動かすとインストールが始まります。 インストール先はデフォルトのまま、 C:\Program Files\Git としました。
ファイルをGitの管理下に置きましょう。
まずは作業場所を整え、readme.txtというファイルを作ります。
C:\> mkdir work C:\> cd work C:\work> mkdir myproject C:\work> cd myproject C:\work\myproject> echo This is a readme file. > readme.txt ※readme.txtを作った C:\work\myproject> type readme.txt ※内容の確認 This is a readme file.
C:\work\myproject> git init ※Gitの初期化をします Initialized empty Git repository in C:/work/myproject/.git/ C:\work\myproject> git add . (最後のピリオド(カレントディレクトリの意)を忘れずに) C:\work\myproject> git commit -m "Initial commit." ※修正をメッセージ付きでコミットします [master (root-commit) a4f79ce] Initial commit. 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 readme.txt C:\work\myproject> git log ※作業ログを見ます commit a4f79ce23435c30a16f14fae32d9d8cfa0aa1f92 Author: hyuki <hyuki@example.com> Date: Sat Aug 22 15:41:14 2009 +0900 Initial commit.
実は、ここには管理用のディレクトリ .git も作られています。
C:\work\myproject> dir /b ※/bオプションで名前だけ見る
.git ※管理用のディレクトリ
readme.txt
readme.txtファイルに一行追加してから差分を確認してみましょう。
C:\work\myproject> echo Nice to meet you. >> readme.txt C:\work\myproject> type readme.txt This is a readme file. Nice to meet you. C:\work\myproject> git diff ※差分を見ましょう diff --git a/readme.txt b/readme.txt index 277c8cc..5eed5b3 100644 --- a/readme.txt +++ b/readme.txt @@ -1 +1,2 @@ This is a readme file. +Nice to meet you.
C:\work\myproject> git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: readme.txt ※readme.txtが修正されてます(modified)
#
no changes added to commit (use "git add" and/or "git commit -a")
行った修正は、コミットしてはじめてリポジトリに反映されます。
コミットするときには、-m
オプションで修正内容を書きます。
C:\work\myproject> git commit -a -m "Add a greeting." ※-aオプションは、変更したファイルを自動的にgit addします
[master a8055f0] Add a greeting.
1 files changed, 1 insertions(+), 0 deletions(-)
C:\work\myproject> git status
# On branch master
nothing to commit (working directory clean)
コミットし忘れているファイルはありません(nothing to commit)。 自分が作業コピーに加えた修正は、リポジトリに反映されています。
C:\work\myproject> echo Hello. > hello.txt C:\work\myproject> type hello.txt Hello.
C:\work\myproject> git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# hello.txt
nothing added to commit but untracked files present (use "git add" to track)
git statusで、現在の状態がわかります。 いま作ったばかりのファイル(hello.txt)が、まだGitの管理下にないことがわかります。 Gitは、hello.txtのことを追跡していません(untracked)。 追跡するためにはgit addを使いなさいとアドバイスが表示されています。
C:\work\myproject> git add hello.txt C:\work\myproject> git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: hello.txt
git addで、 ファイルhello.txtをGitの管理下に置きました。 でも、まだリポジトリには反映していません。
git statusを実行すると、 追加したけれどまだコミットしていないファイルがわかります(new file:という印がつきます)。
C:\work\myproject> git commit -a -m "Add hello.txt." [master a07d6dc] Add hello.txt. 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 hello.txt C:\work\myproject> git status # On branch master nothing to commit (working directory clean)
git commitでリポジトリにコミットしました。
再度git statusしてみると、 さっきコミットしてないと言われたファイル(hello.txt)の名前は、もう表示されません。 すでにコミットされたからです。
新しいディレクトリに新しいファイルを作り、リポジトリにコミットしてみましょう。
C:\work\myproject> mkdir src ※srcディレクトリを作成します C:\work\myproject> cd src ※srcディレクトリへカレントディレクトリを変更します C:\work\myproject\src> ※ここで、エディタを使ってGood.javaを作成します C:\work\myproject\src> type Good.java public class Good { public static void main(String[] args) { System.out.println("Good"); } } C:\work\myproject\src> git add Good.java C:\work\myproject\src> git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: Good.java # C:\work\myproject\src> cd .. C:\work\myproject> git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: src/Good.java # C:\work\myproject> git commit -a -m "Add a Java source file." [master 9437904] Add a Java source file. 1 files changed, 5 insertions(+), 0 deletions(-) create mode 100644 src/Good.java C:\work\myproject> git status # On branch master nothing to commit (working directory clean)
C:\work\myproject> cd src C:\work\myproject\src> ※ここで、エディタを使ってGood.javaを編集する C:\work\myproject\src> type Good.java public class Good { public static void main(String[] args) { System.out.println("Good!"); } } C:\work\myproject\src> git diff ※差分を見てみましょう diff --git a/src/Good.java b/src/Good.java index 1c1f198..ab7c9e5 100644 --- a/src/Good.java +++ b/src/Good.java @@ -1,5 +1,5 @@ public class Good { public static void main(String[] args) { - System.out.println("Good"); + System.out.println("Good!"); } } C:\work\myproject\src> git commit -a -m "Add an exclamation mark." [master 83f63df] Add an exclamation mark. 1 files changed, 1 insertions(+), 1 deletions(-)
C:\work\myproject\src> git branch mytrial ※mytrialというブランチを作りました C:\work\myproject\src> git branch ※現在のブランチは? * master ※masterが現在のブランチ(*)印 mytrial ※mytrialというブランチもできている
C:\work\myproject\src> git checkout mytrial ※mytrialにブランチを切り替えます Switched to branch 'mytrial' C:\work\myproject\src> git branch ※現在のブランチは? master * mytrial ※mytrialが現在のブランチになりました C:\work\myproject\src> dir /b Good.java C:\work\myproject\src> ※ここで、エディタを使ってGood.javaを編集する C:\work\myproject\src> type Good.java public class Good { public static void main(String[] args) { System.out.println("Good!!!!!!!!!"); System.out.println("Try!Try!Try!"); System.out.println("Good!Good!Good!"); } } C:\work\myproject\src> git diff diff --git a/src/Good.java b/src/Good.java index ab7c9e5..79acd88 100644 --- a/src/Good.java +++ b/src/Good.java @@ -1,5 +1,7 @@ public class Good { public static void main(String[] args) { - System.out.println("Good!"); + System.out.println("Good!!!!!!!!!"); + System.out.println("Try!Try!Try!"); + System.out.println("Good!Good!Good!"); } } C:\work\myproject\src> git commit -a -m "Add messages." [mytrial f48fecb] Add messages. ※これはmytrialブランチへのコミットです 1 files changed, 3 insertions(+), 1 deletions(-) C:\work\myproject\src> git status # On branch mytrial nothing to commit (working directory clean)
C:\work\myproject\src> git branch master * mytrial C:\work\myproject\src> git checkout master ※ブランチをmasterに戻します Switched to branch 'master' C:\work\myproject\src> type Good.java ※mytrialでの修正はまったくmasterに影響しません public class Good { public static void main(String[] args) { System.out.println("Good!"); } } C:\work\myproject\src> git diff mytrial ※masterとmytrialとの違いを見てみましょう diff --git a/src/Good.java b/src/Good.java index 79acd88..ab7c9e5 100644 --- a/src/Good.java +++ b/src/Good.java @@ -1,7 +1,5 @@ public class Good { public static void main(String[] args) { - System.out.println("Good!!!!!!!!!"); - System.out.println("Try!Try!Try!"); - System.out.println("Good!Good!Good!"); + System.out.println("Good!"); } } C:\work\myproject\src> type Good.java ※違いを見ただけなので、masterはまだそのまま public class Good { public static void main(String[] args) { System.out.println("Good!"); } } C:\work\myproject\src> git merge mytrial ※ここで、mytrialの修正をマージします(コミットもされます) Updating 83f63df..f48fecb Fast forward src/Good.java | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) C:\work\myproject\src> type Good.java ※はい、mytrialの修正がマージされました public class Good { public static void main(String[] args) { System.out.println("Good!!!!!!!!!"); System.out.println("Try!Try!Try!"); System.out.println("Good!Good!Good!"); } } C:\work\myproject\src> git diff ※すでにコミットされています C:\work\myproject\src> git status ※すでにコミットされています # On branch master nothing to commit (working directory clean)
C:\work\myproject\src> git log
commit f48fecb045ef796be3feb956d50a6b9af809dcee
Author: hyuki <hyuki@example.com>
Date: Sat Aug 22 16:16:32 2009 +0900
Add messages.
commit 83f63df5e2e130cba3cb2d74dccb4f16e3d61cd8
Author: hyuki <hyuki@example.com>
Date: Sat Aug 22 16:08:45 2009 +0900
Add an exclamation mark.
commit 94379041c045a206fb665d90802728e115631471
Author: hyuki <hyuki@example.com>
Date: Sat Aug 22 16:06:38 2009 +0900
Add a Java source file.
commit a07d6dc586da881b2917f190432253d4a616aabd
Author: hyuki <hyuki@example.com>
Date: Sat Aug 22 15:53:59 2009 +0900
Add hello.txt.
commit a8055f0b91d5a811f1b66c1adf3f9c917248ed69
Author: hyuki <hyuki@example.com>
Date: Sat Aug 22 15:49:59 2009 +0900
Add a greeting.
commit a4f79ce23435c30a16f14fae32d9d8cfa0aa1f92
Author: hyuki <hyuki@example.com>
Date: Sat Aug 22 15:41:14 2009 +0900
Initial commit.
Gitの基礎練習は以上です。 お疲れさま。
あなたのご意見・感想をお送りください。 あなたの一言が大きなはげみとなりますので、どんなことでもどうぞ。