Who are you on the repository?
名を名乗れ!
Git の入門書には,大抵,まず自分の名前を設定しましょうと書いてあります. たとえば,Pro Git Git - First-Time Git Setup でも.
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
これ,設定してて困ったことありませんか? というのが今日の話です.
よく忘れるリポジトリ毎の名前変更
僕は,リポジトリ毎にメールアドレスを変えたいことがよくあります.そんなときは, --global
を付けずに:
$ cd private-project $ git config user.email private@example.com
とすれば,そのリポジトリだけの local な設定として private@example.com が優先されます.ここまでは常識ですね.
ただ,これをよく忘れるんです.忘れると global な名前で commit message が残ってしまって,それに気付かずに push して面倒なことになります. なので,僕は,global な user.email を設定していません.
では,global な設定をしないで,local な設定も忘れてしまうとどうなるでしょう. 望まないメールアドレスが外に出て行く心配はないのですが, git が適当に自動で付けた名前と email アドレスで commit message が残ります. これは,場合によっては,もっと恥ずかしいかもしれません.
なので,git は,push して恥ずかしい思いをする前に警告してくれます:
$ git commit -m 'First import' 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 After doing this, you may fix the identity used for this commit with: git commit --amend --reset-author
かしこいですね.
でもね,できれば Commit する前に教えてよ…
でも,できれば commit する前に教えて欲しい. pre-commit hook を設定すればいい気がしますが,そもそもこれを設定するのを忘れる… そこで,zsh のプロンプトに出すことにしました.
~/.zshrc
より抜粋:
## ## VCS and RVM info in prompt. ## # http://qiita.com/items/8d5a627d773758dd8078 +vi-check-git-repository-info() { local email="$(git config --local --get user.email |cut -d. -f 1)" if [[ "$1" = 0 ]]; then if [[ -n "$email" ]]; then hook_com[misc]+=":$email" else hook_com[misc]="" fi fi if [[ "$1" = 1 ]]; then if [[ -z "$email" ]]; then hook_com[misc]+="- WHO ARE YOU? - " else hook_com[misc]="" fi fi } if zsh-is-at-least 4.3.11 ; then autoload -Uz vcs_info zstyle ':vcs_info:*' formats '(%s%m)-[%b]' '%m' zstyle ':vcs_info:*' actionformats '(%s)-[%b|%a]' zstyle ':vcs_info:git+set-message:*' hooks check-git-repository-info precmd () { rvm_prompt=`~/.rvm/bin/rvm-prompt` psvar=() LANG=en_US.UTF-8 vcs_info [[ -n "$vcs_info_msg_1_" ]] && psvar[1]="$vcs_info_msg_1_" [[ -n "$vcs_info_msg_0_" ]] && psvar[2]="$vcs_info_msg_0_" [[ -n "$rvm_prompt" ]] && psvar[3]="[$rvm_prompt]" } RPROMPT="%1(v|%F{red}%1v%f|)%2(v|%F{green}%2v%f|)%3(v|%F{yellow}%3v%f|)" fi
この設定で,email を設定していないと,- WHO ARE YOU? -
と聞かれるようになります.
となります.プロンプト右端は,rvm の情報なので,今回の話とは関係ありません.
あと,WHO ARE YOU と聞かれたときに簡単に返答できるようなエイリアスを作っています.
~/.gitconfig
:
[alias] email-github = config user.email github-username@example.com email-work = config user.email work-username@example.com
SPAM 対策で複数のメールアドレスを使い分けている人にも有効かもしれません.