なにこれ
業務での開発時は会社用の Author を利用しつつ、業務時間に個人のGitHubリポジトリをいじったり、OSSを触ったりする機会もあるので、ドメインごとに自動でAuthorを切り替えたいと思い。
なにかしら方法あるのではとググってみたら、以下に先達の通った道がありました。
GitリポジトリのURL毎に自動でコミット時のGithubアカウントを切り替える
githooks を使って会社とプライベート用の Author を自動変更するようにしたった
思い切り参考にさせていただきつつ、一部バグってたり、想定どおり動かないところを少し修正しました。
誰かの参考になるかもなので、コードを残しておきます。
※ 会社ドメインが複数必要だったので、ドメイン複数置いてます
修正後
#!/bin/sh
### Account config (Need to modify as your own)
GITHUB_DOMAIN="github.com"
GITHUB_NAME="tatsuroro"
GITHUB_EMAIL="me@userdomain.com"
GHE_DOMAIN="your-company-github.com"
GHE_DOMAIN_2="your-company-2-github.com"
GHE_NAME="tatsuro.nakamura"
GHE_EMAIL="tatsuro.nakamura@your-company.com"
###
raw_url="$(git config remote.origin.url)"
if echo "$raw_url" | grep https; then
# for https
remote_domain=$(echo $raw_url | sed -E 's/^.*(https):\/\/([^/]+).*/\2/g')
else
# for ssh
remote_domain=$(echo $raw_url | sed -E 's/^.*(ssh):\/\/([^/]+).*/\2/g')
fi
case "$remote_domain" in
"$GITHUB_DOMAIN" )
NAME=$GITHUB_NAME
EMAIL=$GITHUB_EMAIL
;;
"$GHE_DOMAIN" )
NAME=$GHE_NAME
EMAIL=$GHE_EMAIL
;;
"$GHE_DOMAIN_2" )
NAME=$GHE_NAME
EMAIL=$GHE_EMAIL
;;
* )
echo "unknown remote domain $remote_domain"
exit 0
;;
esac
FAIL=false
if [ "$(git config --local --get user.name)" != $NAME ]; then
git config --local user.name $NAME
echo "changed user.name to $NAME"
FAIL=true
fi
if [ "$(git config --local --get user.email)" != $EMAIL ]; then
git config --local user.email $EMAIL
echo "changed user.email to $EMAIL"
FAIL=true
fi
if $FAIL;then
echo "try again!"
exit 1
fi
git hooks の設定手順などは参考URLに詳しいので、そちらを参照のこと。
追記
.gitconfig の IncludeIf
を使って [user] の差分をインクルードするのがより簡単そうだった
Ref:
https://git-scm.com/docs/git-config#_example
https://blog.web-apps.tech/gitconfig-secret/