Il y a certains fichiers comme les migrations ou les fichiers de settings dont vous avez besoin de connaître l’état. Si un collègue les modifie et les push, vous voulez le savoir au moment du pull. Bien sûr vous pouvez scruter la liste des modifs à ce moment là, mais n’est-ce pas tellement mieux si votre ordinateur fait ça pour vous et affiche une grosse alerte rouge ?
Mettez le code suivant du le fichier .git/hooks/post-merge de votre repo en local :
#!/bin/bash # On met ici tous les fichiers (ou pattern de nom) qu'on veut surveiller # changez les pour les adapter à votre projet files=('settings.py' 'migrations'); # on récupère tous les noms de fichiers modifiés depuis le dernier merge modified_files=`git diff "HEAD@{1}" --name-only` # on boucle sur chaque nom de fichier surveillé for watched_file in "${files[@]}"; do # on liste tous les fichiers modifiés qui correspondent à ce nom de # fichier surveillé modified_watched_files=(`echo "$modified_files" | grep $watched_file`) # si le nombre de fichiers correspondant est plus grand que 0 if [ ${#modified_watched_files[@]} ]; then # pour chaque fichier qui correspond, on affiche un avertissement # en rouge for modified_watched_file in "${modified_watched_files[@]}"; do echo -e "\e[41m "$modified_watched_file" has changed \033[0m" done fi done |
Le hook post-merge est exécute après git pull (et seulement si il n’y a pas eu de conflit). Il va afficher une bonne grosse alerte en rouge pour chaque fichier surveillé qui a été modifié entre avant et après le pull.
Notez au passage la syntaxe intuitive de bash pour utiliser des tableaux. On dirait presque que le mec qui a codé bash était un pote du gars qui a codé git.
Pour la syntaxe, man bash et c’est réglé !
Ou pas…