3

git-diff やその他のツールを実行すると、リポジトリ内の変更を特定できることはわかっていますが、部分的なコミットを行う場合は、(変更されたファイルのセット全体ではなく) コミットされたファイルのみを pre-commit に渡す必要があります。針。

たとえば、3 つのファイルを変更して 2 つだけをコミットし、pre-commit フックに 2 つのファイルの名前を認識させたいとします。

git status --porcelain

M A.c 
M B.c
M C.h

次に実行します:

git commit -m "two files only" A.c B.c

pre-commit フックが 2 つのファイルのみのリストを取得するにはどうすればよいですか?

4

2 に答える 2

7

pre-commit は、コミット プロセスの開始時に実行されます... @Vince のリンクを参照してください。フックが実行されると、スクリプトはgit diff --cached --name-onlyprecommit スクリプト内のステージングされたファイルの名前を取得するために使用できます。このコマンドは、ユーザーがコミットのためにさらにステージングした場合でも機能しますが、コマンド ラインでファイルのサブセットをコミットするように要求しただけです。

于 2012-08-29T09:38:15.577 に答える
0

あなたの質問はもっとあると思います:プレコミットフックはいつトリガーされますか?

そして [私はちょうどフックを発見しました、それはクールなようです]どうやら、実行前に pre-commit フックがトリガーされるようですgit commit(「Hello World」スクリプトを接続して、いつトリガーされるかを正確に確認することもできます)。

しかし、私が考えることができるのは、追加コマンドです: git add -u A.c B.c(uは更新を表します)。実行したら、コミットコマンドはこれらのファイルをコミットします(実行するだけですgit commit -m mymessage

追加されたファイルのリストを取得する方法は正確にはわかりません (おそらくインデックスを介して) が、これが役立つことを願っています

参考: http: //git-scm.com/book/en/Customizing-Git-Git-Hooks

于 2012-08-29T08:51:07.710 に答える