8

私たちのチームがローカル開発ボックスにコミットしてコミットをプッシュする時間の99%。この場合、コミットに関する作成者情報は正しいです。ただし、ストレスが高いときは、誰かが開発サーバーで直接何かを微調整し、そこからコミットします。その場合、コミットの作成者情報はデフォルトで共有デプロイメントアカウントになります。

コミット時に作成者情報の入力をユーザーに求める方法はありますか?彼らはすることを覚えていないでしょう--author

私が見たものの、フィニッシュラインを完全に越えることができなかったものは次のとおりです。

  1. クライアント側フックを使用して、作成者文字列に「deploy」が含まれるコミットを拒否します
  2. 常に作成者情報を要求する設定を探しました
  3. ボックスへのログインに使用されたsshキーに基づいて作成者を自動的に設定してみてください

それらの1つを機能させる方法またはそれを行うための良い方法はありますか?

4

3 に答える 3

6

さて、私はこれを行う方法を見つけましたが、キーベースの認証を使用して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ファイルに。

user.name=ASKそれはうまくいきますが、そのようなものが存在する場合は、むしろ設定について学びたいと思います。

于 2012-08-09T15:25:40.027 に答える
0

皆さんにとってどのように機能するかはよくわかりませんが、開発者にエイリアスを設定して、--authorすべての通常のコミットにを追加することができます。

于 2012-08-09T14:31:05.190 に答える
0

残念ながら、私も本当に満足のいく解決策を見つけることができませんでした。私がこれまでに見つけたすべての解決策をリストアップします(あなたはあなたの質問ですでに最高の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ファイルに。

于 2018-03-10T21:26:32.503 に答える