LoginSignup
2
1

More than 3 years have passed since last update.

GitリポジトリのURLごとに、pre-commit hook を用いて自動で Author を切り替える

Last updated at Posted at 2019-04-24

なにこれ

業務での開発時は会社用の 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/

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1