{"id":1146,"date":"2023-03-31T16:50:52","date_gmt":"2023-03-31T15:50:52","guid":{"rendered":"https:\/\/geekcommunicant.com\/blog\/?p=1146"},"modified":"2023-03-31T16:50:53","modified_gmt":"2023-03-31T15:50:53","slug":"commandes-git-a-utiliser-presque-au-quotidien","status":"publish","type":"post","link":"https:\/\/geekcommunicant.com\/blog\/2023\/03\/31\/commandes-git-a-utiliser-presque-au-quotidien\/","title":{"rendered":"Quelques commandes git que j&rsquo;utilise (presque) au quotidien"},"content":{"rendered":"\n<p>Aujourd\u2019hui, j\u2019ai d\u00e9cid\u00e9 de parler d\u2019un outil que j\u2019utilise au quotidien dans ma vie professionnelle, le syst\u00e8me de gestion de version git.<\/p>\n\n\n\n<p>Avec cet outil j\u2019utilise certaines commandes tr\u00e8s utiles. Mais je n\u2019avais pas d\u2019id\u00e9e de comment contextualiser ces commandes pour vous en parler. Cet alors que je me suis souvenu d\u2019un projet grace auquel j\u2019avais pu un peu monter en comp\u00e9tence : gitstery.<\/p>\n\n\n\n<p>Ce d\u00e9pot est disponible \u00e0 cette adresse : <a href=\"https:\/\/github.com\/nivbend\/gitstery\">https:\/\/github.com\/nivbend\/gitstery<\/a>.<\/p>\n\n\n\n<p>Le fichier README du projet, visible sur la racine du projet pr\u00e9sente d\u00e9j\u00e0 deux commandes git.<\/p>\n\n\n\n<p>La premi\u00e8re, est la commande de base si vous voulez r\u00e9cup\u00e9rer un projet sur votre machine, <code>git clone<\/code>.<\/p>\n\n\n\n<p>Cette commande, sous sa forme la plus basique, se pr\u00e9sente comme ceci : <code>git clone &lt;url_du_projet&gt;<\/code>. Par d\u00e9faut, le contenu sera plac\u00e9 dans un dossier portant comme nom la derni\u00e8re partie de l\u2019URL dans notre cas gitstery.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\ngit clone https:\/\/github.com\/nivbend\/gitstery\n<\/pre><\/div>\n\n\n<p>Apr\u00e8s s\u2019\u00eatre d\u00e9plac\u00e9 dans ce nouveau dossier, il faut lire le contenu du fichier instructions.txt pr\u00e9sent dans ce dossier. Pour cela, on pourrait utiliser la commande Unix de base cat. Mais, comme indiqu\u00e9 dans le README, git dispose de sa propre commande : <code>git cat-file<\/code>.<\/p>\n\n\n\n<p>Cette commande se d\u00e9compose comme suit : <code>git cat-file &lt;type_objet&gt; &lt;hash&gt;:chemin\/vers\/objet<\/code>.<\/p>\n\n\n\n<p>Dans notre cas, ce que nous voulons, c\u2019est le contenu du fichier instructions.txt, \u00e0 l\u2019endroit o\u00f9 nous nous trouvons (HEAD).<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\ngit cat-file blob HEAD:instructions.txt\n<\/pre><\/div>\n\n\n<p>Comme indiqu\u00e9 \u00e0 la fin de ce fichier, je vais par la suite vous pr\u00e9senter des commandes permettant de faire notre enqu\u00eate sans quitter la branche actuelle (avec la commande git checkout).<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Premi\u00e8re \u00e9tape de l\u2019enqu\u00eate<\/h2>\n\n\n\n<p>La premi\u00e8re \u00e9tape consiste \u00e0 trouver, \u00e0 l&rsquo;aide de la commande <code>git log<\/code>, dans la branche \u2018gtpd-archive\u2019, des rapports d\u2019enqu\u00eates soumis par Kyle Pumbinner dans les 7 jours apr\u00e8s le 20 juillet.<\/p>\n\n\n\n<p>Pour filter par auteur, il suffit d\u2019utiliser l\u2019option <code>--author<\/code>, ce qui dans notre cas donne <code>--author='pumbinner\u2019<\/code>.<\/p>\n\n\n\n<p>Pour pouvoir utiliser les filtres de date, il nous faut la date au complet. Dans notre cas, il nous manque l\u2019ann\u00e9e.<\/p>\n\n\n\n<p>Un rapide coup d\u2019\u0153il \u00e0 l\u2019historique de la branche \u2018gtpd-archive\u2019 (<code>git log origin\/gtpd-archive<\/code>) nous permet de se rendre compte que l\u2019ann\u00e9e est 2019.<\/p>\n\n\n\n<p>Maintenant que nous connaissons l\u2019ann\u00e9e, nous pouvons correctement utiliser les filtres de date.<\/p>\n\n\n\n<p>Pour pr\u00e9ciser la date \u00e0 partir de laquelle nous voulons voir les commits, on utilise l\u2019option <code>--after<\/code>. Et pour pr\u00e9ciser la date jusqu\u2019\u00e0 laquelle on veut voir les commits, il s\u2019agit de l\u2019option <code>--until<\/code>.<\/p>\n\n\n\n<p>La commande permettant de trouver dans la branche \u2018gtpd-archives\u2019 les commits soumis par l\u2019utilisateur Kyle Pumbinner entre le 20 et le 27 juillet est donc la suivante :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\ngit log origin\/gtpd-archive --author=&#039;pumbinner&#039; --after=&#039;2019-07-20&#039; \u2013until=&#039;2019-07-27&#039;\n<\/pre><\/div>\n\n\n<p>Avec cette commande, un seul commit remonte, et son message nous apprend que notre enqu\u00eateur a stock\u00e9 les journaux d\u2019acc\u00e8s dans une branche &lsquo;detectives\/kpumbinner&rsquo; et que nous devons retrouver les personnes ayant inscrit \u00ab\u00a0BACKDOOR_332\u00a0\u00bb dans ces journaux d\u2019acc\u00e8s.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deuxi\u00e8me \u00e9tape, trouver des suspects<\/h2>\n\n\n\n<p>Ici nous voulons donc pouvoir filtrer le contenu des commits. Pour cela, il existe l\u2019option <code>-G<\/code> de la commande <code>git log<\/code>. Dans notre cas, pour retrouver dans la branche &lsquo;detectives\/kpumbinner&rsquo; les commits comportant la cha\u00eene de caract\u00e8res \u00ab\u00a0BACKDOOR_332\u00a0\u00bb, cela donne:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\ngit log origin\/detectives\/kpumbinner -G \u2018BACKDOOR_332\u2019\n<\/pre><\/div>\n\n\n<p>Nous voyons donc que trois personnes ont acc\u00e9d\u00e9 \u00e0 la fameuse backdoor 332.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Troisi\u00e8me \u00e9tape, aller interroger ces suspects<\/h2>\n\n\n\n<p>Maintenant que nous avons des noms, il nous faut interroger ces personnes.<\/p>\n\n\n\n<p>Le fichier instructions.txt nous indique que un nom de rue correspond \u00e0 un tag, et que le num\u00e9ro correspond au x-i\u00e8me anc\u00eatre de ce tag. Pour inspecter les alentours, le contenu du commit contient un hash, qu\u2019il suffit d\u2019aller inspecter.<\/p>\n\n\n\n<p>Pour voir la liste des tags:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\ngit tag --list\n<\/pre><\/div>\n\n\n<p>Nous voyons donc que les rues sont accessibles dans un \u201cdossier\u201d \u2018street\u2019, et que chaque rue y est inscrite tout en minuscules et avec les espaces remplac\u00e9s par des underscores.<\/p>\n\n\n\n<p>Pour trouver l\u2019adresse d\u2019un suspect, il suffit de chercher son nom dans le repo \u00e0 l\u2019\u00e9tat actuel. Cela se fait en utilisant la commande:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\ngit grep \u2018&lt;nom_de_la_personne&gt;\u2019\n<\/pre><\/div>\n\n\n<p>Pour notre premier suspect, cela donne:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\ngit grep \u2018Brock Stuickard\u2019\n<\/pre><\/div>\n\n\n<p>Nous apprenons donc que notre Monsieur Stuickard habite au num\u00e9ro 9 de la rue \u2018Beaconside\u2019. Pour aller l\u2019interroger, il faut utiliser la commande <code>git show<\/code>, sur le 9e anc\u00eatre du tag street\/beaconside. Cela donne:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\ngit show tags\/street\/beaconside~9\n<\/pre><\/div>\n\n\n<p>Bon, ce n\u2019est pas notre homme, mais il nous a donn\u00e9 un indice important.<\/p>\n\n\n\n<p>Par acquis de conscience, jetons un \u0153il aux alentours. Nous voyons apr\u00e8s le message de commit les modifications apport\u00e9es par ce commit. Ici, ce qui nous int\u00e9resse, c\u2019est le contenu ajout\u00e9, ce qui correspond \u00e0 la ligne pr\u00e9c\u00e9d\u00e9e d\u2019un signe \u201c+\u201d. Il suffit ensuite d\u2019utiliser la commande git show sur ce hash:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\ngit show d1278ebc164050fe1e5526fbba6a8cfbe763f1d2\n<\/pre><\/div>\n\n\n<p>Pour aller interroger les autres suspects, il suffit de r\u00e9utiliser <code>git grep<\/code> avec les autres noms et d\u2019\u00e0 nouveau utiliser git show pour atteindre l\u2019adresse trouv\u00e9e et examiner les alentours.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Derni\u00e8re \u00e9tape, la v\u00e9rification<\/h2>\n\n\n\n<p>Pour v\u00e9rifier si la personne que vous soup\u00e7onnez est bien coupable, la s\u00e9rie de commandes et pr\u00e9sent\u00e9e dans le fichier instructions.txt.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>J&rsquo;esp\u00e8re que les commandes que je vous ai pr\u00e9sent\u00e9es vous aideront dans vos projets actuels et futur.<\/p>\n\n\n\n<p>\u00c0 bient\u00f4t pour de nouveaux messages \u00e0 caract\u00e8res informatifs tr\u00e8s int\u00e9ressants \ud83d\udc4b<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aujourd\u2019hui, j\u2019ai d\u00e9cid\u00e9 de parler d\u2019un outil que j\u2019utilise au quotidien dans ma vie professionnelle, le syst\u00e8me de gestion de version git. Avec cet outil j\u2019utilise certaines commandes tr\u00e8s utiles. Mais je n\u2019avais pas d\u2019id\u00e9e de comment contextualiser ces commandes &hellip; <a href=\"https:\/\/geekcommunicant.com\/blog\/2023\/03\/31\/commandes-git-a-utiliser-presque-au-quotidien\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[12],"tags":[63,60,61,62],"class_list":["post-1146","post","type-post","status-publish","format-standard","hentry","category-divers","tag-cli","tag-git","tag-gitstery","tag-ligne-de-commande"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2IoOb-iu","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1126,"url":"https:\/\/geekcommunicant.com\/blog\/2023\/03\/03\/le-sitemap-la-carte-de-votre-site\/","url_meta":{"origin":1146,"position":0},"title":"Le sitemap, la carte de votre site","author":"geekc","date":"03\/03\/2023","format":false,"excerpt":"Aujourd\u2019hui, nouveau sujet de SEO. Cette fois-ci, j\u2019ai d\u00e9cid\u00e9 de parler de sitemap. C\u2019est quoi une sitemap\u00a0? Comme sa traduction quasi litt\u00e9rale l\u2019indique, il s\u2019agit d\u2019une \"carte de site\". En lisant cela, je pense que beaucoup d\u2019entre vous penserons aux pages Web indiquant les diff\u00e9rentes rubriques et sous-rubriques d\u2019un site,\u2026","rel":"","context":"Dans &quot;SEO&quot;","block_context":{"text":"SEO","link":"https:\/\/geekcommunicant.com\/blog\/category\/seo\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1233,"url":"https:\/\/geekcommunicant.com\/blog\/2024\/05\/07\/flip-card-css\/","url_meta":{"origin":1146,"position":1},"title":"Une flip card en CSS","author":"geekc","date":"07\/05\/2024","format":false,"excerpt":"Vous avez toujours voulu savoir comment cr\u00e9er un effet de carte retourn\u00e9e (flip card en anglais) ? Cet article est ce qu\u2019il vous faut ! Le r\u00e9sultat final est disponible ici. Structure HTML Pour commencer, attaquons nous \u00e0 la structure HTML d\u2019une carte. Pour sch\u00e9matiser, une carte se d\u00e9compose comme\u2026","rel":"","context":"Dans &quot;CSS&quot;","block_context":{"text":"CSS","link":"https:\/\/geekcommunicant.com\/blog\/category\/css\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1324,"url":"https:\/\/geekcommunicant.com\/blog\/2025\/12\/28\/mon-experience-avec-linux\/","url_meta":{"origin":1146,"position":2},"title":"Mon exp\u00e9rience avec Linux","author":"geekc","date":"28\/12\/2025","format":false,"excerpt":"Avec la fin de support de Windows 10 en octobre dernier, Linux a vu son usage progresser fortement cette ann\u00e9e. Voici mon histoire avec le pingouin. Linux dans mon pass\u00e9 De mon c\u00f4t\u00e9, je n'ai pas attendu cet \u00e9v\u00e9nement pour m'int\u00e9resser \u00e0 Linux, vu que j'avais d\u00e9j\u00e0 utilis\u00e9 courament Ubuntu\u2026","rel":"","context":"Dans &quot;Divers&quot;","block_context":{"text":"Divers","link":"https:\/\/geekcommunicant.com\/blog\/category\/divers\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":326,"url":"https:\/\/geekcommunicant.com\/blog\/2014\/04\/06\/comment-marche-le-web\/","url_meta":{"origin":1146,"position":3},"title":"Comment marche le Web ?","author":"geekc","date":"06\/04\/2014","format":false,"excerpt":"Vous vous \u00eates toujours demand\u00e9 quelle diff\u00e9rence il pouvait y avoir entre le HTML et le PHP, entre le CSS et le JavaScript ? Cet article est fait pour vous. Apr\u00e8s l'avoir lu, vous serez incollables, ou presque, sur les technologies du Web. HTML et CSS Le HTML est la\u2026","rel":"","context":"Dans &quot;Pour les nuls&quot;","block_context":{"text":"Pour les nuls","link":"https:\/\/geekcommunicant.com\/blog\/category\/pour-les-nuls\/"},"img":{"alt_text":"HTML, CSS, et JavaScript","src":"https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/logo_html5-300x175.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1133,"url":"https:\/\/geekcommunicant.com\/blog\/2023\/03\/10\/gloubi-script-un-systeme-de-tooltip\/","url_meta":{"origin":1146,"position":4},"title":"Gloubi script &#8211; un syst\u00e8me de tooltip","author":"geekc","date":"10\/03\/2023","format":false,"excerpt":"J\u2019ai d\u00e9cid\u00e9 cette semaine de me pencher sur le script de tooltip pr\u00e9sent\u00e9 sur le site de gloubiweb. Dans une premi\u00e8re partie je pr\u00e9senterai rapidement le fonctionnement du script actuel, et dans une deuxi\u00e8me, je vous indiquerai comment recr\u00e9er (quasi) \u00e0 l\u2019identique cet ancien script. Pr\u00e9sentation de du code existant\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1329,"url":"https:\/\/geekcommunicant.com\/blog\/2025\/12\/29\/raccourcis-edition-noeuds-inkscape\/","url_meta":{"origin":1146,"position":5},"title":"Raccourcis de l&rsquo;outil d&rsquo;\u00e9dition des noeuds dans Inkscape","author":"geekc","date":"29\/12\/2025","format":false,"excerpt":"Apr\u00e8s vous avoir pr\u00e9sent\u00e9 comment je fait pour facilement cr\u00e9er une d\u00e9coupe avec contour dans Inkscape, je trouve int\u00e9ressant de vous pr\u00e9senter les raccourcis clavier de l'outil d'\u00e9dition des noeuds que j'utilise. Rajouter\/supprimer des noeuds et segments Pour cr\u00e9er un noeud au milieu d'un (ou plusieurs) segment(s), s\u00e9lectionner les noeuds\u2026","rel":"","context":"Dans &quot;Divers&quot;","block_context":{"text":"Divers","link":"https:\/\/geekcommunicant.com\/blog\/category\/divers\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/1146","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/comments?post=1146"}],"version-history":[{"count":0,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/1146\/revisions"}],"wp:attachment":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/media?parent=1146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/categories?post=1146"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/tags?post=1146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}