<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Thanos]]></title><description><![CDATA[ Cursed with knowledge]]></description><link>https://thanos.savoirguinee.com/</link><image><url>https://thanos.savoirguinee.com/favicon.png</url><title>Thanos</title><link>https://thanos.savoirguinee.com/</link></image><generator>Ghost 5.24</generator><lastBuildDate>Fri, 08 May 2026 11:15:31 GMT</lastBuildDate><atom:link href="https://thanos.savoirguinee.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Cockpit]]></title><description><![CDATA[Celui qui permet d'administrer son système Linux comme un chef est cockpit. 
Cockpit est un outil qui permet de surveiller et d'administrer plusieurs serveurs Linux via un navigateur.
D'autres outils existent, mais dans cette section, on vous présente l'outil cockpit.]]></description><link>https://thanos.savoirguinee.com/cockpit/</link><guid isPermaLink="false">6201169402a5820001ddfa26</guid><dc:creator><![CDATA[SOW Ousmane]]></dc:creator><pubDate>Mon, 07 Feb 2022 14:38:28 GMT</pubDate><media:content url="https://thanos.savoirguinee.com/content/images/2022/02/cockpit-7.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="introduction">Introduction</h2>
<img src="https://thanos.savoirguinee.com/content/images/2022/02/cockpit-7.png" alt="Cockpit"><p>Piloter vos machines sans avoir &#xE0; connaitre toutes les commandes Linux  en utilisant cockpit.</p>
<ul>
<li>Vous avez envie d&apos;administrer vos machines sans connaitre de commandes Linux&#x202F;?</li>
<li>Vous avez envie de vous amuser sur une interface web sans passer par un terminal sur la machine ?</li>
<li>Vous avez envie d&apos;utiliser un terminal sur votre navigateur sans revenir sur votre terminal en local ?<br>
Alors utilisez cockpit !!</li>
</ul>
<h2 id="fonctionnement">Fonctionnement</h2>
<p>Cockpit est une interface graphique web pour serveurs, destin&#xE9;e &#xE0; tous(d&#xE9;butants, confirm&#xE9; et administrateurs syst&#xE8;me sous Linux), notamment ceux qui sont :<br>
Gr&#xE2;ce &#xE0; Cockpit toute une &#xE9;quipe d&apos;administrateurs peut g&#xE9;rer un syst&#xE8;me de la mani&#xE8;re la plus simple.<br>
Avec cockpit, vous pouvez v&#xE9;rifier&#xA0;: vos containers, votre CPU, votre RAM, disque dur, etc.</p>
<h4 id="installation-sur-ubuntu">Installation sur Ubuntu</h4>
<p>L&apos;installation est l&apos;une des plus simples. Il suffit de taper la commande</p>
<pre><code>sudo apt install cockpit
</code></pre>
<h4 id="d%C3%A9marrage-de-cockpit">D&#xE9;marrage de cockpit</h4>
<p>Une fois l&apos;installation termin&#xE9;e lancer votre cockpit avec la commande</p>
<pre><code>sudo service cockpit start
</code></pre>
<h4 id="v%C3%A9rification-du-status">V&#xE9;rification du status</h4>
<p>Une fois lanc&#xE9; vous pouvez v&#xE9;rifier son status avec la commande :</p>
<pre><code>sudo service cockpit status
</code></pre>
<p>Une fois Cockpit en cours d&apos;ex&#xE9;cution, visitez <strong>adresse-ip-de-la-machine:9090</strong> dans votre navigateur Web. Si votre navigateur est sur la m&#xEA;me machine sur laquelle Cockpit est ex&#xE9;cut&#xE9;, visitez <a herf="http://localhost:9090/">localhost:9090</a> (par exemple).</p>
<p>Ainsi, une interface qui ressemble &#xE0; celle-ci s&apos;affichera sur votre navigateur.</p>
<p><br> <br></p>
<div style="text-align:center">
    <img src="https://thanos.savoirguinee.com/content/images/2022/02/first_page.png" alt="Cockpit">
 <p> Interface de cockpit</p>
</div>
<p><strong>NB:</strong> <em>Les comptes avec lesquels vous pouvez vous connecter sont les comptes syst&#xE8;mes</em>.</p>
<h4 id="docker-et-cockpit">Docker et cockpit</h4>
<p>Vous avez la possibilit&#xE9; de v&#xE9;rifier si vos conteneurs sont en cours d&apos;ex&#xE9;cution ou s&apos;ils sont en panne.</p>
<p>Il se comporte comme <strong>portainer</strong> mais en plus avanc&#xE9;, car il contient des graphes et beaucoup d&apos;autres outils.</p>
<p>Pour cela installer sur votre machine le docker-cockpit.</p>
<pre><code>sudo apt-get -y install cockpit-docker

</code></pre>
<p>Red&#xE9;marrer le socket docker pour appliquer les changements</p>
<pre><code>sudo systemctl restart cockpit.socket
</code></pre>
<div style="text-align:center">
     <img src="https://thanos.savoirguinee.com/content/images/2022/02/container-1.png" alt="Cockpit">
    <p> Containeur monitoring</p>
</div>
<h4 id="metrics-et-cockpit">Metrics et Cockpit</h4>
<p>Lecture et diffusion de donn&#xE9;es de m&#xE9;triques.<br>
Les m&#xE9;triques concernant le syst&#xE8;me peuvent &#xEA;tre extraites de plusieurs sources &#xE0; l&apos;aide de &quot;cockpit.metrics()&quot;. On peut exploiter les donn&#xE9;es des m&#xE9;triques avec les fonctions cockpit.series() et cockpit.grid().<br>
Pour plus d&apos;informations, je vous invite &#xE0; visiter le site officiel de <a style="text-decoration: underline; color:black" href="https://cockpit-project.org/guide/latest/cockpit-metrics.html"> cockpit</a></p>
<h2 id="conclusion">Conclusion</h2>
<p>Vous pouvez d&#xE9;sormais g&#xE9;rer facilement les conteneurs Docker &#xE0; partir de votre navigateur Web avec une interface facile &#xE0; utiliser !<br>
Vous pouvez &#xE9;galement monitorer votre machine avec cockpit sans soucis !</p>
<p><strong>Sources:</strong><br>
<a href="https://cockpit-project.org/guide/latest/development"> Site officielle de cockpit</a><br>
<a href="https://www.hostwinds.com/tutorials/installing-and-using-cockpit-docker-linux-vps"> Hostwinds</a></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[MQTT]]></title><description><![CDATA[Celui qui est 93 fois plus rapide que le HTTP est le MQTT. 
Le MQTT est un protocole basé sur le  TCP/IP.
Vous avez surement entendu parler des protocoles comme SMTP, Telnet, etc... Eh bien! dans cette section on vous présente le protocole MQTT.]]></description><link>https://thanos.savoirguinee.com/mqtt/</link><guid isPermaLink="false">6181ca9746c9990001da1ea3</guid><dc:creator><![CDATA[SOW Ousmane]]></dc:creator><pubDate>Tue, 07 Dec 2021 23:21:45 GMT</pubDate><media:content url="https://thanos.savoirguinee.com/content/images/2021/12/Screenshot-from-2021-11-17-16-28-15.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="introduction">Introduction</h2>
<img src="https://thanos.savoirguinee.com/content/images/2021/12/Screenshot-from-2021-11-17-16-28-15.png" alt="MQTT"><p>Utilis&#xE9; pour le transfert de <strong>Machine-to-Machine (M2M)</strong>, MQTT est consid&#xE9;r&#xE9; comme l&apos;un des principaux protocoles de messagerie de l&apos;internet des objets, mais c&#xF4;t&#xE9; industriel (<strong>IoT)</strong>. Il est open source, l&#xE9;ger (<strong>en t&#xEA;te de messages de 2 octets</strong>), faible utilisation de la bande passante du r&#xE9;seau (<strong>93 fois plus rapides que le HTTP</strong>), faible consommation d&apos;&#xE9;nergie (<strong>11 fois moins pour envoyer et 170 pour ne recevoir que le HTTP</strong>) et fiable (m&#xE9;canisme natif de Qos, acronyme de Quality of Service).</p>
<p>Son autre avantage, c&apos;est qu&apos;il est extr&#xEA;mement facile &#xE0; mettre en &#x153;uvre du c&#xF4;t&#xE9; client. C&apos;est donc la solution parfaite pour l&apos;IoT.</p>
<p>Attention cependant, fortement vuln&#xE9;rable si certaines conditions de s&#xE9;curit&#xE9; ne sont pas r&#xE9;unies, comme l&apos;absence de chiffrage sur la transmission &amp; l&apos;authentification (MQTT est capable d&apos;&#xEA;tre d&#xE9;ploy&#xE9; sans chiffrement TLS ou SSL.)</p>
<p>Utilis&#xE9; par nombreux acteurs dans le monde Facebook, openstack, geospatial, Bosh, IBM, Adarfuit, EVERYTHING IoT, Google Home Assistant, Pimatic, MS Azure, certains syst&#xE8;mes de signalisation, syst&#xE8;mes d&apos;alarme, l&apos;industrie du Gaz, de l&apos;&#xE9;lectricit&#xE9; et bien plus encore.</p>
<p>MQTT focntionne sur le principe de <strong>publication/abonnement</strong>(publish/subscribe)</p>
<h2 id="fonctionnement">Fonctionnement</h2>
<h3 id="c%E2%80%99est-quoi-un-broker-mqtt">C&#x2019;est quoi un broker MQTT ?</h3>
<p>Vous pouvez envoyer une commande pour contr&#xF4;ler une sortie ou vous pouvez la lire &#xE0; partir d&apos;un capteur et la publier.<br>
Dans Mqtt, il y a quelques concepts de base que vous devez comprendre : publier et souscrire des messages, des topics et des broker.<br>
Le premier concept est le syst&#xE8;me de publication et d&apos;abonnement.</p>
<p>Qu&apos;est-ce que cela signifie ? Cela signifie que le dispositif peut publier des messages &#xE0; vos autres dispositifs ou votre dispositif peut s&apos;abonner &#xE0; un sujet particulier.Pour recevoir ces messages, par exemple, le <em>dispositif 1</em> publie sur un sujet, le <em>dispositif 2</em> s&apos;abonne au m&#xEA;me sujet que le <em>dispositif 1</em> publie. Ainsi, le <em>dispositif 2</em> re&#xE7;oit le message.<br>
<img src="https://thanos.savoirguinee.com/content/images/2021/11/subpub6.png" alt="MQTT" loading="lazy"></p>
<p>Les messages sont les informations que vous souhaitez &#xE9;changer entre vos appareils, qu&apos;il s&apos;agisse d&apos;une commande ou de donn&#xE9;es avec le syst&#xE8;me de publication/abonnement.<br>
Vous pouvez faire &#xE0; peu pr&#xE8;s tout ce que vous voulez dans vos projets de mission en mode autonome.<br>
<img src="https://thanos.savoirguinee.com/content/images/2021/11/animation_300_kw504ekk.gif" alt="MQTT" loading="lazy"></p>
<p>Un autre concept important est celui des topics. Les topics sont la fa&#xE7;on dont vous enregistrez l&apos;int&#xE9;r&#xEA;t pour les messages entrants ou je vais sp&#xE9;cifier o&#xF9; vous voulez publier votre message.<br>
votre message.<br>
Les topics sont repr&#xE9;sent&#xE9;s par des cha&#xEE;nes de caract&#xE8;res s&#xE9;par&#xE9;es par des barres obliques. Les slashs indiquent le niveau du sujet, voici un exemple<br>
si vous cr&#xE9;ez maintenant un sujet pour une lampe dans votre propre bureau (home/office/lamp).</p>
<p>Par exemple, si vous souhaitez allumer votre lampe dans votre bureau &#xE0; la maison, vous publieriez un message dans un topic en utilisant node-red disant on et votre machine sera abonn&#xE9;e &#xE0; ce m&#xEA;me sujet.</p>
<p>Elle recevra donc le message on et allumera finalement la lampe.<br>
<img src="https://thanos.savoirguinee.com/content/images/2021/11/Screenshot-from-2021-11-17-13-43-09.png" alt="MQTT" loading="lazy"></p>
<p><code>Les topics sont sensibles &#xE0; la casse :</code> Ce qui fait que home/office/lamp et home/office/Lamp sont diff&#xE9;rents.</p>
<p><strong>Faites attention au terme borker</strong> : le broker est principalement responsable de la r&#xE9;ception de tous les messages.<br>
Le broker MQTT est un equipement intermediaire entre le publisher et l&apos;abon&#xE9;e, il filtre les messages pour d&#xE9;cider qui est int&#xE9;ress&#xE9; et publie ensuite le message aux clients abonn&#xE9;s.<br>
Il y a plusieurs brokers que vous pouvez utiliser.</p>
<p>Nous allons utiliser le broker mosquito que vous installerez sur votre raspberry pi.</p>
<h3 id="installer-mosquitto-sur-linux-ou-raspberry-pi">Installer Mosquitto sur Linux ou Raspberry Pi</h3>
<p>D&apos;abord mettons &#xE0; jour notre syst&#xE8;me avant d&#x2019;installer Mosquito ce n&apos;est pas obligatoire mais recommand&#xE9;.</p>
<pre><code>sudo apt update &amp;&amp; apt upgrade
</code></pre>
<p>Maintenant installons Mosquitto</p>
<pre><code>sudo apt install mosquitto
</code></pre>
<p>Pour faire des tests il faut installer Mosquitto client</p>
<pre><code>sudo apt-get install mosquitto-clients
</code></pre>
<p>Ici nos tests se baseront justes sur Lunix, si jamais vous voulez installer Mosquito pour <em><strong>Rasperry Pi</strong></em>, installer mosquitto_sub, mosquitto_pub et mosquitto_passwVous voulez faire du mosquito en python? Alors je vous conseille  python-mosquitto<br>
<strong>Exemple</strong> de server pour vos test: <a href="https://test.mosquitto.org/">Server de test</a><br>
Pour verifier l&apos;insatllation</p>
<pre><code>systemctl status mosquitto
</code></pre>
<h3 id="installer-mosquitto-sur-windows-ou-macos">Installer Mosquitto sur Windows ou macOS</h3>
<p>Pour Windows ou macos je vous recommande de t&#xE9;l&#xE9;charger et installer via ce <a href="https://mosquitto.org/download/">lien</a></p>
<h3 id="s%C3%A9curis%C3%A9-mosquitto">S&#xE9;curis&#xE9; Mosquitto</h3>
<p>Maintenant on a Mosquitto qui fonctionne bien sur notre machine.<br>
Mais pas s&#xE9;curis&#xE9;, maintenant s&#xE9;curisons le! Creons un user avec un password<br>
Pour cela tapez</p>
<pre><code>cd /etc/mosquitto
</code></pre>
<p>Vous n&apos;avez pas besoin de vous identifier tant que vous ne faite pas une gestion de votre domotique DIY car pour la domotique vous serez 	amen&#xE9; &#xE0; s&#xE9;curiser vos appareils car sinon tout le monde peut acc&#xE9;der &#xE0; appareils(chauffage, climatisation, motorisation de volets roulants.....).</p>
<p>Donc le mieux c&apos;est de les prot&#xE9;ger avec un mot de passe.</p>
<pre><code>sudo mosquitto_passwd -c /etc/mosquitto/passwd USER_NAME

</code></pre>
<p>Afin de limiter l&apos;acc&#xE8;s aux utilisateurs &#xE0; un compte, modifiez le fichier de configuration.<br>
Pour cela tapez la commande:</p>
<pre><code>sudo /etc/mosquitto/mosquitto.conf
</code></pre>
<p>Ajoutez ceci &#xE0; la fin du fichier</p>
<pre><code>allow_anonymous false
password_file /etc/mosquitto/passwordfile
</code></pre>
<p>Maintenant on redemarre Mosquitto</p>
<pre><code>systemctl restart mosquitto
</code></pre>
<p><img src="https://thanos.savoirguinee.com/content/images/2021/11/systemctl.png" alt="MQTT" loading="lazy"></p>
<h3 id="publier-envoyer-un-message-mqtt-depuis-le-terminal">Publier (envoyer) un message MQTT depuis le terminal</h3>
<p>Pour publier un message on utilise la commande mosquitto_pub et pour connaitre les options li&#xE9;es &#xE0; la commande on utilise mosquitto_pub -help</p>
<p>-h  spcifie le nom du broker sur le quel on se connecte (ou IP)<br>
-t  spcifie le topic sur lequel le message est publi&#xE9;<br>
-P  spcifie le mot de passe (optionnel)<br>
-m  spcifie le message &#xE0; envoyer qui peut &#xEA;tre une valeur ou un JSON.<br>
-u  spcifie le nom d&#x2019;utilisateur (optionnel)<br>
-p  spcifie le port, qui par d&#xE9;faut est 1883<br>
Pour plus d&apos;information voir <a href="https://mosquitto.org/man/mosquitto_pub-1.html">documentation</a></p>
<p><strong>Exemple</strong>: on se connecte au serveur -h localhost sur le Topic -t news/football et on publie le message -m j&apos;ai gagn&#xE9; le ballon d&apos;or.</p>
<pre><code>mosquitto_pub -h localhost -t news/football -m &quot;jai gagn&#xE9; le ballon d&apos;or!&quot;
</code></pre>
<h3 id="recevoir-souscrire-des-messages">Recevoir (souscrire) des messages</h3>
<p>Pour recevoir un message on utilise la commande mosquitto_sub et pour connaitre les options li&#xE9;es &#xE0; la commande on utilise mosquitto_sub -help<br>
Ouvrez un  second Terminal et ex&#xE9;cutez la commande suivant.</p>
<pre><code>mosquitto_sub -h localhost -t news/football
</code></pre>
<p>Exemple d&apos;&#xE9;change: &#xE0; gauche le publisher et &#xE0; droite le subscriber<br>
<img src="https://thanos.savoirguinee.com/content/images/2021/11/Peek-2021-11-17-15-39.gif" alt="MQTT" loading="lazy"></p>
<h2 id="conclusion">Conclusion</h2>
<p>Dans ce tutoriel nous avons parl&#xE9; des avantages et inconv&#xE9;nients de MQTT.<br>
Nous avons install&#xE9; et test&#xE9; MQTT en utilisant le serveur mosquito sur Lunix.<br>
Pour ceux qui ont Windows ou macos nous les avons redirig&#xE9; vers la documentation de Mosquito.<br>
Rappelons que MQTT est un protocole TCP/IP utilis&#xE9; beaucoup dans l&apos;IoT industriel.Il est le protocole parfait pour votre domotique et est super bien adapt&#xE9; au d&#xE9;veloppement d&#x2019;objets connect&#xE9;s vus sa rapidit&#xE9; et sa lergert&#xE9;.</p>
<!--kg-card-end: markdown--><p></p>]]></content:encoded></item><item><title><![CDATA[III - Git: GitHub]]></title><description><![CDATA[Parce qu'on a besoin de la communauté.  GitHub est un site web et un service de cloud qui permet aux développeurs de sauvegarder et gérer leur code en ligne en s'appuyant sur la technologie git.]]></description><link>https://thanos.savoirguinee.com/iii-git-github/</link><guid isPermaLink="false">6057c5b56599320001e84436</guid><category><![CDATA[git]]></category><dc:creator><![CDATA[Boubacar Sidy Diallo]]></dc:creator><pubDate>Sun, 21 Mar 2021 22:20:59 GMT</pubDate><media:content url="https://thanos.savoirguinee.com/content/images/2021/03/IMG_3785-1.jpg" medium="image"/><content:encoded><![CDATA[<h2 id="i-introduction">I- <strong>Introduction</strong></h2><!--kg-card-begin: html--><script src="https://unpkg.com/@lottiefiles/lottie-player@latest/dist/lottie-player.js"></script>
<lottie-player src="https://assets4.lottiefiles.com/packages/lf20_6gfl0jjp.json" background="transparent" speed="1" style="width: 300px; height: 300px;" loop autoplay></lottie-player><!--kg-card-end: html--><h2 id="ii-fonctionnement"><strong>II- Fonctionnement</strong></h2><!--kg-card-begin: html--><iframe src="https://embed.lottiefiles.com/animation/25523"></iframe><!--kg-card-end: html--><h2 id="iii-conclusion"><strong>III- Conclusion</strong></h2>]]></content:encoded></item><item><title><![CDATA[IV - Git: Les secrets]]></title><description><![CDATA[Git secret est un wrapper qui se base sur GPG afin de chiffrer des fichiers dans un repository git. Seuls les utilisateurs désigné pourront decrypter les fichiers.]]></description><link>https://thanos.savoirguinee.com/git-les-secrets/</link><guid isPermaLink="false">6025c4b619787d00013fc7fb</guid><category><![CDATA[git]]></category><category><![CDATA[devops]]></category><dc:creator><![CDATA[Boubacar Sidy Diallo]]></dc:creator><pubDate>Thu, 11 Feb 2021 23:59:30 GMT</pubDate><media:content url="https://thanos.savoirguinee.com/content/images/2021/03/gitsecret.png" medium="image"/><content:encoded/></item><item><title><![CDATA[II - Git: Gitflow]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h2 id="iintroduction">I- Introduction:</h2>
<p>Gitflow est un wrapper pour git qui est extr&#xEA;mement utile pour le Devops.<br>
Il permet de d&#xE9;finir un mod&#xE8;le strict de structuration des branches lors de la gestion de grands projets.<br>
Il n&apos;ajoute pas grand choses au fonctionnement initial de</p>]]></description><link>https://thanos.savoirguinee.com/git-gitflow/</link><guid isPermaLink="false">6025be7219787d00013fc7e9</guid><category><![CDATA[git]]></category><category><![CDATA[devops]]></category><dc:creator><![CDATA[Amadou BARRY]]></dc:creator><pubDate>Thu, 11 Feb 2021 23:33:24 GMT</pubDate><media:content url="https://thanos.savoirguinee.com/content/images/2021/03/gitflow.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="iintroduction">I- Introduction:</h2>
<img src="https://thanos.savoirguinee.com/content/images/2021/03/gitflow.png" alt="II - Git: Gitflow"><p>Gitflow est un wrapper pour git qui est extr&#xEA;mement utile pour le Devops.<br>
Il permet de d&#xE9;finir un mod&#xE8;le strict de structuration des branches lors de la gestion de grands projets.<br>
Il n&apos;ajoute pas grand choses au fonctionnement initial de Git si ce n&apos;est le fait de pouvoir d&#xE9;finir des branches avec des r&#xF4;les sp&#xE9;cifiques pour la gestion du d&#xE9;veloppement local, des d&#xE9;ploiement et des diverses maintenances li&#xE9;es &#xE0; notre projet.</p>
<h2 id="iifonctionnement">II- Fonctionnement:</h2>
<p>Gitflow poss&#xE8;de un cli permettant de faire des commandes basiques que vous verrez peuvent bien se faire en utilisant juste Git, mais pour des raisons de facilit&#xE9; nous utiliserons gitflow pour &#xE9;viter de se tromper.<br>
Vous pouvez l&apos;installer en vous rendant sur le lien <a href="https://github.com/nvie/gitflow/wiki/Installationhttp://">suivant</a>.</p>
<p>Pour commencer un projet avec gitflow il vous suffit de faire un coup de <code>git-flow init</code>. Cette commande a le m&#xEA;me fonctionnement que <code>git init</code> sauf qu&apos;elle rajoute deux branches aux projets plut&#xF4;t qu&apos;une <em><strong>master et develop</strong></em> et cr&#xE9;e l&apos;organisation des branches de <strong>features, release, hotfix, ...</strong> dont on parlera dans la suite de cet article.</p>
<p>La commande <code>git flow init</code> sans aucune modification cr&#xE9;e ceci<br>
<img src="https://thanos.savoirguinee.com/content/images/2021/02/inti.PNG" alt="II - Git: Gitflow" style="width:75%;height:75%"><br>
Cette commande peut &#xEA;tre faite sans avoir besoin de git-flow en faisant:</p>
<pre><code>git branch develop
git push -u origin develop
</code></pre>
<p>Au lieu de n&apos;avoir que la branche master pour g&#xE9;rer l&apos;enti&#xE8;ret&#xE9; du projet, gitflow cr&#xE9;e la branche develop qui s&apos;occupera de toutes les features qui seront d&#xE9;velopp&#xE9;e et au debut cette branche l&#xE0; est directement fork&#xE9;e &#xE0; partir de la branche master. La branche master ne servira qu&apos;&#xE0; stocker les informations sur les releases.<br>
L&apos;arborescence du git ressemblera &#xE0; ceci</p>
<img src="https://thanos.savoirguinee.com/content/images/2021/02/branch.PNG" alt="II - Git: Gitflow" style="width:75%;height:75%">
<p>Maintenant que nous savons comment GitFlow cr&#xE9;e le repo git sur le projet, nous allons essayer de d&#xE9;mystifier les branches features, hotfix et release.</p>
<h3 id="features">Features:</h3>
<p>Les branches features sont fork&#xE9;es &#xE0; partir de la derni&#xE8;re version de develop.<br>
Elles se basent sur le fait que chaque fonctionnalit&#xE9; du projet doit r&#xE9;sider sur une branche propre &#xE0; elle et ne doit pas int&#xE9;ragir avec la branche master mais directement merg&#xE9;e sur develop &#xE0; la fin son d&#xE9;veloppement.<br>
Pour cr&#xE9;er une nouvelle feature la commande git-flow correspondante est:</p>
<pre><code>git flow feature start feature_name
</code></pre>
<p>Avec git:</p>
<pre><code>git checkout develop
git checkout -b feature_name
</code></pre>
<p>Ces branches comme toutes les autres d&apos;ailleurs peuvent &#xEA;tre rendues publiques pour des fins de collaboration. C&apos;est &#xE0; &#xE7;a que sert la commande publish de git flow.<br>
Pour publier notre branche <em>feature_name</em>, la commande correspondante est <code>git flow feature publish feature_name</code>.</p>
<p>Une fois le developpement de la feature termin&#xE9;e, elle sera merg&#xE9;e sur develop souvenez-vous rien ne doit toucher &#xE0; la branche master venant des features.<br>
Avec git flow:</p>
<pre><code>git flow feature finish feature_name
</code></pre>
<p>Avec git:</p>
<pre><code>git checkout develop
git merge feature_name
</code></pre>
<h3 id="releases">Releases:</h3>
<p>Une release peut &#xEA;tre vue comme une autorisation de publier. Elles sont n&#xE9;es lorsque la branche develop atteint un certain niveau de maturit&#xE9; et que l&apos;on ait besoin de publier et partir de cette nouvelle base.<br>
Une fois qu&apos;une release est initi&#xE9;e il ne faut rajouter aucune feature dans celle-ci, on ne peut faire que des op&#xE9;rations de modifications mineures comme des r&#xE9;solutions de bugs par exemple.<br>
Les releases sont fork&#xE9;es de develop pour aller se brancher sur master et representer de nouvelles versions du projet.<br>
Il est important apr&#xE8;s une release de remerger le projet sur develop vu que des modifications ont peut-&#xEA;tre p&#xFB; &#xEA;tre apport&#xE9;es entre l&apos;initiation et la fin.<br>
Pour cr&#xE9;er une release avec git flow:</p>
<pre><code>git flow release start version
</code></pre>
<p>Je vous invite &#xE0; vous rendre sur ce <a href="https://projet-isika.com/index.php/2018/11/13/le-versioning/">lien</a> pour comprendre comment les versions sont faites.<br>
Avec git:</p>
<pre><code>git checkout develop
git checkout -b release/version
</code></pre>
<p>On peut de la m&#xEA;me mani&#xE8;re qu&apos;avec les features publier les release pour des fins de collaboration.<br>
On peut se mettre sur la branche release publi&#xE9;e par un autre membre de l&apos;&#xE9;quipe ou soi-m&#xEA;me avec la commande <code>git flow release track version</code>.</p>
<p>Une fois que tout est pr&#xEA;t pour terminer la release, on la met sur master, on supprime la branche interm&#xE9;diaire cr&#xE9;&#xE9;e, et on n&apos;oublie surtout pas de remerger sur develop.<br>
Avec git flow:</p>
<pre><code>git flow release finish version
</code></pre>
<p>Avec git:</p>
<pre><code>git checkout master
git merge release/version
git checkout develop
git merge release/version
git branch -D release/version
</code></pre>
<h3 id="hotfixes">Hotfixes</h3>
<p>Les hotfixes ou branches de maintenance servent &#xE0; faire des r&#xE9;solutions de bugs pour des versions dej&#xE0; publi&#xE9;es sur master. Ce sont les seules branches &#xE0; pouvoir directement r&#xE9;cup&#xE9;rer le code se trouvant sur master et il faut noter qu&apos;apr&#xE8;s avoir fini la maintenance il faut la merger et sur master et sur develop pour qu&apos;elle puisse &#xEA;tre repercut&#xE9;e dans tout le syst&#xE8;me.<br>
Elles sont l&#xE0; pour &#xE9;viter d&apos;arr&#xEA;ter le d&#xE9;veloppement pour de la maintenance.<br>
Pour d&#xE9;buter une branche de hotfix avec git flow<br>
<code>git flow hotfix start branch_name</code><br>
Avec git</p>
<pre><code>git checkout master
git checkout -b branch_name
</code></pre>
<p>Pour terminer la maintenance avec git flow<br>
<code>git flow hotfix finish branch_name</code><br>
Avec git</p>
<pre><code>git checkout master
git merge branch_name
git checkout develop
git merge branch_name
git branch -D branch_name
</code></pre>
<h2 id="iiiconclusion">III- Conclusion</h2>
<p>Ce tutoriel est un bref r&#xE9;sum&#xE9; du fonctionnement de git flow qu&apos;est aujourd&apos;hui un outil int&#xE9;ressant pour faire du devops. Il vous aidera &#xE0; sauver du temps et vous &#xE9;vitera des probl&#xE8;mes lourds en production ou en d&#xE9;veloppement.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[SSH (Secure Shell)]]></title><description><![CDATA[Parce que Telnet n'est pas ouf]]></description><link>https://thanos.savoirguinee.com/ssh/</link><guid isPermaLink="false">6025141d19787d00013fc7c9</guid><category><![CDATA[devops]]></category><category><![CDATA[system]]></category><dc:creator><![CDATA[Amadou BARRY]]></dc:creator><pubDate>Thu, 11 Feb 2021 11:26:07 GMT</pubDate><media:content url="https://thanos.savoirguinee.com/content/images/2021/02/1f79c680-d956-11e9-9513-d2d8113d6678.png" medium="image"/><content:encoded><![CDATA[<img src="https://thanos.savoirguinee.com/content/images/2021/02/1f79c680-d956-11e9-9513-d2d8113d6678.png" alt="SSH (Secure Shell)"><p>Vous avez peut-&#xEA;tre eu besoin ou aurez un jour besoin de vous connecter &#xE0; un serveur ou une machine distante sans devoir vous y d&#xE9;placer physiquement. <br>Vous ne savez peut-&#xEA;tre pas comment vous y prendre, ne vous inqui&#xE9;tez pas il existe un outil fait pour vous y aider en toute s&#xE9;curit&#xE9;( s&apos;il est bien configur&#xE9; &#xE9;videmment xD).</p><p>SSH ou Secure Shell est le meilleur moyen de vous connecter et d&apos;administrer vos syst&#xE8;mes. Il est utilis&#xE9; pour r&#xE9;cup&#xE9;rer un Shell distant ou pour tunneliser une application.<br>Il a exist&#xE9; de nombreuses distributions de SSH mais la plus utilis&#xE9;e de nos jours reste OPENSSH qui vient de OPENBSD, pour les syst&#xE8;mes windows nous retrouvons Putty et winsshd.</p><p>Nous allons principalement nous focaliser sur OPENSSH dans ce tutoriel</p><h2 id="serveur-ssh">Serveur SSH</h2><p>Pour installer le serveur ssh sur les syst&#xE8;mes Debian et compagnie.</p><blockquote>sudo apt-get update<br>sudo apt install openssh-server</blockquote><p>Une fois le serveur install&#xE9;, vous pouvez v&#xE9;rifier s&apos;il est lanc&#xE9;, le lancer ou l&apos;arr&#xEA;ter et vous pouvez aussi l&apos;ajouter aux t&#xE2;ches &#xE0; lancer au d&#xE9;marrage de la machine.<br>Pour lancer le serveur</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">sudo systemctl start ssh</code></pre><figcaption>sudo systemctl start ssh</figcaption></figure><p>Pour v&#xE9;rifier le statut du serveur afin de v&#xE9;rifier qu&apos;il est actif</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://thanos.savoirguinee.com/content/images/2021/02/ssh_status.png" class="kg-image" alt="SSH (Secure Shell)" loading="lazy" width="816" height="209" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/ssh_status.png 600w, https://thanos.savoirguinee.com/content/images/2021/02/ssh_status.png 816w" sizes="(min-width: 720px) 720px"><figcaption>sudo systemctl status ssh</figcaption></figure><p>Pour arr&#xEA;ter le serveur</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://thanos.savoirguinee.com/content/images/2021/02/stop_ssh-2.PNG" class="kg-image" alt="SSH (Secure Shell)" loading="lazy" width="836" height="325" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/stop_ssh-2.PNG 600w, https://thanos.savoirguinee.com/content/images/2021/02/stop_ssh-2.PNG 836w" sizes="(min-width: 720px) 720px"><figcaption>sudo systemctl stop ssh</figcaption></figure><!--kg-card-begin: markdown--><h3 id="configuration">Configuration:</h3>
<p>La configuration du serveur se trouve dans <code>/etc/ssh/sshd_config</code>.<br>
Il y&apos;a plusieurs param&#xE8;tres dans ce fichier dont certains qui ne serviront pas. Nous allons survoler assez rapidement ceux qui vous serviront le plus.</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-code-card"><pre><code>Port 22

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key</code></pre><figcaption>/etc/ssh/sshd_config</figcaption></figure><p>La premi&#xE8;re ligne permet de fixer le port d&apos;&#xE9;coute pour les connexions qui par d&#xE9;faut est le 22 pour ssh mais vous pouvez bien le mettre sur un port diff&#xE9;rent pour des raisons que j&apos;ignore.</p><p>Les trois derni&#xE8;res lignes permettent de localiser les cl&#xE9;s d&apos;h&#xF4;tes.</p><figure class="kg-card kg-code-card"><pre><code>LoginGraceTime 120
PermitRootLogin yes
StrictModes yes</code></pre><figcaption>/etc/ssh/sshd_config</figcaption></figure><!--kg-card-begin: markdown--><ul>
<li><code>StrictModes</code> permet de r&#xE9;fuser la connexion si les fichiers n&apos;ont pas les bons droits</li>
<li><code>PermitRootLogin</code> permet d&apos;activer ou non la connexion au compte root via ssh. Cette option doit &#xEA;tre mise &#xE0; no car la plus part du temps on configure un compte qui a acc&#xE8;s &#xE0; <code>sudo</code> ou <code>su</code> et on n&apos;autorise pas du tout l&apos;acc&#xE8;s par le compte root.</li>
<li><code>LogiGraceTime</code> pr&#xE9;cise combien de secondes pour maintenir la connexion active sans se connecter avec succ&#xE8;s.</li>
</ul>
<!--kg-card-end: markdown--><p>Il y&apos;a des options qui vous permette &#xE0; partir du client ssh d&apos;expprter une fen&#xEA;tre graphique pour une application. Pour cel&#xE0; il faut activer le X11Forwarding</p><figure class="kg-card kg-code-card"><pre><code>X11Forwarding yes
X11DisplayOffset 10</code></pre><figcaption>/etc/ssh/sshd_config</figcaption></figure><p>Une fois vos modifications enregistr&#xE9;es il faut recharger le serveur</p><figure class="kg-card kg-code-card"><pre><code>sudo systemctl reload ssh</code></pre><figcaption>sudo systemctl reload ssh</figcaption></figure><p>Maintenant que nous savons faire des configurations basiques du serveur, nous allons apprendre &#xE0; configurer et se connecter au serveur dans la partie suivante</p><h2 id="client-ssh">Client SSH</h2>]]></content:encoded></item><item><title><![CDATA[I - Git : Les bases]]></title><description><![CDATA[Parce que le partage du code est essentiel.  Parce que l'open source repose sur la communauté.
Découvrez les bases de git.]]></description><link>https://thanos.savoirguinee.com/git/</link><guid isPermaLink="false">601c728e79ce630001861bde</guid><category><![CDATA[git]]></category><category><![CDATA[code]]></category><category><![CDATA[devops]]></category><dc:creator><![CDATA[Boubacar Sidy Diallo]]></dc:creator><pubDate>Thu, 04 Feb 2021 22:29:36 GMT</pubDate><media:content url="https://thanos.savoirguinee.com/content/images/2021/03/gitbase.png" medium="image"/><content:encoded><![CDATA[<img src="https://thanos.savoirguinee.com/content/images/2021/03/gitbase.png" alt="I - Git : Les bases"><p>	Dans le cycle de d&#xE9;veloppement d&apos;une application, &#xA0;la gestion du code (collaboration et version) est une &#xE9;tape importante.</p><p><strong>	Linus Torvalds</strong> cr&#xE9;a git en 2005 en afin de remplacer BitKeeper qui assurait le partage gestion des patch du noyau Linux. Git est parti donc de ces &#xA0;principes: vitesse, distribution, simplicit&#xE9; et est &#xA0;distribu&#xE9; selon les termes de la licence GNU 2.0.<br>	C&apos;est un logiciel de contr&#xF4;le des versions d&#xE9;centralis&#xE9;es. Permettant ainsi &#xE0; un groupe de personnes de travailler sur un m&#xEA;me projet en g&#xE9;rant les diff&#xE9;rentes versions et fusionnant &#xE0; un moment donnant leur travail. C&apos;est l&#x2019;outil de gestion de version le plus populaire.<br>	 Git permet de g&#xE9;rer tout type de documents textes, donc il n&apos;est pas destin&#xE9; uniquement aux d&#xE9;veloppeurs, mais aussi &#xE0; des utilisateurs d&apos;outils comme latex ou Markdown pour leur cr&#xE9;ation de contenu.</p><h2 id="i-installation">I - Installation</h2><p>L&apos;installation de git est assez simple en fonction de votre syst&#xE8;me d&apos;exploitation:<br><br><u><strong>A - Windows:</strong></u> &#xA0;Git est disponible en t&#xE9;l&#xE9;chargement sur <a href="https://gitforwindows.org/">ce lien</a>. Apr&#xE8;s t&#xE9;l&#xE9;chargement, l&apos;installation se fait de la mani&#xE8;re que toute application Windows.<br><br><u><strong>B- Linux et d&#xE9;riv&#xE9;:</strong></u> Sur les syst&#xE8;mes linux (Ubuntu, Debian, Redhat, ...), l&apos;installation se fait directement via le source code disponible sur &#xA0;Github (un peu compliqu&#xE9;) ou en utilisant simplement le gestionnaire de package correspondant au syst&#xE8;me d&apos;exploitation (apt, aptitude, yum, ....). </p><pre><code class="language-bash">apt-get install git</code></pre><p>L&apos;installation est maintenant termin&#xE9;, vous pouvez v&#xE9;rifier la version de git install&#xE9;e gr&#xE2;ce &#xE0; cette commande:</p><pre><code class="language-bash">git --version</code></pre><p>Dans la prochaine section nous verrons comment initialiser notre 1er &quot;<strong>repository</strong>&quot; (appellation commune des dossiers git).</p><p>	Pour la suite je consid&#xE8;re que vous utilisez un terminal linux, mais sachez que que &#xA0;les commandes Git restent valide sur Windows.</p><h2 id="ii-cr-ation-d-un-repository-local">II - Cr&#xE9;ation d&apos;un &quot;repository&quot; local</h2><p>	Dans cette section, nous allons cr&#xE9;er un projet sur la machine local et g&#xE9;rer son &#xE9;volution avec git. Pour cela suivez ces &#xE9;tapes:</p><h3 id="1-cr-er-un-dossier-qui-va-contenir-notre-projet-git-">	1- Cr&#xE9;er un dossier &#xA0;qui va contenir notre projet git :</h3><pre><code class="language-bash">mkdir tuto-git
cd tuto-git</code></pre><p>Une fois dans le dossier (tuto-git), nous allons maintenant initialiser le repository :</p><pre><code class="language-bash">&#x279C;  tuto-git git init
Initialized empty Git repository in /Users/boubacar/Desktop/projects/git/tuto-git/.git/</code></pre><p>Apr&#xE8;s initialisation, un dossier &quot;.git&quot; sera cr&#xE9;&#xE9; dans le r&#xE9;pertoire. il sera visible avec la commande &quot;ls -al&quot;.</p><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/02/Capture-d-e-cran-2021-02-16-a--23.54.20.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="1292" height="354" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/Capture-d-e-cran-2021-02-16-a--23.54.20.png 600w, https://thanos.savoirguinee.com/content/images/size/w1000/2021/02/Capture-d-e-cran-2021-02-16-a--23.54.20.png 1000w, https://thanos.savoirguinee.com/content/images/2021/02/Capture-d-e-cran-2021-02-16-a--23.54.20.png 1292w" sizes="(min-width: 720px) 720px"></figure><p>Ce dossier &quot;.git&quot; contient l&apos;ensemble des informations de notre projet. Nous allons nous int&#xE9;resser particuli&#xE8;rement au fichier &#xA0;&quot;.git/config&quot; qui &#xE9;voluera tout au long de ce tutoriel.</p><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/02/image-1.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="610" height="280" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/image-1.png 600w, https://thanos.savoirguinee.com/content/images/2021/02/image-1.png 610w"></figure><p>Avant de continuer nous allons configurer 2 variables qui vont nous aider &#xE0; identifier l&apos;utilisateur qui effectue les actions sur le repository git. Remplaces ces valeurs par ton nom et votre adresse email. (Oui l&#xE0;, on va se tutoyer maintenant).</p><pre><code>git config --global user.name &quot;Your Name&quot;
git config --global user.email you@example.com</code></pre><h3 id="2-tats-du-repository-et-cr-ation-des-fichiers-">	2- &#xC9;tats du repository et cr&#xE9;ation des fichiers:</h3><p>	V&#xE9;rifions l&apos;&#xE9;tat de notre repository (dossier git) avec la commande: git status</p><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/02/image-3.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="920" height="278" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/image-3.png 600w, https://thanos.savoirguinee.com/content/images/2021/02/image-3.png 920w" sizes="(min-width: 720px) 720px"></figure><p>	Il est mentionn&#xE9; que nous somme sur la branche master et qu&apos;aucun commit n&apos;a pour l&apos;instant &#xE9;t&#xE9; effectu&#xE9;. Quelques d&#xE9;finitions:<br>	- &#xA0;<em><strong>Une branche </strong>est un dossier virtuel dans le repository qui contient des commits.</em><br>	<strong><em>- Un commit</em></strong> <em>est une sauvegarde d&apos;un &#xE9;tat du repository. Chaque commit peut &#xEA;tre accessible avec son ID.</em></p><p>Pour un d&#xE9;but nous allons travailler sur la branche par d&#xE9;faut qui dans notre cas s&apos;appel &quot;master&quot; et nous ferons &#xE9;voluer notre repository dans cette branche.<br>Nous allons cr&#xE9;er un 1er fichier que nous allons appeler <em>tuto-git.py </em>qui sera notre programme python &#xE0; manipuler.</p><!--kg-card-begin: markdown--><p>tuto-git.py</p>
<pre><code class="language-python">def main():
    print(&quot;Bienvenue sur Git&quot;)

if __name__ == &quot;__main__&quot;:
    main()
</code></pre>
<!--kg-card-end: markdown--><p>L&apos;&#xE9;tat de notre repository va changer avec l&apos;ajout de ce ficher. Toujours avec la commande &quot;git status&quot; nous aurons:</p><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/02/image-7.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="1090" height="448" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/image-7.png 600w, https://thanos.savoirguinee.com/content/images/size/w1000/2021/02/image-7.png 1000w, https://thanos.savoirguinee.com/content/images/2021/02/image-7.png 1090w" sizes="(min-width: 720px) 720px"></figure><p>Le fichier est vu par git, mais est pour l&apos;instant &#xE0; l&#x2019;&#xE9;tat &quot;<strong>Untracked</strong>&quot;. &#xA0;A rappeler qu&apos;un fichier git peut avoir l&apos;un des 4 &#xE9;tats affich&#xE9; sur le sch&#xE9;ma ci-dessous.</p><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/02/image-6.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="800" height="330" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/image-6.png 600w, https://thanos.savoirguinee.com/content/images/2021/02/image-6.png 800w" sizes="(min-width: 720px) 720px"></figure><p>Pour que le fichier soit pris en compte nous devons l&apos;ajouter &#xE0; git avec la commande: </p><!--kg-card-begin: markdown--><pre><code class="language-bash">$ git add tuto-git.py
</code></pre>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/02/image-8.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="760" height="332" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/image-8.png 600w, https://thanos.savoirguinee.com/content/images/2021/02/image-8.png 760w" sizes="(min-width: 720px) 720px"></figure><p>Le fichier passe ainsi &#xE0; l&apos;&#xE9;tat &quot;Stagged&quot;. A noter que la commande &quot;git add &quot; permet d&apos;ajouter plusieurs fichier (et uniquement des fichiers) en les s&#xE9;parant par un espace ou bien ajouter tout le contenu du r&#xE9;pertoire git avec la commande:</p><!--kg-card-begin: markdown--><pre><code class="language-bash"># Ajoute tout le contenu du repertoire
$ git add . 

# Ajoute tout le contenu de dossier 
$ git add dossier/* 
</code></pre>
<!--kg-card-end: markdown--><p>Une fois le fichier ajout&#xE9;, nous pouvez cr&#xE9;er notre 1er commit qui sera l&apos;enregistrement de l&apos;&#xE9;tat de notre r&#xE9;pertoire dans git. Et comme indiqu&#xE9; au niveau du sch&#xE9;ma des &#xE9;tats, le fichier passera &#xE0; l&apos;&#xE9;tat &quot;Unmodified&quot;. Pour cr&#xE9;er un commit, nous utilisons la commande suivante avec le param&#xE8;tre &#xA0;&quot;-m&quot; permettant de sp&#xE9;cifier le message.<br></p><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/02/image-10.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="826" height="182" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/image-10.png 600w, https://thanos.savoirguinee.com/content/images/2021/02/image-10.png 826w" sizes="(min-width: 720px) 720px"></figure><p>Notre commit s&apos;appel &quot;<em>Mon coomit: 1</em>&quot;. Tu aurais pu mettre un nom de commit diff&#xE9;rent, en g&#xE9;n&#xE9;ral il correspond &#xE0; une description de tes modifications. Nous voyons aussi que git nous fait un petit r&#xE9;sum&#xE9; des modifications.</p><p>Voici la liste des commits disponibles avec la commande: &quot;git logs&quot;</p><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/02/image-11.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="890" height="244" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/image-11.png 600w, https://thanos.savoirguinee.com/content/images/2021/02/image-11.png 890w" sizes="(min-width: 720px) 720px"></figure><p>Nous reviendrons plus en d&#xE9;tails sur la magie de &quot;git log&quot;, mais int&#xE9;ressons nous un peu &#xE0; cette image. Nous avons:</p><!--kg-card-begin: markdown--><ul>
<li>L&apos;identifiant du commit : b0ea64360e6ea6165e98d95e2eb668ee325aec8d</li>
<li>La branche associ&#xE9; au commit: <em>master</em></li>
<li>Auteur du commit: Ce sont les infos que nous avions saisi au d&#xE9;but avec la commande &quot;git config --global user.name&quot; et &quot;git config --global user.email&quot;</li>
<li>Messsage: &quot;Mon commit: 1&quot;</li>
</ul>
<!--kg-card-end: markdown--><p>Nous allons effectuer les op&#xE9;rations suivantes afin d&apos;avoir 3 commits au niveau de notre repository:<br>	a - Modifier le contenu de contenu du fichier avec un &#xE9;diteur de texte classique et remplacer notre texte (print) par &#xA0;&quot;Bienvenue sur ce cours Git&quot;. Un git status nous montre que le fichier repasse &#xE0; l&#x2019;&#xE9;tat &quot;Modified&quot;.</p><p>En plus du &quot;git status&quot;, &#xA0;nous pouvons v&#xE9;rifier les modifications effectu&#xE9;es (depuis le commit pr&#xE9;c&#xE9;dent) avec la commande: &quot;git diff&quot;.</p><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/02/image-14.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="1012" height="748" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/image-14.png 600w, https://thanos.savoirguinee.com/content/images/size/w1000/2021/02/image-14.png 1000w, https://thanos.savoirguinee.com/content/images/2021/02/image-14.png 1012w" sizes="(min-width: 720px) 720px"></figure><p>Il faut &#xE0; nouveau refaire les commandes:</p><!--kg-card-begin: markdown--><pre><code># Changer l&apos;&#xE9;tat &#xE0; Stagged
$ git add tuto-git.py

# Changer l&apos;&#xE9;tat &#xE0; Unmodified
$ git commit -m &quot;Changement du message&quot;


</code></pre>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/02/image-15.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="926" height="186" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/image-15.png 600w, https://thanos.savoirguinee.com/content/images/2021/02/image-15.png 926w" sizes="(min-width: 720px) 720px"></figure><p>	b - &#xA0;Cr&#xE9;er un second fichier &#xA0;que nous allons appeler &quot;lib-python.py&quot; qui aura pour commit message &quot;Ajout d&apos;une lib&quot; une fois ajout&#xE9; &#xE0; git.</p><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/02/image-16.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="1082" height="462" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/image-16.png 600w, https://thanos.savoirguinee.com/content/images/size/w1000/2021/02/image-16.png 1000w, https://thanos.savoirguinee.com/content/images/2021/02/image-16.png 1082w" sizes="(min-width: 720px) 720px"></figure><p>Le fichier lib-python.py contient uniquement la ligne: #Lib python</p><p>Maintenant que nous avons 3 commits nous pouvons voyager dans le temps.</p><h3 id="3-voyage-dans-le-temps">	3- Voyage dans le temps</h3><p>Revoyons vite fait nos commits et leur infos sur la branche master: </p><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/02/image-17.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="916" height="660" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/image-17.png 600w, https://thanos.savoirguinee.com/content/images/2021/02/image-17.png 916w" sizes="(min-width: 720px) 720px"></figure><p>Pour avoir un minimum d&apos;informations, nous pouvons rajouter des param&#xE8;tres &#xE0; la commande &quot;git log&quot;.</p><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/02/image-18.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="610" height="178" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/02/image-18.png 600w, https://thanos.savoirguinee.com/content/images/2021/02/image-18.png 610w"></figure><p>A noter qu&apos;il y&apos;a plusieurs format de logs que vous pouvez afficher. Cel&#xE0; peut par exemple &#xEA;tre utile lorsque vous effectuer des releases notes. Plus de details sur ce <a href="https://www.edureka.co/blog/git-format-commit-history/">site-web</a>.	</p><p>	Attentions, les commit ID seront diff&#xE9;rents sur ton ordinateur. Tu remarquera aussi la branche master correspond toujours au dernier commit. En acc&#xE9;der &#xE0; une branche correspond juste &#xE0; acc&#xE9;der au dernier commit, et HEAD est une variable qui correspond au commit sur lequel nous nous trouvons.<br> cela:</p><!--kg-card-begin: markdown--><h3 id="accderau1ercommit">Acc&#xE8;der au 1er commit</h3>
<pre><code>$ git checkout b0ea643
</code></pre>
<p>Mettre les 7 premi&#xE8;res valeurs du commit sont suffisant. Git t&apos;informera que que HEAD pointe maintenant vers ce commit. Tu remarqueras aussi le fichier que l&apos;etat de notre dossier a chang&#xE9;:</p>
<ul>
<li>Le dernier fichier que nous avons rajout&#xE9; a disparu.</li>
<li>Le fichier tuto-git.py a repris son contenu initial.</li>
</ul>
<h3 id="verifierlecommitactuel">Verifier le commit actuel.</h3>
<p>Il suffit d&apos;afficher le HEAD.</p>
<pre><code>$ git show head
</code></pre>
<h3 id="crerunebranche">Cr&#xE9;er une branche</h3>
<p>Une branche est cr&#xE9;&#xE9;e (par defaut) &#xE0; partir du HEAD sur lequel nous nous trouvons, ce qui peut donc &#xEA;tre un commit ou une autre branche. Nous allons nous deplacer vers le commit 2 et cr&#xE9;er une branch que nous appelerons &quot;dev&quot;.</p>
<pre><code>$ git checkout 37ec6a7
$ git checkout -b dev
# le param&#xE8;tre -b indique que nous cr&#xE9;eons une nouvelle branch
</code></pre>
<p>Nous aurons ainsi ce graphe, qui indique que la branche &quot;dev&quot; se situe sur le second commit.</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/02/image-19.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="490" height="290"></figure><p>	La branche dev devient ainsi notre nouveau HEAD et nous pouvons y rajouter d&apos;autres modifications. La branch master d&#xE9;passe pour l&apos;instant dev d&apos;un commit qui correspond au dernier fichier que nous avons ajout&#xE9; (lib-python.py). Ce fichier ne s&apos;affichera que lorsque nous revenons sur la branche &quot;master&quot;.</p><pre><code>$ git checkout master</code></pre><p>Nous pouvons ainsi cr&#xE9;er plusieurs branches qui vont correspondre &#xE0; la modification (sujet du sprint) que nous voulons effectuer. </p><p>Voici &#xA0;un exemple de repository diff&#xE9;rent du notre &#xA0;ayant plusieurs branches:</p><figure class="kg-card kg-image-card"><img src="https://thanos.savoirguinee.com/content/images/2021/03/image.png" class="kg-image" alt="I - Git : Les bases" loading="lazy" width="958" height="1010" srcset="https://thanos.savoirguinee.com/content/images/size/w600/2021/03/image.png 600w, https://thanos.savoirguinee.com/content/images/2021/03/image.png 958w" sizes="(min-width: 720px) 720px"></figure><p>Une fois l&apos;ensemble des modifications effectu&#xE9;es sur une branche, nous pouvons les appliquer sur la branche principale (master) en effectuant une fusion.<br>	Ainsi, plusieurs d&#xE9;veloppeurs peuvent ajouter des modifications du projets sur des branches diff&#xE9;rentes et fusionner plus tard leurs modifications sur la branche principale. &#xA0;Pour effectuer cette fusion il faut:</p><!--kg-card-begin: markdown--><p>Se placer sur la branche qui re&#xE7;oit la fusion (master par exemple)</p>
<pre><code>$ git checkout master
</code></pre>
<p>Fusionner la branche dev vers master</p>
<pre><code>$ git merge dev
</code></pre>
<!--kg-card-end: markdown--><p>Tous les commits qui ont &#xE9;t&#xE9; rajout&#xE9; sur la branche &#xA0;&quot;dev&quot; vont ainsi se retrouver sur la branche &quot;master&quot;. </p><h3 id="4-ajouter-des-versions-gr-ce-aux-tags">	4- Ajouter des versions gr&#xE2;ce aux tags</h3><p>	Lors de la cr&#xE9;ation d&apos;un projet, nous utilisons un syst&#xE8;me de version qui est en g&#xE9;n&#xE9;ral sous ce format X.Y.Z ( Ex: 1.0.1) o&#xF9; les valeurs de X, Y ou Z correspondent &#xE0; une &#xE9;volution d&apos;une certaine cat&#xE9;gorie de fonctionnalit&#xE9; de notre projet. Plus de d&#xE9;tails sur ce format avec <a href="https://semver.org/">cette page</a> &#xA0;qui d&#xE9;crit le semantic versionning. <br>C&apos;est en anglais je sais, mais dis toi que moi aussi j&apos;aurai pu ecrire ce document en anglais.</p><p>	Une version n&apos;est rien d&apos;autre qu&apos;un commit que nous allons nommer au format X.Y.Z. Ci dessous les commandes pour cr&#xE9;er un tag ou le manipuler:</p><!--kg-card-begin: markdown--><p>Se placer au niveau du commit &#xE0; nommer.</p>
<pre><code>$ git checkout 224916aef8c1776778eb79c0537365d4989d374c
</code></pre>
<p>Ajouter un tag avec un message</p>
<pre><code>git tag -a 1.4.0 -m &quot;my version 1.4.0&quot;
</code></pre>
<p>Ajouter un tag sans message</p>
<pre><code>git tag  1.4.0 
</code></pre>
<p>Afficher les tags</p>
<pre><code>git tag 
</code></pre>
<p>Supprimer un tag</p>
<pre><code>git tag -d 1.4.0 
</code></pre>
<p>Acc&#xE8;der &#xE0; un tag specifique:</p>
<pre><code>git checkout 1.4.0
</code></pre>
<!--kg-card-end: markdown--><p>Ces tags sont ainsi beaucoup plus facile &#xE0; manipuler que les commits et permettent de livrer une version sp&#xE9;cifique de notre projet.</p><h2 id="ii-rappel-des-commandes-de-base-">II - Rappel des commandes de base:</h2><p>	Ci-dessous les commandes &#xE0; retenir pour manipuler votre &quot;repository git&quot;.</p><!--kg-card-begin: markdown--><h3 id="1lerapositorygit">1- Le rapository git</h3>
<ul>
<li>
<h5 id="creation">Creation</h5>
</li>
</ul>
<pre><code>$ git init
</code></pre>
<ul>
<li>
<h5 id="suppressiondurepository">Suppression du repository</h5>
</li>
</ul>
<pre><code>$ rm -r .git
</code></pre>
<h3 id="2lesbranches">2 - Les branches</h3>
<ul>
<li>
<h5 id="crationdunebranche">Cr&#xE9;ation d&apos;une branche</h5>
</li>
</ul>
<pre><code>$ git checkout -b nom_branche 
</code></pre>
<ul>
<li>
<h5 id="listedesbranches">Liste des branches</h5>
</li>
</ul>
<pre><code>$ git branch 
</code></pre>
<ul>
<li>
<h5 id="accderunebranche">Acc&#xE8;der &#xE0; une branche</h5>
</li>
</ul>
<pre><code>$ git checkout nom_branche 
</code></pre>
<ul>
<li>
<h5 id="fusionner2branches">Fusionner 2 branches</h5>
</li>
</ul>
<pre><code>$ git checkout nom_branche_destination
$ git merge nom_branche_source
</code></pre>
<ul>
<li>
<h5 id="supprimerunebranche">Supprimer une branche</h5>
</li>
</ul>
<pre><code>$ git branch -D nom_branch 
</code></pre>
<h3 id="3lescommits">3 - Les commits</h3>
<ul>
<li>
<h5 id="ajouterunoudesfichiersauprochaincommit">Ajouter un ou des fichiers au prochain commit</h5>
</li>
</ul>
<pre><code>$ git add nom_fichier_1 [nom_fichier_1 .... nom_fichier_X]
</code></pre>
<ul>
<li>
<h5 id="ajoutertouslesfichiers">Ajouter tous les fichiers</h5>
</li>
</ul>
<pre><code>$ git add .
</code></pre>
<ul>
<li>
<h5 id="creruncommit">Cr&#xE9;er un commit</h5>
</li>
</ul>
<pre><code>$ git commit -m &quot;Message du commit&quot;
</code></pre>
<ul>
<li>
<h5 id="modifierlecommitprcedentaprsavoirrajoutunfichier">Modifier le commit pr&#xE9;cedent apr&#xE8;s avoir rajout&#xE9; un fichier</h5>
</li>
</ul>
<pre><code>$ git commit --amend 
</code></pre>
<ul>
<li>
<h5 id="listedecommit">Liste de commit</h5>
</li>
</ul>
<pre><code>$ git log
$ git log --oneline
</code></pre>
<ul>
<li>
<h5 id="annulerlesmodificationseffectulorsduncommit">Annuler les modifications effectu&#xE9; lors d&apos;un commit</h5>
</li>
</ul>
<pre><code>$ git revert IDENTIFIANT_COMMIT
</code></pre>
<h3 id="4lestags">4 - Les tags</h3>
<ul>
<li>
<h5 id="creruntag">Cr&#xE9;er un tag</h5>
</li>
</ul>
<pre><code>$  git tag -a nom_tag IDENTIFIANT_COMMIT -m &quot;Message du tag&quot;
</code></pre>
<ul>
<li>
<h5 id="creruntagsanslemessage">Cr&#xE9;er un tag sans le message</h5>
</li>
</ul>
<pre><code>$  git tag  nom_tag IDENTIFIANT_COMMIT 
</code></pre>
<ul>
<li>
<h5 id="afficherlesdetailsduntag">Afficher les details  d&apos;un tag</h5>
</li>
</ul>
<pre><code>$  git show  nom_tag 
</code></pre>
<ul>
<li>
<h5 id="afficherlalistedestags">Afficher la liste des tags</h5>
</li>
</ul>
<pre><code>$  git tag
</code></pre>
<ul>
<li>
<h5 id="accderuntag">Acc&#xE8;der &#xE0; un tag</h5>
</li>
</ul>
<pre><code>$  git checkout nom_tag
</code></pre>
<ul>
<li>
<h5 id="supprimeruntag">Supprimer un tag</h5>
</li>
</ul>
<pre><code>$  git tag -d nom_tag
</code></pre>
<!--kg-card-end: markdown--><p>Pour la suite de ces tutorials qui portent sur Git, nous parlerons d&apos;un outils GitFlow qui permet de faciliter la cr&#xE9;ation et la fusion des branches au niveau d&apos;un projet. Retrouvez cet article expliqu&#xE9; sur <a href="https://thanos.savoirguinee.com/git-gitflow/">ce lien</a>.</p><p></p>]]></content:encoded></item></channel></rss>