2017-09-13 1 views
0

Ich habe 2 Befehle (die nicht mit git verbunden sind), die sowohl bei commits ausgeführt werden soll (spielt keine Rolle, ob vor oder nach) und nach zieht.Führen Sie nur git Hook-Operation, wenn Dateien in bestimmten Ordner geändert

Diese Befehle benötigen jedoch etwas Zeit, damit sie nicht bei jedem Commit oder Pull ausgeführt werden. Sie funktionieren nur dann sinnvoll, wenn sich Dateien in einem bestimmten Ordner seit ihrer letzten Ausführung geändert haben.

Sie erstellen oder aktualisieren eine Datei, die von git in demselben Ordner ignoriert wird. Natürlich sollte diese Datei, die geändert wird, nicht die Ausführung der Befehle auslösen, wenn das nächste Mal ein Commit oder Pull ausgeführt wird. Alle Dateien in diesem Ordner befinden sich auf der obersten Ebene (es gibt keine Unterverzeichnisse). Alle Dateien, deren Änderungen davon abhängen, ob die Befehle ausgeführt werden sollen, werden von git verfolgt. Wenn neue Dateien im Ordner erscheinen und noch nicht von git verfolgt werden, ist es mir egal, ob die Befehle bereits ausgeführt werden. Sie müssen jedoch ausgeführt werden, wenn ein Commit erstellt wird, das sie zum Repo hinzufügt.

Wie kann das angegangen werden?

+1

Ich vermute, dass [diese Antwort] (https://Stackoverflow.com/a/3068990/147356) ist, was Sie brauchen. – larsks

+0

@larks Danke! Mit Ihrem Hinweis konnte ich den Rest selbst erledigen. –

Antwort

0

Ich denke, das macht was ich will. Ich kam darauf, nachdem Larsks mir einen Hinweis gegeben hatte. Es gibt keinen Haken, der nur nach einem Pull ausgeführt wird.

Die Haken post-commit und post-merge haben jetzt diesen Inhalt:

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

.hooks/conditionallyMergeChangedPdfs enthält diese:

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

Leider ist dies offenbar nicht Thread-sicher, da man nicht den Hash-Wert des neuen bekommen commit, muss sich aber darauf verlassen, was der Repo enthält, wenn das Skript ausgeführt wird.

Verwandte Themen