Git pré-recevoir crochet
Lorsque vous activez pré-recevoir crochet pour le dépôt git:
Il ne prend pas d'arguments, mais pour chaque ref être mis à jour, il reçoit sur l'entrée standard d'une ligne de la forme:
< vieux-valeur > SP < la nouvelle valeur > SP < ref-name > LF
où < vieux-valeur > est l'ancien nom de l'objet stocké dans le ref, < la nouvelle valeur > est le nouveau nom de l'objet à être stockés dans le ref et est le nom complet de la réf. Lors de la création d'un nouveau ref, < vieux-valeur > 40 0.
Quelqu'un peut m'expliquer comment puis-je examiner tous les fichiers qui seront modifiées dans le référentiel si je puis me permettre ce commit?
Je voudrais que les fichiers à travers quelques scripts pour vérifier la syntaxe et ainsi de suite.
Grâce.
OriginalL'auteur rzajac | 2010-04-03
Vous devez vous connecter pour publier un commentaire.
Bizarrement, j'ai eu un peu de code autour de la pose d'un git -> WordPress utilitaire qui peut vous aider. Le tableau suivant vous donne une liste de tous les fichiers modifiés dans la réception, ainsi que leur contenu. Aucune garantie, peut avoir des bugs, peut-être pas le moyen le plus efficace de le faire, bla bla bla. Une partie de ce code est basé sur des trucs en gitshelve, qui est vraiment une bonne chose à regarder pour générique git maniuplation.
get_changed_files
de sorte qu'il utilise--name-only
qui en fait le résultat de l'analyse de plus simple: gist.github.com/1055516OriginalL'auteur brool
J'ai juste fait ce. Voici le flux de base que j'ai utilisé.
Dans votre pré-recevoir crochet, de lire chaque ligne à partir de stdin, qui (comme vous l'avez mentionné) ressembler à ceci:
Pour chaque (oldref, newref) paire vous devez dresser une liste de tous les commits:
pour chaque commit, vous devez dresser une liste de tous les fichiers:
examiner un fichier, utilisez git show:
faire ce que la vérification du contenu du fichier ici. Si vous souhaitez avertir l'utilisateur d'un problème, d'écrire sur la sortie stderr
après une itération à tous les arbitres, les validations et les fichiers de sortie différent de zéro pour rejeter la pousser, ou zéro pour permettre
Noter que cette approche promenades tous les commits dans l'ordre, donc, si un fichier est modifié dans plusieurs commits chaque version de passer des examens. Si vous voulais seulement voir chaque fichier dans un pousser une fois, de traverser les commet dans l'ordre inverse au lieu de cela, et il suffit de ne pas examiner un fichier donné deux fois. Je recommande la première approche, cependant, de sorte que toutes les versions de poussé dossiers sont examinés.
git show --format=format:%H --quiet oldref..newref
. Peut-être parce que j'ai ajouté de nouveaux fichiers dans le repo et la diff était contre /dev/null :D. je pense quegit log --format=%H oldref newref
devrait faire la même chose et il n'y a pas de diff 🙂OriginalL'auteur drizzo4shizzo
Si vous voulez savoir la question de savoir si les autorisations des fichiers sont modifiés dans le référentiel local avant de le pousser de dépôt distant, lancez
git ls-tree -r commit
, où la validation est le SHA commettre valeur de la source locale.Cette commande donne la liste des fichiers avec leurs autorisations, qui peut être analysée afin de vérifier si l'autorisation d'un fichier est modifié avant de le pousser.
OriginalL'auteur Vinay