4

大きなサイズのファイルと指定された拡張子ファイル (*.jar、*.zip) を防止するために、GIT に pre-receive フックを実装しようとしています。

pre-receive フックは、受信操作のために 1 回実行されます。引数は必要ありませんが、更新する参照ごとに、標準入力で次の形式の行を受け取ります。

(古い値) SP (新しい値) SP (参照名) LF

ここで、(old-value) は ref に格納されている古いオブジェクト名、(new-value) は ref に格納される新しいオブジェクト名、(ref-name) は ref の完全な名前です。新しい参照を作成するとき、(old-value) は 40 0 です。

ユーザーが既存のブランチのファイルを更新すると、「git diff」コマンドを使用して更新ファイルのリストを取得できます。次に、更新されたファイルを確認するだけです。

ただし、新しいブランチを作成する場合、ユーザーは既存のコミットに基づいて新しいブランチを作成し、ローカル リポジトリに変更を加えてからプッシュできます。この場合、既存のコミット後に使用された変更のチェックのみを行いたいです。GIT コマンドは、新しいブランチの元となったコミットを見つけるのに役立ちますか?

たとえば、ユーザーはブランチ 1 の最新のコミットに基づいてブランチ 2 を作成します。その後、commit2 と commit3 を作成します。次に、ブランチ 2 をプッシュします。

フックでは、(old-value) は 40 0 です。(新しい値) は commit3 です。(ref-name) は branch2 です。commit1 を取得したい。

commit3 --branch2

commit2

commit1 -- ブランチ 1

4

1 に答える 1

2

以前にプッシュされた最も近い先祖を探していると思います。ただし、マージがプッシュされている場合は、そのような先祖が複数存在する可能性があります。したがって、このコマンドが出力する各コミットに対して差分を確認する必要があると思います。

git rev-list --boundary <new-commit> --not --all | sed -n 's/^-//p'
于 2012-11-04T21:45:19.353 に答える