Git 저장소의 각 URL에 대한 커밋 시 Github 계정 자동 전환

7905 단어 GitGitHub
정확하게 쓰면 오리진의 각 영역user.emailuser.name 사이를 전환합니다.
제 직장에서는 회사 내에 코드를 구축한 GitHub Enterprise 환경push를 사용하고 있습니다. 여기는 회사에서 사용하는 메일 주소로 등록되어 있습니다.
다른 한편, 개인 개발이 있다면 GitHub를 사용하세요. 이것은 개인용 Gmail 주소입니다.
그러면 git config에서 전역적으로 개인용 이메일을 설정하면 GitHub Enterprise의 자료 라이브러리에서commit을 조심하지 않을 수 있습니다.
모든 자료고는 git config --local user.email [email protected]로 설정할 수 있지만 대부분 잊어버리면 리베이스제가 된다...
이런 상황은 매우 번거롭기 때문에, 마음대로 고쳐 써 보려고 한다

그렇습니다.


github에서 메모리 라이브러리commit 적당히 풀기
$ git config --get user.email  # 元は会社アカウント(ここでの表示はダミーデータ)
[email protected]
$ git config --get user.name
global_dummy

$ git commit --allow-empty -m dummy-commit # commitしようとするとrejectされ、設定が上書きされる
changed user.name to ry023
changed user.email to [email protected]
try again!

$ git config --get user.name # 設定が変わっていることを確認
ry023
$ git config --get user.email
[email protected]

$ git commit --allow-empty -m dummy-commit # もう一度やると、正しいアカウントでcommitされる
[master cd57d5b] dummy-commit
$ git show HEAD
commit cd57d5bd3bf8eb461d4532e9133a232a92aeab0b
Author: ry023 <[email protected]>
Date:   Sat Apr 14 16:29:35 2018 +0900

    dummy-commit

설정했어


git의 v2.9에서pre-commit의config에서hook의path를 변경할 수 있습니다.
다음 방식core.hooksPath을 통해 모든 저장소의 공공hook 방치장소가 됩니다
$ mkdir -p ~/.git/hooks
$ git config --global core.hooksPath ~/.git/hooks/
~/.git/hooks 이 파일을 아래와 같은 느낌의 셸 스크립트로 설정하면 끝!
머리 부분은 좋은 걸로 바꿔주세요.
(실행 권한이 필요하기 때문에~/.git/hooks/pre-commit 잊지 마세요)

#!/bin/sh

#### アカウント設定。ここに書くか、bash_profileやらzsh_profileやらに書いておく ####
GITHUB_DOMAIN="github.com"
GITHUB_NAME="ry023"
GITHUB_EMAIL="[email protected]"

GHE_DOMAIN="your-company-github.com"
GHE_NAME="ry023"
GHE_EMAIL="[email protected]"
###################################################################

raw_url="$(git remote get-url origin)"
if echo "$raw_url" | grep https; then
  # for https
  remote_domain=$(echo $raw_url | sed -e 's/https:\/\///' | awk -F'/' '{print $1}')
else
  # for ssh
  remote_domain=$(echo $raw_url | sed -e 's/^.*@\(.*\)/\1/' | awk -F'/' '{print $1}' | awk -F':' '{print $1}')
fi

case "$remote_domain" in
  "$GITHUB_DOMAIN" )
    NAME=$GITHUB_NAME
    EMAIL=$GITHUB_EMAIL
    ;;
  "$GHE_DOMAIN" )
    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
문장제외: 원래는 계좌의 변경에서commit까지pre-commit에서 통일을 완성하려고 했지만 아무래도 pre-commit에서 계좌를 바꾸더라도 제출 자체는 이전의 계좌를 유지할 것이다.더 좋은 방법이 있나요?

좋은 웹페이지 즐겨찾기