git を自分色に染めあげる
by. @tomy_kaira (License: CC-BY-SA)
- git いれる
- コミットしたりしてみる
- 他人と一緒に作業する
- コマンドをカスタマイズする
- 規模のあるプロジェクトを管理する
- git を拡張する
- git のコミッタになる
- Hamano さんに勝つ
git いれるコミットしたりしてみる他人と一緒に作業する- コマンドをカスタマイズする
- 規模のあるプロジェクトを管理する
- git を拡張する
- git のコミッタになる
- Hamano さんに勝つ
このへんのおはなし
- git のなりたち
- git config
- 拡張の方針
- git のコマンド拡張
- そのほか
C + shell script で書かれている。
それぞれのサブコマンドに対応する実行可能ファイルがある。
git show
→/usr/local/libexec/git-core/git-show
(バイナリ)git pull
→/usr/local/libexec/git-core/git-pull
(shell script)
Unix like OS なら ~/.gitconfig
名前の記載とかがあるはず。
[user]
name = tomykaira
email = [email protected]
どのリポジトリでも使うデフォルト設定を書く。
今回使うのは alias。
[alias]
co = checkout
aa = add .
コマンドの別名を決める。
git co
→checkout
git aa
→add .
(カレントディレクトリ下のすべてのファイルを add)
-
短くせよ
git のコマンドは全体的に長すぎるので、よくつかうものをどんどん短縮する。
-
Good default
git のコマンドはひとつが複数の意味に対応している。 便利なデフォルト値をもったコマンドを作る。
-
打ち間違い対策
git
長い
alias g=git # shell の設定
git のコマンド名だけにしてしまう人もいる。
add
→ git add
checkout
長い → co
svn のデフォルト短縮を参考に
co = checkout br = branch ci = commit d = diff cl = clone
$ git checkout
タイプ数 1/3
$ g co
$ git status
# On branch github-usage
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: index.rst
# modified: install.rst
#
no changes added to commit (use "git add" and/or "git commit -a")
みにくい
alias: st = status -sb
$ git st
## github-usage
D index.rst
M install.rst
よく使うコマンドをまとめる
vlog = log --pretty=format:'%C(red)%h%Creset %C(cyan)<%an>\
%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'\
--abbrev-commit --date=relative
色付き(要心の目):
109b7e3 <tomykaira> - (HEAD, origin/github-usage, github-usage) スペルなどを訂正 (10 days ago)
9f8d7a6 <tomykaira> - push の注釈を追加 (10 days ago)
8fbe67b <tomykaira> - github でのリポジトリ作成、clone についての説明 (10 days ago)
10a2ebf <cynipe> - (origin/scmbc-tokyo3) Githubの設定で冗長な見出し区切りをやめた (13 days ago)
14c69b1 <cynipe> - Githubのスクリーンショットを追加 (13 days ago)
a953024 <cynipe> - Read the Docsのデフォルトテーマ対応をしてみた (13 days ago)
8003717 <cynipe> - Githubアカウントの作成、設定について記述し、gitのインストールを別ファイルに移動、体裁を整えた (13 days ago)
bce2a19 <cynipe> - リポジトリ外のファイルが設定にあったので外した。 (13 days ago)
64cb0cc <bleis-tift> - (origin/master, origin/HEAD, master) READMEをとりあえず追加 (8 months ago)
コマンドにいろんな意味があって使いにくい。 意味ごとにコマンドをつくる。
-
commit
cih = commit --amend -C HEAD cim = commit -m ciam = commit -am
-
rebase
rb = rebase rbh = rebase HEAD
高速で g add
を打つと
$ g add
$ ga dd
$ g ad
いろいろおこる。
bash:
alias ga="git"
git:
[alias]
aa = add .
ad = add
dd = add
空気を読んでもらう。 (ga なんてコマンドは… Global Armaments?)
git-hoge という名前のスクリプト / バイナリにしてパスのとおったところに置く。
git hoge
で呼びだせる。
ひとつのコマンドでは不可能な動作をまとめて実行する。
git-flow とかかなり大きなものも実現可能。
たとえば…
- git-mergeto: こないだ作った gist:3111090
- git-now : かの有名な
「おまえはいままでにしたマージの回数を覚えているのか?」
$ git checkout master
$ git merge --no-ff topic_branch
$ git branch -d topic_branch
$ git checkout -b new_branch
:
この動作をまとめる
#!/bin/sh -e
BRANCH=`git symbolic-ref HEAD 2>/dev/null | cut -d/ -f3`
if [ x$1 = 'x' ]; then
TO='master'
else
TO=$1
fi
git checkout $TO
git merge $BRANCH --no-ff
git branch -d $BRANCH
なう! ってすると、現状をとりあえずコミットしてくれる。
$ git now
[github-usage 3688bad] [from now] Mon Jul 9 23:59:43 JST 2012
2 files changed, 1 insertion(+), 14 deletions(-)
delete mode 100644 index.rst
master / develop のような long life branch では now させない。 topic branch だけにして、 now を push しちゃう事故防止。
BRANCH=`git symbolic-ref HEAD 2>/dev/null | cut -d/ -f3`
test -z "$BRANCH" -o "$BRANCH" = "master" -o "$BRANCH" = "develop" &&
echo "You are on branch $BRANCH." && exit
「あ、まちがって master に汚いの push しちゃった!みんなちょっとまって!」 みたいなことがなくなる(実話)
コマンド名、ブランチ名、リモートリポジトリの名前など、通常の補完ができない部分をカバー
git add
と来たら未ステージのファイルしか来ないgit checkout --
と来たら変更済みのファイルしか来ない
みたいなヒューリスティックを盛り込んだ。 ファイル単位での add が超高速になって便利。
gist:1504934 (フル) gist:1504938 (パッチ)
zsh のことはしりませんが、たぶんだいたい使える。
「そもそもなんでコマンド打ってんの?」
- すでにトラックされているファイルの部分ステージングとコミットが主な仕事。
- エディタ上でステージしたい部分を区切ることができる。
- push もできる。
- git.el と連携して全般的なファイル操作(add とか)ができる。
- ワンキーで起動、コマンド叩かなくてよい。
- Good bye
git diff
status
add
commit
。
gitsum
を呼ぶ- diff 形式の変更点が羅列されるので、必要ないものを選択して
k
c
でコミットコメント入力画面- コメント入力して
C-c C-c
元がふるいので、いろいろなおした版
- trailing whitespace
- コメント編集して amend
- サブディレクトリで作業している時にコミット失敗するバグ
文字を入力するようにコミットすることが大事
そのためには速度が大事
速度のためにはカスタマイズが必須
という名のもとで、自分のツール・カスタマイズ自慢でした。 #ステマ