Git 2.3.0 のマニュアルを上から読んでいる。気になったオプションを書いていく。
git-init
--separate-git-dir
.gitとワーキングツリーを分けることができる。直下に.gitを置きたくない共有ドキュメントの管理とかDropboxみたいにツールでsyncしちゃうので.gitを置きたくない場合のような利用例があるようだ。
.git/configのcore.worktreeで設定できる。
--shared
デフォルト=trueだとGroupも書き込める(664とか)ので、それを変更するオプション。falseだとユーザのみ書き込める(umask=022)。all/0xxx(umask)も指定できる。
設定で言うとcore.sharedRepository。
git-clone
--local/-l
ローカルリポジトリでcloneするときに可能ならハードリンクを使用する。ディスクをケチるオプション。
逆に--no-hardlinksを指定すると強制的にコピーする。バックアップ用途などに使うらしい。
--reference <repository>
参照用のローカルリポジトリを設定することでネットワークを渡ってくるデータ量を減らすらしい。可能ならハードリンクを使う。ハードリンクしたくないときは--dissociateを指定する。CI回したり頻繁にリリースする場合に使えそう?
他にもネットワーク利用をケチるオプションは結構多い。--depthでのシャローコピー、--single-branchで指定したブランチだけコピってくるとか。
--origin <name>/-o <name>
remoteの名前にoriginを使いたくない時に指定。master以外をcheckoutしたいときは--branch <name>/-b <name>を使う。
git-add
-i
インタラクティブモードになるけど…使いやすいの…?間違ったコマンドをいれるとHuh?って言われてイラッとする。
-p
コミットをファイルより細かい単位に更に分割できるらしい。しかしインタラクティブつらい。
git-status
--ignored
gitignoreで無視されたファイルを表示。.gitignoreを変更したあとの確認とかに使えそう。
-uno
リポジトリに追加していないファイルを表示しない。デフォルトは-uall。-unormalもあるけどallとの違いがわからない。
-n/--dry-run
実際には実行しない。たまに必要。
git-commit
-a
更新と削除を自動的にaddしてコミットする。今までgit add -uしてgit commit -mしてたけど、このオプションでいいじゃんと思った。
-S[<keyid>] / --gpg-sign[=<keyid>]
GnuPGでコミットに対して署名できる。堅めのオープンソースプロジェクトだと使うみたい。Linux Kernelとか。準備が結構めんどくさい。とりあえずCentOSでgpg --gen-keyするのにrngdが欲しいという時点でしばしハマった。
git-reset
-p
git add -p的にインタラクティブモードでハンク単位にリセットするかどうか指定できる。
git-branch
-v/-vv/--verbose
コミットハッシュ、コミットログ、vvの場合はリモートブランチを出力。
--list <pattern>
ブランチ名をpatternでglobできる。
git-checkout
--orphan [new-branch]
空のブランチ、もしくはヒストリから切り離されたブランチを作れる。使いどころがわからないけど、site-specificなファイルを格納するとか?
git-stash
show
-pでdiffが見れる。HEADとのdiffだと思う。
git-tag
-a/--anotate, -s/--sign
オプションなしだとコミットに名前をつけるだけ。-aでタグオブジェクト生成、-sでGPGサイン付き。(Git bookに書いてあるとおりだけど)
git-shortlog
-s
コミット回数の合計が見れる。