2017-04-11 14 views
0

gitのpre-commitフックを使用していくつかのルールを適用しようとしています。 git diff --name-onlyを使用して、ステージングされていない変更されたファイルがないかどうかを確認したい場合は、コミットプロセスに失敗します。しかし、私のpre-commitファイルに:pre-commitフックのGitコマンドが正しい出力を返さない

#!/bin/bash 
cd "$(git rev-parse --show-toplevel)" 
pwd 
test=$(git diff --name-only) 
echo "Untracked files: $test" 
exit 0 

git diff --name-only空の文字列を返します。シェルでそのコマンドを実行すると、ステージングされていないファイルが変更されたことがわかります。 sudoを使用するようにコマンドを変更すると、正しく動作しているように見えますが、この問題はユーザーのアクセス許可に関連すると考えられます。しかしchmod u+xまたはさらにファイルを添付しているchmod 777は結果に影響しないようです。

また、コマンドをテストするためにgit repoルートの中に同様のbashファイルを作成しました。これは期待どおりに動作します。

+0

問題を再現できません。しかし、 'git diff -name-only'はインデックスを作業ツリーと比較するので、変更されたファイルを探します(あなたのテキストはあなたが望むものです)。これまではうまくいきましたが、あなたはそうしています: 'エコー"未トラッキング... "unstaged *ではなくuntracked *という単語があります。 – torek

+0

@torek良いキャッチ、それはunstagedと言います。 – Bloodyaugust

答えて

0

git diff --stagedを使用してステージングされたファイルを表示する必要があります。

git commitがプリコミットスクリプトの実行をトリガーしていることを確認してください。 git commitの場合、最初の行はリポジトリディレクトリであることを確認してください。

私はあなたのスクリプトをテストしましたが、それは間違いありません。ですから、pre-commit.sampleからpre-commitに名前を変更することに気づくでしょうか?

関連する問題