2

前の質問への回答に続いて、作業ディレクトリが更新されるたびに起動する必要がある Git フック スクリプトを実装しました。このスクリプトを .git/hooks の以下にリンクしました。

  • チェックアウト後
  • ポストコミット
  • マージ後

これはほとんどの場合機能しますが、常に機能するとは限りません。私が見つけた1つのケースはgit stash. git update-index --assume-unchanged変更をチェックインしたくない (空のバージョンがチェックインされる) ことを Git に伝えるために、 でマークしたテキスト ファイルをフックが生成するため、これは問題です。ただし、git stashは未変更のファイルを (空のファイルに) 戻します。これは、フックを再度実行する必要があることを意味しますが、フックは の後に呼び出されませんgit stash

同様の問題が存在する可能性があると思われgit rebaseますが、それを説明するのは簡単ではありません。

作業ディレクトリの更新後に Git が常に実行するフックが必要です。これは可能ですか?

4

1 に答える 1

1

よくわかりません( 「「git stash pop」がファイルを変更済みとしてマークするのを防ぐ方法はありますか?git stash pop 」でいくつかの代替手段を提供しています)。

git update-index--skip-worktreegit stash の問題を回避できる別のオプションが付属しています。
Git - ' assume-unchanged' と ' skip-worktree'の違い」を参照してください。


しかし、 については、フックgit rebaseに興味があるかもしれません:post-rewrite

このフックは、コミットを書き換えるコマンドによって呼び出されます ( git commit --amend, git-rebase; は現在git-filter-branch呼び出していません!)。
その最初の引数は、それが呼び出されたコマンドを示します: 現在は amend または rebase のいずれかです。将来、さらにコマンド依存の引数が渡される可能性があります。

フックは、標準入力で書き換えられたコミットのリストを次の形式で受け取ります。

<old-sha1> SP <new-sha1> [ SP <extra-info> ] LF

これextra-infoもコマンド依存です。空の場合、前の SP も省略されます。現在、追加情報を渡すコマンドはありません。

于 2013-08-23T06:10:47.973 に答える