残念ながら、私も本当に満足のいく解決策を見つけることができませんでした。私がこれまでに見つけたすべての解決策をリストアップします(あなたはあなたの質問ですでに最高の3つの解決策を提案したと思います)。
(1)--authorなしでコミットすることを禁止する
次のスクリプトをpre-commit
フックインとして保存し.git/hooks/pre-commit
て禁止します。
#!/bin/sh
if echo $GIT_AUTHOR_NAME | grep -q "XXX" 2> /dev/null; then
echo 'You tried to commit as XXX, please use git commit --author="your name".'
return 1
fi
ユーザー名をXXXに設定します。
git config user.name XXX
警告:これは通常のコミットでのみ機能します。マージコミットはXXXとしてコミットされます。おそらく、この作業を行う方法もあります
(2a)コミットする前に作成者情報の入力を求める(フックを使用)
post-commit
フックを使用して作成者を設定する唯一の方法は、フックを使用してコミットを修正することであるようです。こちらも参照してください。
これは、醜い副作用を伴う奇妙なハックです(たとえば、コミットメッセージの作成者が間違って表示されます)。
#!/bin/sh
# env variable to prevent recursion
test -z $AMMEND_COMMIT || exit 0
export AMMEND_COMMIT=1
exec < /dev/tty
echo -n "Author for previous commit: "
read author
git commit -q --no-edit --amend --author "$author"
次のスクリプトを使用して、最後のコミットに基づいて作成者の提案を取得します。
#!/bin/sh
# TODO this doesn't work for repos with <15 commits
NUM_LAST_COMMITS=15 # how many commits in the past to look for authors
# env variable to prevent recursion
test -z $ammend_commit || exit 0
export ammend_commit=1
exec < /dev/tty
last_authors=$(git shortlog -s -e HEAD~${NUM_LAST_COMMITS}..HEAD|sed 's/^\W*[0-9]*\W*//g')
echo "Select an author from list or enter an author:"
echo
echo "$last_authors" | awk '{print " [" NR "] " $s }'
echo
echo -n "Enter number or author: "
read author
if echo "$author" | egrep -q '^[0-9]+$'; then
author=$(echo "$last_authors" | sed "${author}q;d")
fi
git commit -q --no-edit --amend --author "$author"
このように見えます:
$ git commit -am "My message"
Select an author from list or enter an author:
[1] First Author <first_author@domain.com>
[2] Second Author <second_author@domain.com>
[3] Third Author <third_author@domain.com>
Enter number or author: 3
(2b)コミットする前に作成者情報の入力を求める(カスタムスクリプトまたはエイリアスを使用)
作成者を使用するように求めるスクリプトgit-commit.sh
またはgitエイリアスgit commit-author
を作成してから、を呼び出すことができますgit commit --author=<user's selection>
。残念ながら、を上書きすることはできません git commit
。
のgit-commit.sh
スクリプトは次の/usr/local/bin
ようになります。
#!/bin/sh
# TODO this doesn't work for repos with <15 commits
NUM_LAST_COMMITS=15 # how many commits in the past to look for authors
last_authors=$(git shortlog -s -e HEAD~${NUM_LAST_COMMITS}..HEAD|sed 's/^\W*[0-9]*\W*//g')
echo "Select an author from list or enter an author:"
echo
echo "$last_authors" | awk '{print " [" NR "] " $s }'
echo
echo -n "Enter number or author: "
read author
if echo "$author" | egrep -q '^[0-9]+$'; then
author=$(echo "$last_authors" | sed "${author}q;d")
fi
git commit "$@" --author "$author"
スクリプトをエイリアス実行として追加するには、次のようにします。
$ git config alias.commit-author '!git-commit.sh'
(3)ログインに使用したsshキーに基づいて作成者を自動的に設定します
それはあなた自身の答えです、より良い概観のためにここにコピーされます:
共有デプロイユーザーの/home/deploy/.ssh/authorized_keys
ファイルで、キーごとに環境変数を追加して、たとえば、次のようにしました。
environment="GIT_AUTHOR_EMAIL=ry4an@host.com",environment="GIT_AUTHOR_NAME=Ry4an on Dev" ssh-rsa AAAA...cXBcmHr ry4an@host.com
これも追加する必要があります:
PermitUserEnvironment yes
/etc/ssh/sshd_config
ファイルに。