4

コミットが完了する前にプロジェクトをテストするためにコミット前フックを設定しようとしていますが、HEAD (現在のコミットからのパッチを含む) のみがテストされ、現在の working_tree (ほとんどの場合、これは私にとって汚いです)。

見つかった解決策:

このリンクを見つけて、最終的に次のことを行いました。

http://newartisans.com/2009/02/building-a-better-pre-commit-hook-for-git/

# Checkout a copy of the current index into MIRROR
git checkout-index --prefix=$TMPDIR/ -af

# Remove files from MIRROR which are no longer present in the index
git diff-index --cached --name-only --diff-filter=D -z HEAD | \
   (cd $TMPDIR && xargs -0 rm -f --)
4

1 に答える 1

1

実際に検証およびテストしているものに依存します。git diff --cachedそのため、チェックインしたファイルにコンテンツが含まれていないかどうかを確認しようとしているgit diff場合は、適切な変更が行われるようにする必要があります。同様に、使用しているコマンドなどを確認する必要があります。

単体テストについては、次のようなものを提案できます (他の方法もあります)。

post-commit次のように(プリコミットではない) フックを作成します。

#!/bin/sh
git stash
#run unit tests
#if tests fail
git stash pop --index
git reset --soft HEAD~1 
exit 0   # if tests pass

pre-commit を使用する代わりに、インデックスを別のディレクトリにチェックアウトし、そこからテストを実行することもできます。をご覧くださいgit checkout-index。私はこの方法でそれを使用していないので、これ以上コメントすることはできません.

于 2011-09-21T07:14:12.767 に答える