{"id":232183,"date":"2023-01-11T09:30:00","date_gmt":"2023-01-11T06:30:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=232183"},"modified":"2022-11-10T07:58:22","modified_gmt":"2022-11-10T04:58:22","slug":"comment-utiliser-les-crochets-git-pour-detecter-les-modifications-apportees-a-un-fichier-de-verrouillage-et-afficher-un-message","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/comment-utiliser-les-crochets-git-pour-detecter-les-modifications-apportees-a-un-fichier-de-verrouillage-et-afficher-un-message\/","title":{"rendered":"Comment utiliser les crochets Git pour d\u00e9tecter les modifications apport\u00e9es \u00e0 un fichier de verrouillage et afficher un message"},"content":{"rendered":"\n<p>Lorsque nous travaillons en \u00e9quipe collaborative, de temps en temps un d\u00e9veloppeur doit ajouter un nouveau package \u00e0 une branche qui est ensuite fusionn\u00e9e dans master. Quelqu&rsquo;un peut ne pas en \u00eatre conscient et simplement tirer le ma\u00eetre et ex\u00e9cuter l&rsquo;application uniquement pour la faire planter en raison du paquet manquant. Voyons comment nous pouvons utiliser les crochets Git pour d\u00e9tecter les modifications apport\u00e9es \u00e0 a <code>package.json<\/code>ou a <code>yarn.lock<\/code>et afficher un message invitant l&rsquo;utilisateur \u00e0 installer les d\u00e9pendances manquantes.<\/p>\n<h2>Que sont les crochets Git\u00a0?<\/h2>\n<p>Les crochets Git sont d\u00e9clench\u00e9s lorsqu&rsquo;un \u00e9v\u00e9nement Git se produit, tel qu&rsquo;un nouveau commit, l&rsquo;envoi de commits vers une branche en ligne, l&rsquo;extraction de commits, l&rsquo;extraction d&rsquo;une branche ou la fusion d&rsquo;une branche. Ces processus se terminent par 0 lorsqu&rsquo;ils se terminent correctement ou par une autre valeur lorsqu&rsquo;ils se terminent incorrectement.<\/p>\n<p>Si le processus accroch\u00e9 se termine par 0, l&rsquo;action Git se poursuit. Sinon, l&rsquo;action Git est bloqu\u00e9e. Par exemple, si vous configurez un hook Git pr\u00e9-commit pour pelucher votre code, Git l&rsquo;ex\u00e9cutera lorsque vous ferez un <code>git commit<\/code>. Si le lint \u00e9choue, le commit ne passera pas.<\/p>\n<p>Les crochets Git sont int\u00e9gr\u00e9s \u00e0 Git et la liste des crochets est tr\u00e8s longue. Par exemple, vous avez <a href=\"https:\/\/www.git-scm.com\/docs\/githooks#_pre_push\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pre-push<\/a>, <a href=\"https:\/\/www.git-scm.com\/docs\/githooks#_post_commit\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">post-commit<\/a>, <a href=\"https:\/\/www.git-scm.com\/docs\/githooks#_post_checkout\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">post-checkout<\/a>, <a href=\"https:\/\/www.git-scm.com\/docs\/githooks#_post_merge\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">post-merge<\/a> et de nombreux autres <a href=\"https:\/\/www.git-scm.com\/docs\/githooks\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">crochets Git<\/a>.<\/p>\n<h2>Ex\u00e9cutez des crochets Git avec Husky<\/h2>\n<p>Pour ex\u00e9cuter certaines t\u00e2ches lorsque les crochets Git sont d\u00e9clench\u00e9s, nous pouvons utiliser le <a href=\"https:\/\/github.com\/typicode\/husky\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">package Husky<\/a> pour <a href=\"https:\/\/startfunction.com\/tag\/node-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Node.js<\/a>. Husky nous permet de sp\u00e9cifier dans un <code>package.json<\/code>fichier les scripts \u00e0 ex\u00e9cuter lorsqu&rsquo;un crochet Git est d\u00e9clench\u00e9. Installez le package Husky avec NPM\u00a0:<\/p>\n<pre><code>npm i -D husky<\/code><\/pre>\n<p>ou Fil:<\/p>\n<pre><code>yarn add -D husky<\/code><\/pre>\n<p>Vous devez maintenant initialiser Husky pour les hooks Git. Si vous utilisez NPM\u00a0:<\/p>\n<pre><code>npx husky install<\/code><\/pre>\n<p>et si vous utilisez Yarn<\/p>\n<pre><code>yarn husky install<\/code><\/pre>\n<p>et voil\u00e0, vous avez maintenant install\u00e9 et configur\u00e9 Husky pour ex\u00e9cuter les crochets Git. Il est enfin temps de d\u00e9finir un crochet !<\/p>\n<h2>Ajouter un crochet Git post-fusion pour v\u00e9rifier les modifications du fichier de verrouillage<\/h2>\n<p>Nous voulons ex\u00e9cuter du code pour nous alerter si les fichiers <code>package-lock.json<\/code>ou <code>yarn.lock<\/code>ont chang\u00e9. Cela se produit g\u00e9n\u00e9ralement lorsque nous tirons <code>master<\/code>et que ces fichiers ont chang\u00e9. Nous pouvons configurer un hook \u00e0 ex\u00e9cuter lorsque nous fusionnons une branche.<\/p>\n<p>Pour sp\u00e9cifier nos crochets Git \u00e0 Husky, nous les d\u00e9finissons dans le <code>package.json<\/code>fichier. Ajoutez ceci en tant que cl\u00e9 de niveau sup\u00e9rieur\u00a0:<\/p>\n<pre><code>\"husky\": {\n    \"hooks\": {\n      \"post-merge\": \".\/githooks\/post-merge-hook.sh\"\n    }\n}<\/code><\/pre>\n<p>Ce que cela dit, c&rsquo;est qu&rsquo;apr\u00e8s la fusion d&rsquo;une branche, nous ex\u00e9cuterons ce script. Nous devons maintenant le cr\u00e9er. Cr\u00e9ez un dossier, ajoutez-y un fichier et d\u00e9finissez-le pour qu&rsquo;il soit ex\u00e9cutable\u00a0:<\/p>\n<pre><code>mkdir githooks &amp;&amp; cd githooks &amp;&amp; touch post-merge-hook.sh &amp;&amp; chmod +x post-merge-hook.sh<\/code><\/pre>\n<p>Si vous ne le d\u00e9finissez pas pour qu&rsquo;il soit ex\u00e9cutable, vous rencontrerez une erreur \u00ab\u00a0Permission refus\u00e9e\u00a0\u00bb lorsque Husky tentera d&rsquo;ex\u00e9cuter ce crochet Git. Modifiez maintenant le fichier avec Vim ou votre \u00e9diteur pr\u00e9f\u00e9r\u00e9 et collez-y ceci\u00a0:<\/p>\n<pre><code>\nchangedFiles=\"$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)\"\n\nrunOnChange() {\n    echo \"$changedFiles\" | grep -q \"$1\" &amp;&amp; echo -e \"$2\"\n}\n\nrunOnChange package-lock.json \"033[35m*******************************************************************************n* 033[33mpackage-lock.json033[35m has changed. Run033[33m npm install033[35m to update your dependencies. *n*******************************************************************************\"\n\nexit 0\n<\/code><\/pre>\n<p>Cela imprimera un message en violet avec les mots <code>package-lock.json<\/code>et <code>npm install<\/code>en orange. Ce script v\u00e9rifie si <code>package-lock.json<\/code>a \u00e9t\u00e9 mis \u00e0 jour et si vous souhaitez tester \u00e0 la <code>yarn.lock<\/code>place, vous devrez simplement remplacer le nom du fichier.<\/p>\n<h2>Tester la v\u00e9rification des modifications du fichier de verrouillage<\/h2>\n<p>Tester ce n&rsquo;est pas trop complexe. En gros, il vous suffit de cr\u00e9er une nouvelle branche, d&rsquo;installer un package pour le <code>package-lock.json<\/code>modifier, de le valider et de passer \u00e0 la branche pr\u00e9c\u00e9dente. Tout ce qui peut \u00eatre fait avec cette commande :<\/p>\n<pre><code>git checkout -b testbranch &amp;&amp; npm i -D lint-staged &amp;&amp; git add. &amp;&amp; git commit -m \"test\" &amp;&amp; git checkout - <\/code><\/pre>\n<p>Maintenant, vous devez le fusionner sur cette branche<\/p>\n<pre><code>git merge testbranch<\/code><\/pre>\n<p>Cela d\u00e9clenchera le crochet post-fusion et ex\u00e9cutera notre script. Vous verrez alors ce message dans la ligne de commande car le <code>package-lock.json<\/code>a \u00e9t\u00e9 modifi\u00e9 lors de la fusion\u00a0:<\/p>\n<h2>D\u00e9tection d&rsquo;un changement de fichier de verrouillage dans VS Code<\/h2>\n<p>Ce n&rsquo;\u00e9tait qu&rsquo;une seule utilisation. Les crochets Git peuvent \u00eatre utilis\u00e9s de plusieurs fa\u00e7ons, par exemple, pour ex\u00e9cuter le package populaire Prettier avant de valider quelque chose pour formater votre code.<\/p>\n<p>Il existe des alternatives pour ce cas particulier, de v\u00e9rifier si <code>package-lock.json<\/code>a \u00e9t\u00e9 mis \u00e0 jour. Par exemple, pour VS Code, il existe un package astucieux <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=matteopieroni.refresh-npm-packages\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Refresh NPM Packages<\/a> qui vous invitera \u00e0 mettre \u00e0 jour vos packages s&rsquo;il d\u00e9tecte une modification. Il fonctionnera ind\u00e9pendamment du fait que vous ayez configur\u00e9 ou non des crochets Git. Une autre bonne chose est que cela fonctionnera lorsque vous changerez de branche, m\u00eame sans fusionner l&rsquo;une dans l&rsquo;autre.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157772-61e6c09a98d0e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-157772-61e6c09a98d0e.png\" alt=\"Comment utiliser les crochets Git pour d\u00e9tecter les modifications apport\u00e9es \u00e0 un fichier de verrouillage et afficher un message\" ><\/a><\/p>\n<p>Cependant, l&rsquo;avantage de ce que nous avons impl\u00e9ment\u00e9 ici est qu&rsquo;il s&rsquo;ex\u00e9cutera en ligne de commande et ne d\u00e9pendra pas d&rsquo;un \u00e9diteur de code particulier. Si vous travaillez par exemple sur un projet open source, vous souhaiterez peut-\u00eatre configurer ce qui est d\u00e9crit ici afin qu&rsquo;il existe un terrain d&rsquo;entente pour tous les d\u00e9veloppeurs impliqu\u00e9s, quelle que soit leur configuration.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/startfunction.com\" class=\"external external_icon\">startfunction.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apprenez \u00e0 d\u00e9tecter les modifications apport\u00e9es \u00e0 un package-lock.json ou \u00e0 un fichier yarn.lock et \u00e0 afficher un message \u00e0 l&rsquo;aide des crochets Git et Husky<\/p>\n","protected":false},"author":1,"featured_media":157773,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,769,717,832,780,748,841],"tags":[1167],"class_list":["post-232183","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-controle-des-sources","category-developpeur","category-guide-pour-les-debutants","category-logiciels-open-source","category-open-source-projektmanagement-2","category-tutoriels","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/232183","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=232183"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/232183\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/157773"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=232183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=232183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=232183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}