Git について

git についてよく分かっていなかったので、調べてみた。
よく分からなかった原因は、git 特有の概念、用語などにあったと感じていたので、以下にまとめた。

概念については以下の資料を参照するのがいい。

git – 簡単ガイド 猫でもわかるGit 最初の一歩
Git – Book

用語についても、以下にまとめた。
origin, master, head とかよく意味がわかんなかったけど、少しすっきりした。

リポジトリからクローンして、コミットするまでのコマンドについてもまとめたので、
あとは実際の経験からの得られる知識を蓄積していけば OK でしょう。
改めて、ブランチって便利だなと感じたので、積極的に使っていきたい。^_^

インストール

macport でインストールする場合

$ sudo port install git-core +gitweb +svn

設定について

~/.gitconfig
特定のユーザーに対する設定値を保持する。
–global オプションを指定することで、明確にこのファイルの読み書きを行う。

/etc/gitconfig
システム上の全てのユーザーと全てのリポジトリに対する設定値を保持する。
–system オプションを git config に指定すると、明確にこのファイルに読み書きを行う。

現在使っている、あらゆるリポジトリの Gitディレクトリ設定ファイル ( .git/config )
特定の単一リポジトリに対する設定値を保持する。
それぞれのレベル値は以前のレベル値を上書きするため、.git/config 中の設定値は /etc/gitconfig の設定値に優先される。

.gitignore
無視させたいファイルのパターンを保持したファイル。
.gitignore ファイルに記述するパターン規則は、以下の通り。

空行あるいは # で始まる行は無視される
標準の glob パターンを使用可能
ディレクトリを指定するには、パターンの最後にスラッシュ (/) をつける
パターンを逆転させるには、最初に感嘆符 (!) をつける

1
2
3
4
5
6
# コメント行
*.a       	# .a ファイルは管理対象外とする
!lib.a    	# しかし、lib.a ファイルだけは .a であっても追跡対象とする
/TODO           # ルートディレクトリの TODO ファイルだけを対象外とし、サブディレクトリの TODO は対象外としない
build/    	# build/ ディレクトリのすべてのファイルを対象外とする
doc/*.txt 	# doc/notes.txt は無視しますが、doc/server/arch.txt は無視しません

xcode 用の gitignore

1
2
3
4
5
6
7
8
9
10
11
12
.DS_Store
*.swp
*~.nib
build/
 
*.pbxuser
*.perspective
*.perspectivev3
 
#!xcuserdata/
#*.xcuserstate
UserInterfaceState.xcuserstate

用語について

リポジトリをクローンする
Git リポジトリをコピーすること。
Subversion などの checkout と意味が違うことに注意。
Git は、サーバーが保持しているデータをほぼすべてコピーする。
そのプロジェクトのすべてのファイルの全履歴が、git clone で取得することができる。

リポジトリをクローンするには git clone [url] とする。
例えば、Ruby の Git ライブラリである Grit をクローンする場合は以下のようにコマンド入力する。

$ git clone git://github.com/schacon/grit.git

ステージング・エリア
Gitディレクトリに含まれる、次のコミットに何が含まれるかという情報。

origin サーバー
クローン元のサーバーに対して Git がデフォルトでつける名前。

master ブランチ
クローンした地点でこのブランチ名とサーバー名が自動設定される。

HEAD ポインタ
作業中のブランチを指し示す特別なポインタ。
Git では、HEAD は作業しているローカルブランチへのポインタとなる。

git clone
git clone コマンドはローカルの master ブランチが、(取得元サーバーの) リモートの master ブランチを追跡するよう自動設定する。
リモートに master ブランチが存在することを前提としている。

git pull
通常は最初にクローンしたサーバーからデータを取得し、現在作業中のコードへのマージを試みる。

リベース
一方のブランチにコミットされたすべての変更をもう一方のブランチで再現する。

コマンド入力について

設定を確認する方法
$ git config –list

変更を確認する方法
$ git status
$ git diff
$ git diff –staged

git で管理するファイルをコミットする

1
2
3
$ git init					# 既存ディレクトリでのリポジトリの初期化
$ git add *.c					# 管理するファイルを追加する
$ git commit –m 'initial project version'	# コミットする

ステージングエリアの準備ができたら、変更内容をコミットすることができる。
コミットの対象となるのはステージされたものだけ、つまり追加したり変更したりしただけで
git add を実行していないファイルはコミットされないことに注意。

$ git commit -a -m '...'
$ git pull origin master マスタの改変を取り込む
$ git branch 現在のブランチを確認する
$ git checkout (ブランチ名) ブランチを切り換える
$ git status コミット残があるか判断する
$ git add (ファイル名) ファイルを追加する
$ git merge (ブランチ名) ブランチをマージする
$ git push origin master originサーバのmasterブランチへpushする

ファイルを削除、変更する方法

$ git rm ファイル名 ファイルの削除がステージされる
$ git rm -f ファイル名 ステージされているファイルを削除する
$ git rm –cached ファイル名 ファイルをステージから削除するのみ
$ git mv file_from file_to ファイル名を変更する (ステージから削除し、新しいファイル名でステージしてくれる)

直近のコミットを修正する方法

$ git commit –amend 直近のコミットを変更

直近のコミットを修正するには以下の様にコマンドを入力する。

1
2
3
$ git commit -m '初期コミット'
$ git add 忘れてたファイル
$ git commit --amend

ログを参照する方法

$ git log ログの閲覧
$ git log –p -2 -p で各コミットの diff を表示し、-2 で直近の 2 エントリだけを出力する
$ git log –pretty=format:”%s” –graph ログをグラフィカルに出力する
$ git log –oneline ログを1行ずつ出力する

タグをつける方法

$ git tag タグの一覧表示
$ git tag -a v1.4 -m ‘my version 1.4’ 注釈付きのタグを指定する
$ git show v1.4 タグの参照

ブランチを操作する方法

$ git checkout testing ブランチを testing へ切り換える
$ git checkout -b iss53 ブランチ iss53 を作成して、切り換える
$ git checkout master ブランチを master へ切り換える
$ git merge hotfix ブランチをマージする
$ git branch -d hotfix ブランチを削除する

submodule を更新する方法

$ git submodule foreach ‘git checkout master; git pull’ すべてのサブモジュールを更新する

コメントを残す

メールアドレスが公開されることはありません。