2017-09-13 10 views
0

커밋 (앞뒤 여부는 관계 없음)과 끌어 오기 후에 모두 실행하려는 2 개의 명령 (git과 관련 없음)이 있습니다.특정 폴더에있는 파일이 변경된 경우에만 git hook 조작 만 수행합니다.

그러나이 명령은 실행하는 데 약간의 시간이 걸리므로 모든 커밋 또는 풀에서 실행되도록하지는 않습니다. 마지막으로 실행 된 이후 특정 폴더의 파일이 변경된 경우에만 유용한 작업을 수행합니다.

동일한 폴더에서 git이 무시한 파일을 만들거나 업데이트합니다. 물론이 파일을 변경하면 다음에 커밋 또는 풀이 수행 될 때 명령이 실행되지 않아야합니다. 해당 폴더의 모든 파일은 최상위에 있습니다 (하위 디렉토리는 없습니다). 명령이 실행되어야하는지 여부와 관련된 변경 사항을 가진 모든 파일은 git에 의해 추적됩니다. 새 파일이 폴더에 나타나고 자식에 의해 아직 추적되지 않으면 명령이 이미 실행되었는지 여부는 신경 쓰지 않습니다. 그러나 repo에 추가하는 커밋이 만들어지면 실행해야합니다.

어떻게 해결할 수 있습니까?

+1

[이 답변] (https://stackoverflow.com/a/3068990/147356)이 필요한 것 같습니다. – larsks

+0

@larsks 감사합니다! 당신의 힌트로 나는 나머지를 나 자신으로 할 수있었습니다. –

답변

0

나는 이것이 내가 원하는 것을한다고 생각한다. larsks가 나에게 힌트를 준 후에 나는 그걸 생각 해냈다. 끌어 오기 후에 만 ​​실행되지만 병합 후에도 수행하는 후크가 없습니다. 분명히 하나는 새의 해시를 얻을 수 없기 때문에

#!/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 

불행하게도,이 스레드로부터 안전하지 않습니다 :

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

.hooks/conditionallyMergeChangedPdfs이 포함

후크 post-commitpost-merge 이제이 내용이 커밋하지만 대신 스크립트가 실행될 때 repo에 포함 된 내용에 의존해야합니다.