2012-03-09 2 views
13

내 계획은/etc의 변경 사항을 추적하기 위해 git을 사용하지만 커밋 할 때 변경 사항을 작성한 사람에게 - 명령 행에서 -author 옵션.미리 작성한 후크를 사용하여 특정 작성자의 git commit 중지

그래서 나는 우발적 인 커밋을 루트로하고 싶지 않습니다.

이 미리 커밋 훅을 만들려고했으나 작동하지 않습니다. 커밋 라인에서 작성자를 지정해도 git var은 여전히 ​​루트를 반환합니다.

AUTHOR=`git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/\1/p'` 
if [ "$AUTHOR" == "root <[email protected]>" ]; 
then 
    echo "Please commit under your own user name instead of \"$AUTHOR\":" 
    echo 'git commit --author="Adrian"' 
    echo "or if your name is not already in logs use full ident" 
    echo 'git commit --author="Adrian Cornish <[email protected]>"' 
    exit 1 
fi 
exit 0 
+1

그것은이 정보를 얻을 수있는 방법이있을 것 같지 않습니다 놀라운 일이다. 'git var GIT_AUTHOR_IDENT'는'--author'를 통해 제공되는 것이 아니라 원래 작성자임을 보여줍니다 ... – Borealid

+0

또한 접두사 https://gist.github.com/tripleee/16767aa4137706fd896c – tripleee

답변

10

망할 놈의 현재 버전은 환경 변수, 명령 줄 인수 또는 표준 입력을 통해 힘내 후크에 --author 정보가 이용 가능하지 않습니다. 그러나 대신 --author 커맨드 라인의 사용을 요구, 당신은 GIT_AUTHOR_NAMEGIT_AUTHOR_EMAIL 환경 변수를 설정하는 사용자를 지시 할 수 있습니다 다음 --author 인수처럼

#!/bin/sh 
AUTHORINFO=$(git var GIT_AUTHOR_IDENT) || exit 1 
NAME=$(printf '%s\n' "${AUTHORINFO}" | sed -n 's/^\(.*\) <.*$/\1/p') 
EMAIL=$(printf '%s\n' "${AUTHORINFO}" | sed -n 's/^.* <\(.*\)> .*$/\1/p') 
[ "${NAME}" != root ] && [ "${EMAIL}" != "[email protected]" ] || { 
    cat <<EOF >&2 
Please commit under your own name and email instead of "${NAME} <${EMAIL}>": 
GIT_AUTHOR_NAME="Your Name" GIT_AUTHOR_EMAIL="[email protected]" git commit 
EOF 
    exit 1 
} 

를, 이러한 환경 변수는의 커밋 저자을 제어 할 수 있습니다. 이 환경 변수는 Git 환경에 있기 때문에 pre-commit 후크 환경에도 있습니다. 그리고 그들은 그들이 pre-commit 후크의 환경에 있기 때문에 git commit처럼 그것을 사용하는 git var GIT_AUTHOR_IDENT으로 전달됩니다.

불행히도 이러한 변수를 설정하는 것은 --author을 사용하는 것보다 훨씬 편리하지 않습니다. Git 개발자에게 문의하여 pre-commit 후크를 시작하기 전에 (--author을 통해 전달 된 값을 사용하여)이 환경 변수를 설정하도록 요청하는 것이 좋습니다.

+0

감사합니다. 원했어. GIT_AUTHOR_NAME 및 GIT_AUTHOR_EMAIL에서 git var를 시도했지만 항상 비어있었습니다. 이유가 설명됩니다. –

+0

이것은 올바르지 않습니다 anylonger, GIT 2.7.4 (이전 mabye)와 함께 작동하는 것 같습니다. 'echo $ GIT_AUTHOR_NAME'을'pre-commit' 훅에 넣으면 저자 이름 (git config에 설정된 이름이나'--author'를 통해 전달 된 이름)이 출력됩니다. 또한'git var GIT_AUTHOR_IDENT'는'--author'와 함께 동작합니다. – lumbric

0

다음을 사용하여 시스템 .bashrc에 추가했습니다.

실제로 뿌리를 내리고 그 껍질에 살고있는 사람들을 붙잡지는 않을 것입니다. (나쁜!) 그러나 사람들이 sudo를 사용할 때 내 로그를 유용하게 유지합니다. 나는/etc changelog를 git로 유지하려고 시도하고있다. 그래서 나는 한 달에 한 번씩 무슨 일이 일어 났는지 볼 수있다.

#I want everyone to check in changes to /etc files, but also want their names even when they use sudo. 
export GIT_COMMITTER_EMAIL=${USER}@ourcompany.co.nz 
export GIT_AUTHOR_EMAIL=${USER}@ourcompany.co.nz 

https://serverfault.com/questions/256754/correct-user-names-when-tracking-etc-in-git-repository-and-committing-as-root