Pre-Commitフックを使用して特定の作者によるGITコミットを停止する
-
09-12-2019 - |
質問
私の計画は、/ etcの変更を追跡するためにgitを使うことですが、コミュニケーションを行う人にコマンドラインに--authorオプションを追加して、自分自身を作家として指定してください。
だから私は根本的なコミットを根本的なコミットを止めたいと思います。
このプレコミットフックの作成を試みましたが、機能していません - git varはまだコミット行の作者を指定してもrootを返します。
AUTHOR=`git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/\1/p'`
if [ "$AUTHOR" == "root <root@localhost>" ];
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 <a@localhost>"'
exit 1
fi
exit 0
. 解決
現在のバージョンのGITは、環境変数、コマンドライン引数、またはSTDINを介してGITフックでGITフックに使用できるようになりません。ただし、--author
コマンドラインを使用する代わりに、--author
とGIT_AUTHOR_NAME
環境変数を設定するようにユーザーに指示できます。
#!/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}" != "root@localhost" ] || {
cat <<EOF >&2
Please commit under your own name and email instead of "${NAME} <${EMAIL}>":
GIT_AUTHOR_NAME="Your Name" GIT_AUTHOR_EMAIL="your@email.com" git commit
EOF
exit 1
}
.
GIT_AUTHOR_EMAIL
引数と同様に、これらの環境変数はコミットの作成者を制御します。これらの環境変数はGITの環境にあるため、--author
フックの環境にもあります。また、pre-commit
フックの環境にあるため、pre-commit
のようなそれらを使用するgit var GIT_AUTHOR_IDENT
に渡されます。
残念ながら、これらの変数を設定することは、git commit
を使用するよりもはるかに便利です。 Git開発者に連絡して、--author
フックを起動する前に、これらの環境変数を設定していることを要求してください。
他のヒント
私は以下を使用して、これをシステム.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
.
href="https://serverfault.com/questions/256754/Correct-user-names-when-tracking-etc-in-git-repository-and-committor-root"> https://serverfault.com/questions/256754/Correct-user-names-when-tracking-etc-in-git-repository-and-committory-as-root