ksaitoの日記

日々試したことの覚え書き

Gitの使い方

移転しました。

自動的にリダイレクトします。

cvs, svn, bzr, hgと、ほぼ一緒です。

リポジトリ作成

リポジトリの追加は、initコマンドです。
/etcのように既存のファイルも簡単に管理できます。

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

ファイルの追加

ファイルの追加は、addコマンドで追加できます。

$ touch file1.txt
$ git add file1.txt
$ git commit -m "add"
[master (root-commit) ccbd3d4] add
 Committer: Gecos <user@domain>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

    git config --global user.name "Your Name"
    git config --global user.email you@example.com

If the identity used for this commit is wrong, you can fix it with:

    git commit --amend --author='Your Name <you@example.com>'

 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1.txt
$

ユーザとメールの設定

gitを操作するとガイダンスが出てきますが、コミットログに記録される名前とメールアドレスを設定できます。(このスタイルは、bazaarと一緒で設定ファイルより好きです。)

$ git config --global user.name "名前"
$ git config --global user.email メールアドレス
$ 

変更点を見る

$ echo test >> file1.txt 
$ git diff
diff --git a/file1.txt b/file1.txt
index e69de29..9daeafb 100644
--- a/file1.txt
+++ b/file1.txt
@@ -0,0 +1 @@
+test
$ 

コミット

コミットは、他とちょっとオプションが違います。
コメントは、-mオプションで指定しますが、事前にaddするか-aオプションを付けないとコミットされません。

$ git commit -m "update"
# 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:   file1.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
$

こんな感じです。

$ git commit -a -m "update"
[master b9e1275] update
 1 files changed, 1 insertions(+), 0 deletions(-)
$ 

変更の取り消し

gitには、revertとresetの2つの取り消しがあります。
HEADの変更は、記録を残さずに修正を取り消すことができます。
ちょっと怖いコマンドですが、分散リポジトリだから成立するというところでしょうか。

$ 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:   file1.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
$ git commit -a -m "reset"
[master ce11a08] reset
 1 files changed, 1 insertions(+), 0 deletions(-)

$ git reset --soft HEAD^
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   file1.txt
#
$

クローン

他のリポジトリからクローンを作ることができます。
Linuxカーネルソースが格納されているリポジトリを取得する方法です。

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6