2017-09-13 13 views
0

コミット(前または後のどちらでもない)とプル後の両方で実行したい2つのコマンド(gitに関係しません)があります。特定のフォルダ内のファイルが変更されたときにのみgitフック操作を実行します

しかし、これらのコマンドは実行に時間がかかります。そのため、コミットまたはプルするたびにこれらのコマンドを実行する必要はありません。特定のフォルダ内のファイルが最後に実行されてから変更された場合にのみ有用な作業です。

同じフォルダ内のgitで無視されるファイルを作成または更新します。もちろん、変更されているこのファイルは、次にコミットまたはプルが実行されたときにコマンドの実行をトリガするべきではありません。そのフォルダ内のすべてのファイルがその最上位にあります(サブディレクトリはありません)。コマンドが実行されるべきかどうかに関係のある変更は、gitによって追跡されます。新しいファイルがフォルダに現れ、gitでまだ追跡されていないときは、コマンドがすでに実行されているかどうかは気にしません。しかし、それらをrepoに追加するコミットが作成されたときに実行されなければなりません。

これはどのように対処できますか?

+1

[この回答](https://stackoverflow.com/a/3068990/147356)が必要と思われます。 – larsks

+0

@larsksありがとう!あなたのヒントで私は自分自身で残りをすることができました。 –

答えて

0

私はこれが欲しいと思います。ラルスクが私にヒントを与えた後、私はそれを思いついた。プル後にのみ実行するフックはありませんが、マージ後もやっています。

フックpost-commitpost-mergeは今このコンテンツを持っている:

#!/bin/sh 
./.hooks/conditionallyMergeChangedPdfs 
exit 0 

.hooks/conditionallyMergeChangedPdfsはこれを含んでいます。どうやら1は、新規のハッシュを取得することはできませんので

#!/bin/bash 
for folder in "Vorlesungsfolien" "Übungsfolien" 
do 
    diff="$(git diff HEAD^ --name-only --diff-filter=ACMR "$folder")" 
    if [ ! -z "$diff" ] 
    then 
    rm -f "$folder/All.pdf" 
    pdftk "$folder/"* cat output "$folder/All.pdf" 
    fi 
done 

残念ながら、これはスレッドセーフではありませんコミットするが、代わりにスクリプトが実行されるときにリポジトリに含まれているものに依存しなければならない。

関連する問題