2013年3月6日水曜日

Git事始め 基本コマンドの整理


インストール

# yum install curl-devel expat-devel gettext-devel \ openssl-devel zlib-devel
...
Complete!
# git clone git://git.kernel.org/pub/scm/git/git.git (最新版取得)
Initialized empty Git repository in /home/git/.git/
remote: Counting objects: 149959, done.
remote: Compressing objects: 100% (38734/38734), done.
remote: Total 149959 (delta 109920), reused 149194 (delta 109288)
Receiving objects: 100% (149959/149959), 34.94 MiB | 1.86 MiB/s, done.
Resolving deltas: 100% (109920/109920), done.
# yum install git-core

ユーザの登録

#(or $) git config --global user.name "[現在のログインユーザ名]"
#(or $) git config --global user.email "[メールアドレス]"

設定の確認

#(or $) git config --list

gitのヘルプ

#(or $) git help <verb>


管理したいディレクトリでGitを使用するコマンド

必要なファイルを追跡対象にする

#(or $) git init
#(or $) git add *.java
#(or $) git add *.properties

.gitが設置してあるディレクトリでステータスを確認したい場合

#(or $) git status

何も変更が無ければ以下のように出力される。
# On branch master
nothing to commit (working directory clean)

例えばREADMEファイルを一つ追加すると
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   README
nothing added to commit but untracked files present (use "git add" to track)

のように、Untracked filesがあることを知らせてくれる。
前回のスナップショットにこのファイルが無い場合、明示的に指示しない限りgitはこのファイルをバージョン管理・追跡に含めません。


新しいファイルの追跡


#(or $) git add README

これでREADMEファイルを追跡対象に含みました。
(ディレクトリを指定すると、配下のファイルすべてを追跡)
以下のようにstatusにnew fileが記載されます。

#(or $) git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# new file:   README
#

Changes to be committedによって、ステージされていると判断できます。
RAEDMEファイルを変更してgit statusを実行すると以下ようになります。

#(or $) git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# new file:   README
#
# 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
#

注意すべきは、ファイルを変更したら必ずgit addして、ファイルをステージすること。
ステージしたものがコミットできるものと認識しておくことが必要です。

無視したいファイル


ログファイルやビルドシステムが自動生成するファイルは、.gitignoreファイルに記載しておく。
ワイルドカードが使用できる。

例えば以下のように、.oまたは.aで終わるファイルとアーカイブファイルを無視します。

#(or $) cat .gitignore
*.[oa]
*~

logやtmp、pidといったファイルをここに入れてきます。
.gitignoreのファイル記述パターン

.gitignore ファイルに記述するパターンの規則は、次のようになります。

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

他の例

# コメント。これは無視されます
*.a       # .a ファイルは無視
!lib.a    # しかし、lib.a ファイルだけは .a であっても追跡対象とします
/TODO     # ルートディレクトリの TODO ファイルだけを無視し、サブディレクトリの TODO は無視しません
build/    # build/ ディレクトリのすべてのファイルを無視します
doc/*.txt # doc/notes.txt は無視しますが、doc/server/arch.txt は無視しません


変更内容の確認



引数無git diffは、変更したけれどステージしていない内容を見れます。

次にコミットするステージされた内容も知りたいときは、以下を使用します。

#(or $)git diff --cached

これで、ステージされたすべての変更を見ることができます。
すべてステージするとgit diffは何も表示しなくなるので、git commitを
行うと、すべてコミットができる。

git addをしたく無いとき、する必要が無いときには、git commit -a
とすることで、変更状態から自動的にステージしてコミットすることができます。

gitのリポジトリからファイルを削除したい

以下を使用します。

#(or $) git rm [対象ファイル]

gitの追跡からのみファイルを削除するには(HDD上には残します)

以下を使用します。

#(or $) git rm --cached [対象ファイル]


ファイル名の変更(mvコマンドを使用する)

#(or $) git mv [file_from] [file_tc]

コミット履歴の閲覧

以下のコマンドが便利です。

#(or $) git log --pretty=format:"%h - %an, %ar : %s"
#(or $) git log -p [-N]
pはコミットのdiffを表示するオプション
Nは直近いくつのエントリーを表示するかを指定します。

#(or $) git log -stat
各コミットのちょっとした統計データを確認する

オプションはたくさんあります。

オプション 説明
-p  各コミットのパッチを表示する
--stat  各コミットで変更されたファイルの統計情報を表示する
--shortstat --stat コマンドのうち、変更/追加/削除 の行だけを表示する
--name-only コミット情報の後に変更されたファイルの一覧を表示する
--name-status   変更されたファイルと 追加/修正/削除 情報を表示する
--abbrev-commit SHA-1 チェックサムの全体 (40文字) ではなく最初の数文字のみを表示する
--relative-date 完全な日付フォーマットではなく、相対フォーマット (“2 weeks ago” など) で日付を表示する
--graph ブランチやマージの歴史を、ログ出力とともにアスキーグラフで表示する
--pretty    コミットを別のフォーマットで表示する。オプションとして oneline, short, full, fuller そして format (独自フォーマットを設定する) を指定可能

履歴を見るとても便利な機能 gitk

以下でインストールするとgitkコマンドで使用可能。

#(or $) yum install gitk



作業のやり直し

直近のコミットをもう一度やり直す。
これは、ステージングエリアの内容をコミットに使用します。

#(or $) git commit --amend


ステージしたファイルの取り消し

git statusコマンドでreset用のコマンドを確認することもできます。

ex)
#(or $) git reset HEAD [ファイル名]


ファイルへの変更の取り消し

git statusコマンドでcheckout用のコマンドを確認することもできます。
ファイルの変更をすべて取り消す危険なコマンド

ex)
#(or $) git checkout -- [ファイル名]


リモートリポジトリについて

確認

名前に対応するURLも一緒に表示
#(or $) git remote -v

リモートリポジトリの追加

#(or $) git remote add pd [gitURL]


他のリポジトリから情報を取得する

#(or $) git fetch [リモートリポジトリ名]


リモートへのプッシュ

プロジェクトがみんなと共有できる状態に達したら、上流にプッシュします。

#(or $) git push [remote-name] [branch-name]


0 件のコメント:

コメントを投稿