<?xml
version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	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"
>

<channel xml:lang="fr">
	<title>La Taverne &#224; Tonton</title>
	<link>https://blog.smellup.net/</link>
	<description>&#171;&#160;Nagu&#232;re encore, au caf&#233; du Commerce, on ne jurait que par le progr&#232;s. Qu'il y ait ou n'y ait pas progr&#232;s, le progr&#232;s en tant qu'id&#233;al a un sens, et un sens louable&#160;: faire toujours mieux. Aujourd'hui l'id&#233;al du progr&#232;s est remplac&#233; par l'id&#233;al de l'innovation&#160;: il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit nouveau, m&#234;me si c'est pire qu'avant, et cela de toute &#233;vidence. Cet id&#233;al est poursuivi dans les plus petites choses comme dans les plus grandes&#160;; il est absurde, mais le public n'a pas conscience de cette absurdit&#233;, ou, s'il en a conscience, se tait et serre les fesses, car l'innovation, en tant qu'Id&#233;e-B&#234;te, est une divinit&#233;, et comme telle effrayante. Adorez-la, ou gare&#160;!&#160;&#187;
Henry de Montherlant, Va jouer avec cette poussi&#232;re, Carnets 1958-1964</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://blog.smellup.net/spip.php?page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Isocode, structure du plugin</title>
		<link>https://blog.smellup.net/spip.php?article96</link>
		<guid isPermaLink="true">https://blog.smellup.net/spip.php?article96</guid>
		<dc:date>2024-05-06T12:42:09Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>



		<description>
&lt;p&gt;Les ressources ISO pour les langues &lt;br class='autobr' /&gt;
Le plugin utilise des fichiers de code ISO dont l'extraction est faite &#224; partir de ressources diverses sur internet. On d&#233;taille ci-apr&#232;s la m&#233;thode pour chaque fichier. &lt;br class='autobr' /&gt;
Les fichiers SIL des codes de langues ISO-639. ils sont t&#233;l&#233;chargeables sur la page . Cette page explique le contenu de chaque fichier et donne le sch&#233;ma de chacune des tables. iso639codes.tab&#160;: rep&#233;rer le lien UTF-8 qui suit la phrase &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Download ISO 639-3 code set&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; et faire&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.smellup.net/spip.php?rubrique30" rel="directory"&gt;Plugins possibles&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-11&#034; id=&#034;nav6a2e0bdeafa7c9.80000223&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Les-ressources-ISO-pour-les-langues&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Les-ressources-ISO-pour-les-langues&#034; class=&#034;spip_ancre&#034;&gt;Les ressources ISO pour les langues&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Les-ressources-IANA&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Les-ressources-IANA&#034; class=&#034;spip_ancre&#034;&gt;Les ressources IANA&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Les-ressources-ISO-pour-les-subdivisions&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Les-ressources-ISO-pour-les-subdivisions&#034; class=&#034;spip_ancre&#034;&gt;Les ressources ISO pour les subdivisions&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Les-ressources-ISO-des-pays&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Les-ressources-ISO-des-pays&#034; class=&#034;spip_ancre&#034;&gt;Les ressources ISO des pays&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Les-codes-ISO&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Les-codes-ISO&#034; class=&#034;spip_ancre&#034;&gt;Les codes ISO&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Les-traductions-additionnelles&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Les-traductions-additionnelles&#034; class=&#034;spip_ancre&#034;&gt;Les traductions additionnelles&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Les-ressources-GEONAMES&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Les-ressources-GEONAMES&#034; class=&#034;spip_ancre&#034;&gt;Les ressources GEONAMES&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Les-ressources-GEOIP&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Les-ressources-GEOIP&#034; class=&#034;spip_ancre&#034;&gt;Les ressources GEOIP&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Les-ressources-UN-M49-des-regions-du-monde&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Les-ressources-UN-M49-des-regions-du-monde&#034; class=&#034;spip_ancre&#034;&gt;Les ressources UN M49 des r&#233;gions du monde&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Fichier&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Fichier&#034; class=&#034;spip_ancre&#034;&gt;Fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;M49regions.csv&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Fichier-1e13&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Fichier-1e13&#034; class=&#034;spip_ancre&#034;&gt;Fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;M49regions_countries.csv&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;h2 class=&#034;h2&#034; id='Les-ressources-ISO-pour-les-langues'&gt;Les ressources ISO pour les langues&lt;a class='sommaire-back sommaire-back-11' href='#s-Les-ressources-ISO-pour-les-langues' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Le plugin utilise des fichiers de code ISO dont l'extraction est faite &#224; partir de ressources diverses sur internet. On d&#233;taille ci-apr&#232;s la m&#233;thode pour chaque fichier.&lt;/p&gt;
&lt;p&gt;Les fichiers SIL des codes de langues ISO-639. ils sont t&#233;l&#233;chargeables sur la page &lt;a href=&#034;http://www-01.sil.org/iso639-3/download.asp&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://www-01.sil.org/iso639-3/down...&lt;/a&gt;. Cette page explique le contenu de chaque fichier et donne le sch&#233;ma de chacune des tables.&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;iso639codes.tab&lt;/strong&gt;&#160;: rep&#233;rer le lien &lt;a href=&#034;http://www-01.sil.org/iso639-3/iso-639-3.tab&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;UTF-8&lt;/a&gt; qui suit la phrase &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Download ISO 639-3 code set&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; et faire enregistrer le lien sous. On obtient un fichier nomm&#233; iso-639-3.tab qu'il faut renommer en iso639codes.tab.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;iso639names.tab&lt;/strong&gt;&#160;: rep&#233;rer le lien &lt;a href=&#034;http://www-01.sil.org/iso639-3/iso-639-3_Name_Index.tab&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;UTF-8&lt;/a&gt; qui suit la phrase &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Download ISO 639-3 Language Names Index&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; et faire enregistrer le lien sous. On obtient un fichier nomm&#233; iso-639-3_Name_Index.tab qu'il faut renommer en iso639names.tab.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;iso639macros.tab&lt;/strong&gt;&#160;: rep&#233;rer le lien &lt;a href=&#034;http://www-01.sil.org/iso639-3/iso-639-3-macrolanguages.tab&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ISO 639-3 macrolanguage mappings&lt;/a&gt; qui suit la phrase &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Download&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; et faire enregistrer le lien sous. On obtient un fichier nomm&#233; iso-639-3-macrolanguages.tab qu'il faut renommer en iso639macros.tab.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;iso639retirements.tab&lt;/strong&gt;&#160;: rep&#233;rer le lien &lt;a href=&#034;http://www-01.sil.org/iso639-3/iso-639-3_Retirements.tab&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;UTF-8&lt;/a&gt; qui suit la phrase &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Download ISO 639-3 code retirement mappings&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; et faire enregistrer le lien sous. On obtient un fichier nomm&#233; iso-639-3_Retirements.tab qu'il faut renommer en iso639retirements.tab.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Le fichier &lt;strong&gt;iso639families.tab&lt;/strong&gt; est construit en t&#233;l&#233;chargeant le lien sur la page &lt;a href=&#034;http://id.loc.gov/vocabulary/iso639-5.html&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://id.loc.gov/vocabulary/iso639...&lt;/a&gt; de la Library of Congress. On obtient un fichier iso639-5.tsv qu'il faut renommer en iso639families.tab.&lt;/p&gt;
&lt;p&gt;Le fichier &lt;strong&gt;iso3166countries.txt&lt;/strong&gt; est construit &#224; partir de la page du site officiel de l'ISO, &lt;a href=&#034;https://www.iso.org/obp/ui/fr/#search/code&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://www.iso.org/obp/ui/fr/#sear...&lt;/a&gt;. Afficher 300 r&#233;sultats par page ce qui permet d'avoir toute la table sur une seule page. Ensuite, s&#233;lectionner et copier la table enti&#232;re sans l'en-t&#234;te et la coller dans Excel&#160;: on obtient un tableau excel correctement format&#233; avec le bon charset o&#249; il faut juste faire attention que les valeurs num&#233;riques ont perdu les z&#233;ros qui d&#233;butent (005 devient 5). Il faudra donc les r&#233;introduire en cr&#233;ant une colonne via la fonction Texte(valeur, &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;00#&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;). S&#233;lectionner le tableau entier et le copier, puis le coller dans un &#233;diteur comme PHPStorms. Il faut alors recr&#233;er un fichier type csv en remettant chaque bloc de 5 lignes sur une seule ligne et s&#233;par&#233; par un point virgule en rempla&#231;ant les tabulations par le point virgule.&lt;br class='manualbr' /&gt;Ins&#233;rer pour finir la premi&#232;re ligne d'en-t&#234;te qui doit &#234;tre&#160;: &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;English name;French name;Alpha-2;Alpha-3;Numeric&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Le fichier &lt;strong&gt;iso15924scripts.txt&lt;/strong&gt; est construit en t&#233;l&#233;chargeant sur la page &lt;a href=&#034;http://www.unicode.org/iso15924/iso15924-text.html&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://www.unicode.org/iso15924/iso...&lt;/a&gt; le fichier zip iso15924.txt.zip en suivant le lien &lt;a href=&#034;http://www.unicode.org/iso15924/iso15924.txt.zip&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;T&#233;l&#233;chargez le fichier&lt;/a&gt;. D&#233;zipper le fichier pour r&#233;cup&#233;rer le fichier texte et le renommer en iso15924scripts.txt. Comme le fichier ne contient pas d'en-t&#234;te il faut rajouter au d&#233;but du fichier la ligne &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;Code;N&#176;;English Name;Nom fran&#231;ais;PVA;Date&lt;/code&gt;&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Les-ressources-IANA'&gt;Les ressources IANA&lt;a class='sommaire-back sommaire-back-11' href='#s-Les-ressources-IANA' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Le site IANA fournit un certains nombre de ressources dont un ensemble de registre sur les protocoles informatiques. L'un d'entre eux est le registre des subtags 5646, c'est-&#224;-dire la liste officielle des sous-&#233;tiquettes qui composent les &#233;tiquettes de langue utilis&#233;es dans les protocoles informatiques. La page est accessible &#224; l'url &lt;a href=&#034;http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://www.iana.org/assignments/lan...&lt;/a&gt; ou en cherchant le lien &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Language Subtag Registry&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; dans la page des protocoles &lt;a href=&#034;http://www.iana.org/protocols&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://www.iana.org/protocols&lt;/a&gt;.&lt;br class='manualbr' /&gt;Cette page est d&#233;crypt&#233;e r&#233;cup&#233;r&#233;e par la fonction SPIP idoine sans aucune modification de format ou autre.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Les-ressources-ISO-pour-les-subdivisions'&gt;Les ressources ISO pour les subdivisions&lt;a class='sommaire-back sommaire-back-11' href='#s-Les-ressources-ISO-pour-les-subdivisions' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;La norme ISO 3166-2 fournit une nomenclature pour certaines subdivisions administratives des pays mais pas pour toutes. Par exemple, pour la France, les r&#233;gions et d&#233;partements sont incluses dans l'ISO 3166-2 mais pas les arrondissements, communes et cantons.&lt;/p&gt;
&lt;p&gt;L'ISO ne fournit pas gratuitement de fichier pour cette nomenclature, ni par pays ni globalement. Il faut utiliser les pages web de chaque pays pour construire un tel fichier manuellement. La page de base est&#160;: &lt;a href=&#034;https://www.iso.org/obp/ui/fr/#iso:pub:PUB500001:en&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://www.iso.org/obp/ui/fr/#iso:pub:PUB500001:en&lt;/a&gt;. Elle propose un tableau des pays (code ISO 3166-1 alpha2) dont seules les cellules en fond vert d&#233;signe une nomenclature compl&#232;te et valid&#233;e.&lt;/p&gt;
&lt;p&gt;En cliquant sur une cellule on affiche une page dans la langue par d&#233;faut du navigateur (soit le fran&#231;ais) qui pr&#233;sente dans un tableau la liste des subdivisions du pays avec le code ISO, la cat&#233;gorie, la subdivision m&#232;re &#233;ventuelle et les traductions dans la langue ou les langues du pays (une ligne par traduction).&lt;/p&gt;
&lt;p&gt;Afin d'&#233;viter les accents pour la cat&#233;gorie, on extrait la page anglaise (changer fr par en dans l'url) sachant que de toute fa&#231;on les traductions sont dans la langue du pays. Dans certains cas, pays francophones, il faudra combiner la page fran&#231;aise et anglaise. De m&#234;me, pour les langues dont l'&#233;criture n'est pas romane, la traduction est romanis&#233;e&#160;: on ne doit pas l'identifier avec le code de langue originelle mais comme du fran&#231;ais. Par exemple, pour le Maroc il faut remplacer le code ar par fr car en SPIP ar d&#233;signe l'&#233;criture arabe et pas romane.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Les-ressources-ISO-des-pays'&gt;Les ressources ISO des pays&lt;a class='sommaire-back sommaire-back-11' href='#s-Les-ressources-ISO-des-pays' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 class=&#034;h3&#034; id='Les-codes-ISO'&gt; Les codes ISO&lt;a class='sommaire-back sommaire-back-11' href='#s-Les-codes-ISO' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;La norme ISO 3166-1 fournit la nomenclature internationale des 249 pays mais comme d'habitude aucun fichier source gratuit. Il faut donc le construire &#224; partir d'une page ISO, &#224; savoir&#160;: &lt;a href=&#034;https://www.iso.org/fr/publication/PUB500001.html&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://www.iso.org/fr/publication/PUB500001.html&lt;/a&gt;, lien Liste compl&#232;te des noms de pays. Le tableau pr&#233;sent&#233; est pagin&#233;, il faut choisir 300 items par page de fa&#231;on &#224; l'afficher en entier. Le tableau affiche 5 colonnes, le nom court anglais, le nom court fran&#231;ais et les 3 codes ISO 3166-1 alpha2, alpha3 et num&#233;rique.&lt;/p&gt;
&lt;p&gt;On copie le tableau dans un fichier csv, en rempla&#231;ant les tabulations de s&#233;paration par un point virgule et on adapte le nom des colonnes. Enfin, on rajoute une colonne suppl&#233;mentaire nomm&#233;e &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;category&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; que l'on remplit avec la valeur &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;country&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; pour tous les pays.&lt;/p&gt;
&lt;h3 class=&#034;h3&#034; id='Les-traductions-additionnelles'&gt; Les traductions additionnelles&lt;a class='sommaire-back sommaire-back-11' href='#s-Les-traductions-additionnelles' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;La base de donn&#233;es de terminologie de l'UN, UNTERM, permet d'exporter un fichier de traduction des pays dans les langues russe, chinoise, arabe et espagnole (les langues fran&#231;aise et anglaise sont d&#233;j&#224; connues). Le fichier excel d'export contient les nom court et long de chacune de ces langues. Nomenclatures n'utilise que les noms courts.&lt;/p&gt;
&lt;p&gt;Le probl&#232;me du fichier obtenu est qu'il ne fait aucune r&#233;f&#233;rence &#224; un code ISO du pays. Il faut donc construire le fichier final en utilisant ajoutant un code ISO &#224; pays (un pays = une ligne). En outre, il n'y a que 197 lignes alors qu'il existe 259 pays.&lt;/p&gt;
&lt;p&gt;Pour ajouter les code ISO alpha2 on cr&#233;e une feuille suppl&#233;mentaire avec le tableau des codes ISO des pays qui contient la traduction fran&#231;aise et anglaise. On cr&#233;e dans la feuille des traductions deux colonnes, fr et en, avec une formule en RECHERCHEV qui permet de trouver le code ISO &#224; partir des traductions en et fr.&lt;/p&gt;
&lt;p&gt;De fait, on remarque que quelques traductions sont diff&#233;rentes&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; il existe des * dans les traductions UNTERM que l'on peut supprimer&lt;/li&gt;&lt;li&gt; il existe des traductions dans le fichier ISO source qui ne sont pas identiques que celles de l'UNTERM, la diff&#233;rence se trouvant toujours dans les termes entre parenth&#232;ses. En g&#233;n&#233;ral, celles de l'UNTERM sont meilleures car elle int&#232;gre les mots &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;r&#233;publique de&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; ou &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;ile&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; dans le nom et pas dans les parenth&#232;ses. Cela est particuli&#232;rement &#233;vident avec les deux Congos.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;On cr&#233;e donc deux fichiers csv s&#233;par&#233;s&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; celui des traductions UNTERM des pays dont le nom fr et en est identique &#224; l'ISO&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; celui des traductions UNTERM des pays dont le nom fr ou en est diff&#233;rent de l'ISO.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;En outre, il existe des noms ISO qui ne poss&#232;de pas de traduction UNTERM mais dont le nom ISO en ou fr pourrait suivre la m&#234;me logique que l'UNTERM.&#160;On cr&#233;e un troisi&#232;me fichier pour ces nouvelles traductions en et fr.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Les-ressources-GEONAMES'&gt;Les ressources GEONAMES&lt;a class='sommaire-back sommaire-back-11' href='#s-Les-ressources-GEONAMES' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Geonames est un organisme qui fournit des donn&#233;es g&#233;ographiques soit par le biais de fichiers CSV int&#233;grables dans une base de donn&#233;es soit par l'interm&#233;diaire de services web REST.&lt;/p&gt;
&lt;p&gt;Dans Isocode, on utilise Geonames pour compl&#233;ter la table des pays - iso3166countries - avec les informations contenues dans le fichier Geonames &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;countryInfo.txt&lt;/code&gt; disponible &#224; l'adresse &lt;a href=&#034;http://download.geonames.org/export/dump/countryInfo.txt&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://download.geonames.org/export...&lt;/a&gt;. Ce fichier est au format texte de type CSV avec une tabulation comme d&#233;limiteur. Il suffit donc d'enregistrer la page pr&#233;c&#233;demment cit&#233;e et de retoucher le fichier en supprimant les commentaires rep&#233;r&#233;s par un caract&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#&lt;/code&gt; sauf la ligne pr&#233;c&#233;dent le premier pays qui fera office d'en-t&#234;te apr&#232;s lui avoir supprim&#233; le caract&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le fichier est in fine renomm&#233; en &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;iso3166countries-geonames-info.tab&lt;/code&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Les-ressources-GEOIP'&gt;Les ressources GEOIP&lt;a class='sommaire-back sommaire-back-11' href='#s-Les-ressources-GEOIP' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GeoIP est une librairie PHP qui permet de connaitre les donn&#233;es g&#233;ographiques associ&#233;es &#224; un IP. Elle permet en particulier de connaitre le continent d&#233;sign&#233; par un code &#224; deux lettres.&lt;/p&gt;
&lt;p&gt;Il existe une fichier json accessible &#224; cette adresse&#160;: &lt;a href=&#034;https://datahub.io/core/continent-codes/r/continent-codes.json&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://datahub.io/core/continent-c...&lt;/a&gt; qui contient le nom anglais et le code du continent. On le t&#233;l&#233;charge, on le compl&#232;te avec le nom fran&#231;ais, espagnol, russe, chinois et arabe que l'on r&#233;cup&#232;re dans le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;M49regions.csv&lt;/code&gt; et on le nomme &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;geoipcontinents.json&lt;/code&gt; avant de le stocker dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;services/geoip/&lt;/code&gt; du plugin.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Les-ressources-UN-M49-des-regions-du-monde'&gt;Les ressources UN M49 des r&#233;gions du monde&lt;a class='sommaire-back sommaire-back-11' href='#s-Les-ressources-UN-M49-des-regions-du-monde' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Le fichiers M49regions.csv et M49regions_countries.csv sont construits &#224; partir des pages&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href=&#034;https://unstats.un.org/unsd/methodology/m49/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://unstats.un.org/unsd/methodology/m49/&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://unstats.un.org/unsd/methodology/m49/overview/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://unstats.un.org/unsd/methodology/m49/overview/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&#034;h3&#034; id='Fichier'&gt; Fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;M49regions.csv&lt;/code&gt;&lt;a class='sommaire-back sommaire-back-11' href='#s-Fichier' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Pour le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;M49regions.csv&lt;/code&gt;, il faut r&#233;cup&#233;rer chaque table pour les 6 traductions de la page &lt;a href=&#034;https://unstats.un.org/unsd/methodology/m49/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://unstats.un.org/unsd/methodology/m49/&lt;/a&gt;, menu Geographic Regions et, extraire uniquement les r&#233;gions (laisser les pays que l'on rep&#232;re par leur code alpha3). Apr&#232;s on construit &#224; la main la liste avec le code M49 de la r&#233;gion (001, 002...) et chaque traduction dans une colonne (les langues sont en, fr, es, ru, ar et zh).&lt;br class='manualbr' /&gt;Il faut aussi d&#233;terminer le parent &#224; partir de l'arborescence pr&#233;sent&#233;e dans la page du site. La cat&#233;gorie est mise &#224; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;zone_region&lt;/code&gt; pour la plupart sauf les continents au sens GEOIP &#224; qui ont affectent la cat&#233;gorie &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;continent&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pour les continents, &#224; partir du moment o&#249; l'on choisi de retenir les codes GEOIP, cela revient &#224; choisir le mod&#232;le &#224; 7 continents. Ce n'est pas le mod&#232;le que l'on vient de saisir dans le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;M49regions.csv&lt;/code&gt;. Il faut donc le modifier comme le pr&#233;cise le renvoi en fin de tableau de la page des regions&#160;:&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;The continent of North America (numerical code 003) comprises Northern America (numerical code 021), Caribbean (numerical code 029), and Central America (numerical code 013&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Il faut donc faire les op&#233;rations suivantes sur le fichier&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; ajouter la ligne de la r&#233;gion North America / Am&#233;rique du Nord qui a bien un code M49, le 003 et lui affecter la cat&#233;gorie continent.&lt;/li&gt;&lt;li&gt; lier cette r&#233;gion &#224; son parent Am&#233;riques de code 019&lt;/li&gt;&lt;li&gt; supprimer la r&#233;gion 419 qui ne va plus &#234;tre utile&lt;/li&gt;&lt;li&gt; lier la r&#233;gion Am&#233;rique du Sud 005 &#224; son parent la r&#233;gion Am&#233;riques 019 &#233;tant donn&#233; que 419 a &#233;t&#233; supprim&#233;e et passer la cat&#233;gorie &#224; continent&lt;/li&gt;&lt;li&gt; lier les r&#233;gions Am&#233;rique Centrale 013, Cara&#239;bes 029, Am&#233;rique Septentrionale 021 &#224; son parent le continent Am&#233;rique du Nord 003&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Les modifications de ce fichier sont assez rares et d&#233;crites dans la m&#234;me page, menu Recent Changes. La derni&#232;re modification remonte &#224; 2017.&lt;/p&gt;
&lt;h3 class=&#034;h3&#034; id='Fichier-1e13'&gt; Fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;M49regions_countries.csv&lt;/code&gt;&lt;a class='sommaire-back sommaire-back-11' href='#s-Fichier-1e13' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Ce fichier permet de faire le lien entre chaque pays de la liste ISO 3166 et les r&#233;gions M49. Il suffit donc de garder deux colonnes, le code M49 du pays et le code M49 de sa r&#233;gion parent.&lt;/p&gt;
&lt;p&gt;Le plus simple est d'exporter le fichier Excel fran&#231;ais de la page &lt;a href=&#034;https://unstats.un.org/unsd/methodology/m49/overview/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://unstats.un.org/unsd/methodology/m49/overview/&lt;/a&gt; accessible par le menu Fullview.&lt;/p&gt;
&lt;p&gt;On ouvre le fichier Excel et on supprime toutes le colonnes &#224; droite de la colonne &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;M49 Code&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. On cr&#233;e un titre &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;parent&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; dans la colonne juste &#224; droite et on y copie la valeur de la r&#233;gion rattach&#233;e&#160;: pour la d&#233;terminer il suffit de prendre la r&#233;gion la plus &#224; droite parmi les 4 niveaux d'arborescence. Une fois fini, on peut supprimer les colonnes de r&#233;gion (8 colonnes) ainsi que la colonne du nom fran&#231;ais du pays qui ne nous sert pas.&lt;/p&gt;
&lt;p&gt;Pour obtenir 015 au lieu de 15, on duplique les colonnes M49 Code et Parent avec la formule TEXTE(cellule, &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;000&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;) que l'on recopie ensuite en copie valeur dans les colonnes M49 Code et Parent. On peut alors supprimer les colonnes de calcul et renommer la colonne &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;M49 Code&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; en &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;code_num&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;p&gt;Enfin, il faut modifier le code_num du pays Antartique de 001 (monde) &#224; 010 qui est le code du continent Antartique (on a donc deux territoires qui ont le m&#234;me code mais pas utilis&#233;s en m&#234;me temps).&lt;/p&gt;
&lt;p&gt;Pour terminer on enregistre le fichier Excel en CSV avec un &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; en guise de s&#233;parateur en le nommant &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;M49regions_countries.csv&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ce fichier varie peu mais surement plus que celui des r&#233;gions. Il est facile de le reconstruire si on constate une modification list&#233;e dans la page d&#233;di&#233;e.&lt;br class='manualbr' /&gt;Il est aussi &#224; noter que Taiwan n'apparait pas comme un pays UN M49.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>R&#233;capitulatif des modifications propos&#233;es</title>
		<link>https://blog.smellup.net/spip.php?article108</link>
		<guid isPermaLink="true">https://blog.smellup.net/spip.php?article108</guid>
		<dc:date>2022-03-02T13:16:30Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>



		<description>
&lt;p&gt;Introduction &lt;br class='autobr' /&gt;
Cet article a pour but de lister exhaustivement et par nature les actions &#224; entreprendre pour, d'une part, corriger les codes de langues actuels de SPIP et d'autre part, aligner le code de SPIP, des plugins et des outils avec ces changements. &lt;br class='autobr' /&gt;
Modifier la liste des langues &lt;br class='autobr' /&gt;
Langues &#224; supprimer &lt;br class='autobr' /&gt;
&#201;tiquettes &#224; modifier &lt;br class='autobr' /&gt;
&#201;tiquettes &#224; v&#233;rifier avant modification &lt;br class='autobr' /&gt;
Fichier excel r&#233;capitulatif. &lt;br class='autobr' /&gt;
Nouvelle gestion de la liste des langues &lt;br class='autobr' /&gt;
fichier JSON des langues support&#233;es (avec&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.smellup.net/spip.php?rubrique41" rel="directory"&gt;Normes ISO, RFC &amp; langues dans SPIP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-8&#034; id=&#034;nav6a2e0bdeb1a789.22904826&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Introduction&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Introduction&#034; class=&#034;spip_ancre&#034;&gt;Introduction&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Modifier-la-liste-des-langues&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Modifier-la-liste-des-langues&#034; class=&#034;spip_ancre&#034;&gt;Modifier la liste des langues&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Nouvelle-gestion-de-la-liste-des-langues&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Nouvelle-gestion-de-la-liste-des-langues&#034; class=&#034;spip_ancre&#034;&gt;Nouvelle gestion de la liste des langues&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Adaptation-du-code-de-SPIP&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Adaptation-du-code-de-SPIP&#034; class=&#034;spip_ancre&#034;&gt;Adaptation du code de SPIP&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Traduction-des-noms-de-langue&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Traduction-des-noms-de-langue&#034; class=&#034;spip_ancre&#034;&gt;Traduction des noms de langue&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Renommage-des-fichiers-de-langue&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Renommage-des-fichiers-de-langue&#034; class=&#034;spip_ancre&#034;&gt;Renommage des fichiers de langue&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Mise-a-jour-de-TradLang&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Mise-a-jour-de-TradLang&#034; class=&#034;spip_ancre&#034;&gt;Mise &#224; jour de TradLang&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Mise-a-jour-de-Smart-Paquets&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Mise-a-jour-de-Smart-Paquets&#034; class=&#034;spip_ancre&#034;&gt;Mise &#224; jour de Smart-Paquets&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;h2 class=&#034;h2&#034; id='Introduction'&gt;Introduction&lt;a class='sommaire-back sommaire-back-8' href='#s-Introduction' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Cet article a pour but de lister exhaustivement et par nature les actions &#224; entreprendre pour, d'une part, corriger les codes de langues actuels de SPIP et d'autre part, aligner le code de SPIP, des plugins et des outils avec ces changements.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Modifier-la-liste-des-langues'&gt;Modifier la liste des langues&lt;a class='sommaire-back sommaire-back-8' href='#s-Modifier-la-liste-des-langues' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Langues &#224; supprimer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&#201;tiquettes &#224; modifier&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&#201;tiquettes &#224; v&#233;rifier avant modification&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Fichier excel r&#233;capitulatif.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Nouvelle-gestion-de-la-liste-des-langues'&gt;Nouvelle gestion de la liste des langues&lt;a class='sommaire-back sommaire-back-8' href='#s-Nouvelle-gestion-de-la-liste-des-langues' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;fichier JSON des langues support&#233;es (avec une traduction minimale, ne pourrait-on pas imaginer que seuls les langues avec SPIP traduit soit propos&#233;e&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?).&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='44' class='spip_cadre spip_cadre_block' dir='ltr'&gt;[ { &#034;code&#034;: &#034;oc_auvern&#034;, &#034;composition&#034;: { &#034;langue&#034;: &#034;oc&#034;, &#034;extlang&#034;: null, &#034;region&#034;: null, &#034;ecriture&#034;: null, &#034;variante&#034;: &#034;auvern&#034;, &#034;usage_prive&#034;: null }, &#034;nom&#034;: &#034;auvernat&#034;, &#034;ancien_code&#034;: &#034;oc_auv&#034;, &#034;referent&#034;: &#034;jojo&#034; }, { &#034;code&#034;: &#034;oc_lemosin&#034;, &#034;composition&#034;: { &#034;langue&#034;: &#034;oc&#034;, &#034;extlang&#034;: null, &#034;region&#034;: null, &#034;ecriture&#034;: null, &#034;variante&#034;: &#034;lemosin&#034;, &#034;usage_prive&#034;: null }, &#034;nom&#034;: &#034;auvernat&#034;, &#034;ancien_code&#034;: &#034;oc_lms&#034;, &#034;referent&#034;: &#034;jojo&#034; }, { &#034;code&#034;: &#034;fr_x_smurf&#034;, &#034;composition&#034;: { &#034;langue&#034;: &#034;fr&#034;, &#034;extlang&#034;: null, &#034;region&#034;: null, &#034;ecriture&#034;: null, &#034;variante&#034;: null, &#034;usage_prive&#034;: &#034;smurf&#034; }, &#034;nom&#034;: &#034;fran&#231;ais stroumpf&#034;, &#034;ancien_code&#034;: &#034;fr_tu&#034;, &#034;referent&#034;: &#034;juju&#034; }
]&lt;/textarea&gt;
&lt;p&gt;Proc&#233;dure d'ajout d'une langue&#160;: il faut v&#233;rifier la correction des attributs de la langue saisis =&gt; utiliser ISOCODE&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Adaptation-du-code-de-SPIP'&gt;Adaptation du code de SPIP&lt;a class='sommaire-back sommaire-back-8' href='#s-Adaptation-du-code-de-SPIP' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; inc/lang.php
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; inc/traduire.php
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; en particulier pour la langue alternative.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Pour les anciens codes et la compatibilit&#233;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;???&lt;/p&gt;
&lt;p&gt;A partir de lang.json&#160;:
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; g&#233;n&#233;ration de inc/lang_liste.php
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; g&#233;n&#233;ration de inc/lang_info.php avec la langue alternative voire plus (si r&#233;duit &#224; la langue alternative, on pourrait l'appeler lang_alter.php&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Traduction-des-noms-de-langue'&gt;Traduction des noms de langue&lt;a class='sommaire-back sommaire-back-8' href='#s-Traduction-des-noms-de-langue' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; soit dans le JSON
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; soit dans un module de langue &#224; part enti&#232;re du type lang/lang_xx.php
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; soit int&#233;gr&#233; &#224; un module spip comme ecrire, public ou spip&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Renommage-des-fichiers-de-langue'&gt;Renommage des fichiers de langue&lt;a class='sommaire-back sommaire-back-8' href='#s-Renommage-des-fichiers-de-langue' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Ceux de spip
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; ceux de tous les plugins concern&#233;s&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Mise-a-jour-de-TradLang'&gt;Mise &#224; jour de TradLang&lt;a class='sommaire-back sommaire-back-8' href='#s-Mise-a-jour-de-TradLang' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Modification de la liste des langues traduites (via inc/lang_liste&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?)
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; patch pour la BDD pour renommer les r&#233;f&#233;rences actuelles aux codes erron&#233;s&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Mise-a-jour-de-Smart-Paquets'&gt;Mise &#224; jour de Smart-Paquets&lt;a class='sommaire-back sommaire-back-8' href='#s-Mise-a-jour-de-Smart-Paquets' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Qui utilise aujourd'hui le inc/lang_liste de SPIP&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Git avanc&#233;</title>
		<link>https://blog.smellup.net/spip.php?article121</link>
		<guid isPermaLink="true">https://blog.smellup.net/spip.php?article121</guid>
		<dc:date>2020-04-18T12:25:29Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>cy_altern</dc:creator>



		<description>
&lt;p&gt;Des &#233;l&#233;ments pour une utilisation avanc&#233;e de Git avec SPIP &lt;br class='autobr' /&gt; Utiliser git pour pusher les mises &#224; jour vers un site en production &lt;br class='autobr' /&gt;
** Principe&#160;: Cr&#233;er un d&#233;p&#244;t git bare sur le serveur de production avec un hook post commit qui publie ce qu'il re&#231;oit dans le r&#233;pertoire de prod. &lt;br class='autobr' /&gt;
** Sur le serveur cible&#160;: Cr&#233;er le repo git bare&#160;: mkdir monsite.git cd monsite.git git init &#8212;bare &lt;br class='autobr' /&gt;
Ajouter un hook post receive&#160;: nano hooks/post-receive #&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!/bin/bash git &#8212;work-tree=/var/www/mon_site&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.smellup.net/spip.php?rubrique46" rel="directory"&gt;Guide Git pour SPIP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Des &#233;l&#233;ments pour une utilisation avanc&#233;e de Git avec SPIP&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-4&#034; id=&#034;nav6a2e0bdeb31cf6.21306506&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Utiliser-git-pour-pusher-les-mises-a-jour-vers-un-site-en-production&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Utiliser-git-pour-pusher-les-mises-a-jour-vers-un-site-en-production&#034; class=&#034;spip_ancre&#034;&gt;Utiliser git pour pusher les mises &#224; jour vers un site en production&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Principe&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Principe&#034; class=&#034;spip_ancre&#034;&gt;Principe&#160;:&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Sur-le-serveur-cible&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Sur-le-serveur-cible&#034; class=&#034;spip_ancre&#034;&gt;Sur le serveur cible&#160;:&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-En-local&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#En-local&#034; class=&#034;spip_ancre&#034;&gt;En local&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;h2 class=&#034;h2&#034; id='Utiliser-git-pour-pusher-les-mises-a-jour-vers-un-site-en-production'&gt;Utiliser git pour pusher les mises &#224; jour vers un site en production&lt;a class='sommaire-back sommaire-back-4' href='#s-Utiliser-git-pour-pusher-les-mises-a-jour-vers-un-site-en-production' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 class=&#034;h3&#034; id='Principe'&gt; Principe&#160;:&lt;a class='sommaire-back sommaire-back-4' href='#s-Principe' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Cr&#233;er un d&#233;p&#244;t &lt;strong&gt;git bare&lt;/strong&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;A propos des d&#233;p&#244;t bar (&#171;&#160;nus&#160;&#187;), donne cette explication&#160;: Un d&#233;p&#244;t nu (&#8230;)&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt; sur le serveur de production avec un &lt;strong&gt;hook post commit&lt;/strong&gt; qui publie ce qu'il re&#231;oit dans le r&#233;pertoire de prod.&lt;/p&gt;
&lt;h3 class=&#034;h3&#034; id='Sur-le-serveur-cible'&gt; Sur le serveur cible&#160;:&lt;a class='sommaire-back sommaire-back-4' href='#s-Sur-le-serveur-cible' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Cr&#233;er le repo &lt;strong&gt;git bare&lt;/strong&gt;&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;mkdir monsite.git cd monsite.git git init --bare&lt;/textarea&gt;
&lt;p&gt;Ajouter un &lt;strong&gt;hook post receive&lt;/strong&gt;&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;nano hooks/post-receive&lt;/textarea&gt; &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;#!/bin/bash git --work-tree=/var/www/mon_site --git-dir=/var/repo/monsite.git checkout -f&lt;/textarea&gt;
&lt;p&gt;Passer le fichier en ex&#233;cutable&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;chmod +x hooks/post-receive&lt;/textarea&gt;&lt;h3 class=&#034;h3&#034; id='En-local'&gt; En local&lt;a class='sommaire-back sommaire-back-4' href='#s-En-local' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Ajouter le d&#233;pot distant &#8220;prod&#8221;&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;git remote add prod ssh://user@monserveur.fr/home/user/monsite.git&lt;/textarea&gt;
&lt;p&gt;Pour publier sur la production&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;git push prod master&lt;/textarea&gt;
&lt;p&gt;Voir aussi&#160;: &lt;a href=&#034;https://blog.alwaysdata.com/fr/2018/02/05/deployer-sans-peine-avec-git-hooks/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://blog.alwaysdata.com/fr/2018/02/05/deployer-sans-peine-avec-git-hooks/&lt;/a&gt;&lt;br class='autobr' /&gt;
qui d&#233;taille la proc&#233;dure avec notamment un script post commit un peu plus &#233;volu&#233; (v&#233;rification de la branche pouss&#233;e par exemple)&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;A propos des d&#233;p&#244;t &lt;strong&gt;bar&lt;/strong&gt; (&#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;nus&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;), &lt;a href=&#034;http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/&lt;/a&gt; donne cette explication&#160;: &lt;br class='manualbr' /&gt;Un d&#233;p&#244;t nu cr&#233;&#233; avec &lt;strong&gt;git init &#8212;bare&lt;/strong&gt; est destin&#233; au... partage. Si vous collaborez avec une &#233;quipe de d&#233;veloppeurs et que vous avez besoin d'un endroit pour partager les modifications apport&#233;es &#224; un repo, alors vous voudrez cr&#233;er un d&#233;p&#244;t nu dans un endroit centralis&#233; o&#249; tous les utilisateurs peuvent pousser leurs modifications (le choix le plus facile est souvent github.com). Comme git est un syst&#232;me de contr&#244;le de version distribu&#233;, personne ne modifiera directement les fichiers dans le d&#233;p&#244;t centralis&#233; partag&#233;. Au lieu de cela, les d&#233;veloppeurs clonent le d&#233;p&#244;t nu partag&#233;, apportent des modifications localement dans leurs copies de travail du d&#233;p&#244;t, puis les renvoient au d&#233;p&#244;t nu partag&#233; pour mettre leurs modifications &#224; la disposition des autres utilisateurs.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Installer un SPIP en Git</title>
		<link>https://blog.smellup.net/spip.php?article117</link>
		<guid isPermaLink="true">https://blog.smellup.net/spip.php?article117</guid>
		<dc:date>2020-03-22T10:31:25Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>



		<description>&lt;p&gt;Cet article d&#233;crit la proc&#233;dure &#224; utiliser pour installer &lt;i&gt;ex nihilo&lt;/i&gt; un site SPIP avec un ensemble de plugins &#224; partir des outils fournis par la communaut&#233;.&lt;/p&gt;

-
&lt;a href="https://blog.smellup.net/spip.php?rubrique46" rel="directory"&gt;Guide Git pour SPIP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-9&#034; id=&#034;nav6a2e289dbb2921.68246920&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Introduction&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Introduction&#034; class=&#034;spip_ancre&#034;&gt;Introduction&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-L-outil-checkout&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#L-outil-checkout&#034; class=&#034;spip_ancre&#034;&gt;L'outil checkout&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Prerequis&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Prerequis&#034; class=&#034;spip_ancre&#034;&gt;Pr&#233;requis&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Installation-de-la-distribution-officielle-de-SPIP&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Installation-de-la-distribution-officielle-de-SPIP&#034; class=&#034;spip_ancre&#034;&gt;Installation de la distribution officielle de SPIP&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-L-outil-git_loader&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#L-outil-git_loader&#034; class=&#034;spip_ancre&#034;&gt;L'outil git_loader&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Prerequis-ebd0&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Prerequis-ebd0&#034; class=&#034;spip_ancre&#034;&gt;Pr&#233;requis&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Installation-de-la-distribution-officielle-de-SPIP-ac64&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Installation-de-la-distribution-officielle-de-SPIP-ac64&#034; class=&#034;spip_ancre&#034;&gt;Installation de la distribution officielle de SPIP&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Installer-un-jeu-de-plugins&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Installer-un-jeu-de-plugins&#034; class=&#034;spip_ancre&#034;&gt;Installer un jeu de plugins&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Migrer-un-SPIP-existant&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Migrer-un-SPIP-existant&#034; class=&#034;spip_ancre&#034;&gt;Migrer un SPIP existant&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;h2 class=&#034;h2&#034; id='Introduction'&gt;Introduction&lt;a class='sommaire-back sommaire-back-9' href='#s-Introduction' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Apr&#232;s avoir install&#233; et configur&#233; un environnement Git, puis appris les rudiments des commandes Git de base, il convient maintenant de cr&#233;er un environnement SPIP sous Git.&lt;/p&gt;
&lt;p&gt;Pour ce faire, il est toujours possible d'enchainer les commandes &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git clone&lt;/code&gt; sur l'ensemble des repos qui composent la distribution officielle de SPIP. N&#233;anmoins, il y a plus simple en utilisant l'un des deux outils propos&#233;s par la communaut&#233;&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; checkout, un script PHP&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; ou git_loader, un script bash.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ces deux outils poss&#232;dent un fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;readme.md&lt;/code&gt; qui d&#233;taille les commandes possibles.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='L-outil-checkout'&gt;L'outil checkout&lt;a class='sommaire-back sommaire-back-9' href='#s-L-outil-checkout' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 class=&#034;h3&#034; id='Prerequis'&gt; Pr&#233;requis&lt;a class='sommaire-back sommaire-back-9' href='#s-Prerequis' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;L'outil &lt;strong&gt;checkout&lt;/strong&gt; est un script PHP multi-m&#233;thodes permettant une syntaxe unifi&#233;e Git/SVN/FTP des commandes de checkout. Il est possible d'installer un SPIP ou tout autre repo. Dans ce paragraphe, nous nous concentrerons sur l'installation de SPIP en Git.&lt;/p&gt;
&lt;p&gt;Sous Windows, il est n&#233;cessaire d'avoir install&#233; le bash git qui fait partie de l'installateur &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Git for Windows&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; (voir l'article &lt;a href='https://blog.smellup.net/spip.php?article103' class=&#034;spip_in&#034;&gt;Installation de Git&lt;/a&gt;). En effet, vous n'aurez pas besoin d'utiliser le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.bat&lt;/code&gt; et vous pourrez utiliser les m&#234;mes commandes que sous Mac ou *NIX (le terminal par d&#233;faut - &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;cmd.exe&lt;/code&gt; - est &#224; proscrire).&lt;/p&gt;
&lt;p&gt;Cet outil est disponible dans l'organisation spip-contrib-outils de la forge Git de SPIP. Le repo est nomm&#233; checkout. Il suffit de t&#233;l&#233;charger le zip sur la forge &lt;a href=&#034;https://git.spip.net/spip-contrib-outils/checkout/archive/master.zip&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://git.spip.net/spip-contrib-o...&lt;/a&gt; et de l'installer dans un r&#233;pertoire de votre choix. Il est recommand&#233; de placer le script dans un dossier connu du PATH afin d'y acc&#233;der plus simplement. Le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;readme.md&lt;/code&gt; d&#233;taille en introduction la proc&#233;dure pour y arriver.&lt;/p&gt;
&lt;h3 class=&#034;h3&#034; id='Installation-de-la-distribution-officielle-de-SPIP'&gt; Installation de la distribution officielle de SPIP&lt;a class='sommaire-back sommaire-back-9' href='#s-Installation-de-la-distribution-officielle-de-SPIP' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;En prenant l'hypoth&#232;se que le script est bien accessible dans le PATH pour installer le master de SPIP dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip/&lt;/code&gt;, il suffit d'invoquer la commande suivante &#224; partir d'un r&#233;pertoire donn&#233; (la racine des sites par exemple)&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ checkout spip&lt;/textarea&gt;
&lt;p&gt;Depuis la version 1.5.0 du script il est possible sous tous les OS d'utiliser la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;checkout&lt;/code&gt; plut&#244;t que &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;checkout.php&lt;/code&gt; qui ne fonctionne pas sous Windows.&lt;/p&gt;
&lt;p&gt;La param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip&lt;/code&gt; n'indique pas le dossier mais la m&#233;thode choisie, &#224; savoir, installer un spip. Le dossier n'&#233;tant pas pr&#233;cis&#233; c'est le dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip/&lt;/code&gt; qui est cr&#233;&#233; par d&#233;faut et la branche master qui est install&#233;e.&lt;/p&gt;
&lt;p&gt;Si on pr&#233;f&#232;re installer un SPIP 3.2 dans le dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip32/&lt;/code&gt; il suffit cette fois d'invoquer la commande&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ checkout spip -b3.2 spip32&lt;/textarea&gt;
&lt;p&gt;A noter le -b suivi directement du nom de la version qui co&#239;ncide maintenant avec la 3.2 (voir les branches sur le repo spip de la forge).&lt;/p&gt;
&lt;p&gt;A ce stade nous avons une branche SPIP install&#233;e en Git avec ses plugin-dist. Contrairement &#224; git_loader, checkout n'installe pas les plugins &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Dev&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; et &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Th&#232;mes&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Par contre, checkout installe SPIP par d&#233;faut en HTTPS et pas en SSH. Pour installer une branche master en SSH dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spipssh/&lt;/code&gt; il faut invoquer cette fois la commande suivante&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ checkout spip git@git.spip.net spipssh&lt;/textarea&gt;
&lt;p&gt;Grosse cerise sur le g&#226;teau, il est possible de mettre &#224; jour votre SPIP en rejouant la m&#234;me commande que pr&#233;c&#233;demment ou de changer de branche active si besoin en utilisant l'option -b. C'est tr&#232;s pratique, mais n'oubliez pas de lancer la commande depuis le m&#234;me dossier de base sinon vous recr&#233;erez un nouveau site.&lt;br class='manualbr' /&gt;Par contre, les &#233;ventuels plugins sp&#233;cifiques du dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugins/&lt;/code&gt; ne sont pas mis &#224; jour.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='L-outil-git_loader'&gt;L'outil git_loader&lt;a class='sommaire-back sommaire-back-9' href='#s-L-outil-git_loader' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 class=&#034;h3&#034; id='Prerequis-ebd0'&gt; Pr&#233;requis&lt;a class='sommaire-back sommaire-back-9' href='#s-Prerequis-ebd0' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;L'outil &lt;strong&gt;git_loader&lt;/strong&gt; n&#233;cessite que les outils suivants soient disponibles en ligne de commande&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;cURL&lt;/strong&gt;, pour utiliser l'API Gitea de la Forge SPIP&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; et &lt;strong&gt;jq&lt;/strong&gt;, pour phraser le JSON des repos correspondants aux plugins-dist.&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&#034;h3&#034; id='Installation-de-la-distribution-officielle-de-SPIP-ac64'&gt; Installation de la distribution officielle de SPIP&lt;a class='sommaire-back sommaire-back-9' href='#s-Installation-de-la-distribution-officielle-de-SPIP-ac64' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Cet outil est disponible dans l'organisation &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip-contrib-outils&lt;/code&gt; de la forge Git de SPIP. Le repo est nomm&#233; git_loader. Il suffit de t&#233;l&#233;charger le zip sur la forge &lt;a href=&#034;https://git.spip.net/spip-contrib-outils/git_loader/archive/master.zip&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://git.spip.net/spip-contrib-o...&lt;/a&gt; et d'installer le script dans un r&#233;pertoire connu du PATH afin d'ex&#233;cuter le script de n'importe o&#249;.&lt;/p&gt;
&lt;p&gt;Depuis les derni&#232;res mises &#224; jour, git_loader sait cr&#233;er le r&#233;pertoire de destination ce qui simplifie grandement l'installation. En prenant l'hypoth&#232;se que le script est bien accessible dans le PATH, pour installer le master de SPIP dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip/&lt;/code&gt; en utilisant une authentification SSH, il suffit d'invoquer la commande suivante &#224; partir d'un r&#233;pertoire donn&#233; (la racine des sites par exemple)&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git_loader.sh -m ssh -d spip&lt;/textarea&gt;
&lt;p&gt;ou la commande suivante si le script a &#233;t&#233; install&#233; dans le PATH comme un ex&#233;cutable sans extension&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git_loader -m ssh -d spip&lt;/textarea&gt;
&lt;p&gt;Par d&#233;faut, git_loader installe la branche master c'est pourquoi il est inutile de le pr&#233;ciser. On indique, par contre, l'authentification SSH car le d&#233;faut est HTTPS et, si le r&#233;pertoire de destination n'avait pas &#233;t&#233; pr&#233;cis&#233;, l'installation aurait eu lieu dans le r&#233;pertoire courant au moment du lancement de la commande.&lt;/p&gt;
&lt;p&gt;A ce stade la version master de SPIP est install&#233;e, plugins-dist compris.&lt;/p&gt;
&lt;p&gt;Si l'on voulait installer la branche 3.2, il suffirait d'ajouter l'option -v 3.2 &#224; la commande pr&#233;c&#233;dente&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git_loader.sh -v 3.2 -m ssh -d spip&lt;/textarea&gt;
&lt;p&gt;L'installation d'une branche n'est possible que pour SPIP 3 car les branches 3.0, 3.1, 3.2, etc sont toutes disponibles pour les plugins-dist.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Installer-un-jeu-de-plugins'&gt;Installer un jeu de plugins&lt;a class='sommaire-back sommaire-back-9' href='#s-Installer-un-jeu-de-plugins' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pour compl&#233;ter le SPIP pr&#233;c&#233;demment install&#233;, il nous faut maintenant rajouter les plugins sp&#233;cifiques au site que nous voulons d&#233;velopper. Pour ce faire, il n'existe pas de solution miracle&#160;: il va falloir accumuler les commandes &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git clone&lt;/code&gt; sur l'ensemble des plugins souhait&#233;s en esp&#233;rant que ceux-ci sont tous dans la forge.&lt;/p&gt;
&lt;p&gt;Tout d'abord on cr&#233;e le dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugins/&lt;/code&gt; &#224; la racine de notre SPIP et on s'y rend&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ mkdir plugins $ cd plugins&lt;/textarea&gt;
&lt;p&gt;Ensuite, on enchaine une par une les commandes &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git clone&lt;/code&gt; sur les plugins d&#233;sir&#233;s, par exemple, &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;YAML&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; et &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Rainette&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='4' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git clone git@git.spip.net:spip-contrib-extensions/yaml.git $ git clone git@git.spip.net:spip-contrib-extensions/rainette.git&lt;/textarea&gt;
&lt;p&gt;La seule difficult&#233; est de rep&#233;rer l'url des repos YAML et Rainette. Pour cela il faut se rendre sur la page de leur repo h&#233;berg&#233; sur la forge Git de SPIP (par exemple, &lt;a href=&#034;https://git.spip.net/spip-contrib-extensions/rainette&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://git.spip.net/spip-contrib-e...&lt;/a&gt;) et copier le lien qui s'affiche &#224; cot&#233; du label SSH. On peut s&#233;lectionner soit le lien SSH soit le lien HTTP en cliquant sur le bouton respectif. Dans notre exemple, nous avons choisi le lien SSH comme depuis le d&#233;but du guide.&lt;/p&gt;
&lt;p&gt;Il est toutefois recommand&#233; d'utiliser checkout pour faire la m&#234;me chose. L'int&#233;r&#234;t est de pouvoir plus facilement choisir une branche ou une r&#233;vision voire de choisir la m&#233;thode Git, SVN ou FTP. L'exemple pr&#233;c&#233;dent devient&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='4' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ checkout git -bmaster git@git.spip.net:spip-contrib-extensions/yaml.git $ checkout git -bmaster git@git.spip.net:spip-contrib-extensions/rainette.git&lt;/textarea&gt;
&lt;p&gt;Sans autre pr&#233;cision, les dossiers cr&#233;&#233;s portent le nom du repo.&lt;/p&gt;
&lt;p&gt;Enfin, si on utilise toujours les m&#234;mes plugins de base, il peut &#234;tre int&#233;ressant de cr&#233;er un script bash contenant les commandes d'installation de ces plugins, soit en utilisant des &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git clone&lt;/code&gt;, soit mieux, en utilisant l'outil checkout.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Migrer-un-SPIP-existant'&gt;Migrer un SPIP existant&lt;a class='sommaire-back sommaire-back-9' href='#s-Migrer-un-SPIP-existant' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Il n'existe pas de solution imm&#233;diate pour convertir un environnement SPIP sous SVN vers le m&#234;me environnement sous Git. Le plus simple est donc&#160;:&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; renommer le r&#233;pertoire correspondant &#224; votre SPIP sous SVN en &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spipold/&lt;/code&gt; ou autre&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; utiliser l'un des outils, checkout ou git_loader, pour recr&#233;er votre site avec le m&#234;me nom de dossier en suivant les proc&#233;dures d&#233;crites pr&#233;alablement&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; compl&#233;ter l'environnement SPIP obtenu avec les plugins n&#233;cessaires pour recr&#233;er exactement le m&#234;me site que celui sous SVN via des &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git clone&lt;/code&gt; ou mieux, l'outil checkout&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; restaurer l'environnement de d&#233;part en copiant &#224; minima le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.htaccess&lt;/code&gt; si besoin et le contenu des dossiers &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;IMG/&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;config/&lt;/code&gt;. Vous pouvez m&#234;me copier le contenu de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;local/&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tmp/&lt;/code&gt; si vous voulez conserver exactement le m&#234;me &#233;tat des caches et fichiers temporaires&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; supprimer le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spipold/&lt;/code&gt; devenu inutile.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>FAQ Git pour SPIP</title>
		<link>https://blog.smellup.net/spip.php?article114</link>
		<guid isPermaLink="true">https://blog.smellup.net/spip.php?article114</guid>
		<dc:date>2020-01-20T13:12:32Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>



		<description>
&lt;p&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? Modifier le d&#233;p&#244;t distant de sa copie locale suite &#224; un d&#233;placement / renommage dudit d&#233;p&#244;t sur la forge Cela se fait en une seule commande Git. Il faut se placer dans le dossier correspondant &#224; sa copie locale du d&#233;p&#244;t de nom &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;mondepot&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; et lancer&#160;: $ git remote set-url origine git@git.spip.net:spip-contrib-extensions/mondepot.git On consid&#232;re ici que le d&#233;p&#244;t &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;mondepot&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; a &#233;t&#233; d&#233;plac&#233; de l'organisation plugin vers l'organisation spip-contrib-extensions. &lt;br class='autobr' /&gt;
&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? Comment voir les&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.smellup.net/spip.php?rubrique46" rel="directory"&gt;Guide Git pour SPIP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class='ajaxbloc' data-ajax-env='16d5edf5e58b4d3bf2470d03828f0225' data-origin=&#034;spip.php?page=backend&#034;&gt;&lt;dl class=&#034;faq js&#034;&gt;&lt;dt&gt; &lt;a class=&#034;ancre&#034; href=&#034;#faq_0_0_0&#034; id=&#034;faq_0_0_0&#034;&gt;&lt;/a&gt; &lt;button id=&#034;faq-header-0_0_0&#034; aria-controls=&#034;faq-panel-0_0_0&#034;&gt;Modifier le d&#233;p&#244;t distant de sa copie locale suite &#224; un d&#233;placement / renommage dudit d&#233;p&#244;t sur la forge&lt;/button&gt; &lt;/dt&gt; &lt;dd id=&#034;faq-panel-0_0_0&#034; aria-labelledby=&#034;faq-header-0_0_0&#034;&gt;
&lt;p&gt; Cela se fait en une seule commande Git. Il faut se placer dans le dossier correspondant &#224; sa copie locale du d&#233;p&#244;t de nom &#171;&#160;mondepot&#160;&#187; et lancer&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git remote set-url origine git@git.spip.net:spip-contrib-extensions/mondepot.git&lt;/textarea&gt;
&lt;p&gt;On consid&#232;re ici que le d&#233;p&#244;t &#171;&#160;mondepot&#160;&#187; a &#233;t&#233; d&#233;plac&#233; de l'organisation &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugin&lt;/code&gt; vers l'organisation &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip-contrib-extensions&lt;/code&gt;.&lt;/p&gt;
&lt;/dd&gt;&lt;dt&gt; &lt;a class=&#034;ancre&#034; href=&#034;#faq_0_0_1&#034; id=&#034;faq_0_0_1&#034;&gt;&lt;/a&gt; &lt;button id=&#034;faq-header-0_0_1&#034; aria-controls=&#034;faq-panel-0_0_1&#034;&gt;Comment voir les commits qui &#233;ventuellement pr&#233;c&#232;dent le changement d'arborescence en trunk&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/button&gt; &lt;/dt&gt; &lt;dd id=&#034;faq-panel-0_0_1&#034; aria-labelledby=&#034;faq-header-0_0_1&#034;&gt;
&lt;p&gt; Cela n'est pas possible. Git consid&#232;re comme racine le r&#233;pertoire&lt;br class='autobr' /&gt;
trunk/ du svn. Tout ce qui &#233;tait ailleurs avant ce r&#233;pertoire, de facto,&lt;br class='autobr' /&gt;
n'existe pas pour Git.&lt;/p&gt;
&lt;/dd&gt;&lt;dt&gt; &lt;a class=&#034;ancre&#034; href=&#034;#faq_0_0_2&#034; id=&#034;faq_0_0_2&#034;&gt;&lt;/a&gt; &lt;button id=&#034;faq-header-0_0_2&#034; aria-controls=&#034;faq-panel-0_0_2&#034;&gt;Est-il possible de lier les commits ant&#233;rieurs &#224; la migration SVN vers GIT au nouveau compte Git&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/button&gt; &lt;/dt&gt; &lt;dd id=&#034;faq-panel-0_0_2&#034; aria-labelledby=&#034;faq-header-0_0_2&#034;&gt;
&lt;p&gt; Non.&lt;/p&gt;
&lt;/dd&gt;&lt;dt&gt; &lt;a class=&#034;ancre&#034; href=&#034;#faq_0_0_3&#034; id=&#034;faq_0_0_3&#034;&gt;&lt;/a&gt; &lt;button id=&#034;faq-header-0_0_3&#034; aria-controls=&#034;faq-panel-0_0_3&#034;&gt;Le mail qui arrive sur spip-zone-commit@rezo.net ne reprend pas mon nom&lt;/button&gt; &lt;/dt&gt; &lt;dd id=&#034;faq-panel-0_0_3&#034; aria-labelledby=&#034;faq-header-0_0_3&#034;&gt;
&lt;p&gt; La notification par courriel reprend les informations communiqu&#233;es&lt;br class='autobr' /&gt;
dans le commit qui sont contenues dans la configuration utilisateur de Git ( user.email et user.name). Voir l'article &lt;a href='https://blog.smellup.net/spip.php?article87' class=&#034;spip_in&#034;&gt;Configuration de Git&lt;/a&gt; pour plus de pr&#233;cisions.&lt;/p&gt;
&lt;p&gt;Cette configuration n'a rien &#224; voir avec les donn&#233;es saisies pour l'utilisateur sur la forge.&lt;/p&gt;
&lt;/dd&gt;&lt;dt&gt; &lt;a class=&#034;ancre&#034; href=&#034;#faq_0_0_4&#034; id=&#034;faq_0_0_4&#034;&gt;&lt;/a&gt; &lt;button id=&#034;faq-header-0_0_4&#034; aria-controls=&#034;faq-panel-0_0_4&#034;&gt;Qu'est ce que gitea&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/button&gt; &lt;/dt&gt; &lt;dd id=&#034;faq-panel-0_0_4&#034; aria-labelledby=&#034;faq-header-0_0_4&#034;&gt;
&lt;p&gt; &lt;a href=&#034;https://docs.gitea.io/fr-fr/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Gitea&lt;/a&gt; est un outil libre pour g&#233;rer des d&#233;p&#244;ts Git via une interface web. La forge git communautaire de SPIP utilise gitea pour fournir des services un peu comme ceux de Github, Bitbucket ou Gitlab.com, mais de mani&#232;re h&#233;berg&#233;e et g&#233;r&#233;e par des membres de l'&#233;quipe SPIP.&lt;/p&gt;
&lt;/dd&gt;&lt;dt&gt; &lt;a class=&#034;ancre&#034; href=&#034;#faq_0_0_5&#034; id=&#034;faq_0_0_5&#034;&gt;&lt;/a&gt; &lt;button id=&#034;faq-header-0_0_5&#034; aria-controls=&#034;faq-panel-0_0_5&#034;&gt;comment je fais pour mettre &#224; jour et avoir tout le plus possible &#224; jour sur mon fork&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/button&gt; &lt;/dt&gt; &lt;dd id=&#034;faq-panel-0_0_5&#034; aria-labelledby=&#034;faq-header-0_0_5&#034;&gt;
&lt;p&gt; Lorsque l'on travaille sur fork, il peut arriver que la version &#171;&#160;officielle&#160;&#187; (celle &#224; partir de laquelle le fork a &#233;t&#233; fait) soit modifi&#233;e. La manipulation suivante permet d'int&#233;grer ces modifications (= &#171;&#160;mises &#224; jour&#160;&#187;) dans le fork&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='17' class='spip_cadre spip_cadre_block' dir='ltr'&gt;# Ajouter la branche fork&#233;e sous le nom de &#034;upstream&#034;: git remote add upstream https://git.spip.net/toto.truc/spip_core.git # R&#233;cup&#233;rer toutes les branches de upstream/master: git fetch upstream # s'assurer d'&#234;tre positionn&#233; sur la branche master: git checkout master # Rejouer tous les commits manquants : git rebase upstream/master # forcer le push vers votre repo fork&#233; : git push -f origin master&lt;/textarea&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/div&gt;
&lt;p&gt;&lt;!--ajaxbloc--&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Tutoriel de d&#233;marrage avec Git</title>
		<link>https://blog.smellup.net/spip.php?article113</link>
		<guid isPermaLink="true">https://blog.smellup.net/spip.php?article113</guid>
		<dc:date>2019-12-18T20:17:22Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>



		<description>&lt;p&gt;Ce tutoriel a pour but de vous familiariser avec les commandes de base et les cas d'usage simples que vous rencontrerez souvent. Il illustre tous les changements d'&#233;tats d&#233;crits dans l'article &lt;a href='https://blog.smellup.net/spip.php?article112' class=&#034;spip_in&#034;&gt;Les bases de l'utilisation de Git&lt;/a&gt;.&lt;/p&gt;

-
&lt;a href="https://blog.smellup.net/spip.php?rubrique46" rel="directory"&gt;Guide Git pour SPIP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-9&#034; id=&#034;nav6a2e289dc00568.18524949&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Introduction&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Introduction&#034; class=&#034;spip_ancre&#034;&gt;Introduction&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Initier-un-depot-Git-local&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Initier-un-depot-Git-local&#034; class=&#034;spip_ancre&#034;&gt;Initier un d&#233;p&#244;t Git local&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Initier-un-depot-a-partir-d-un-repertoire-vide&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Initier-un-depot-a-partir-d-un-repertoire-vide&#034; class=&#034;spip_ancre&#034;&gt;Initier un d&#233;p&#244;t &#224; partir d'un r&#233;pertoire vide&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Cloner-un-depot-distant&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Cloner-un-depot-distant&#034; class=&#034;spip_ancre&#034;&gt;Cloner un d&#233;p&#244;t distant&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Consigner-les-modifications-du-depot-local&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Consigner-les-modifications-du-depot-local&#034; class=&#034;spip_ancre&#034;&gt;Consigner les modifications du d&#233;p&#244;t local&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Ajouter-un-fichier-au-depot-Git&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Ajouter-un-fichier-au-depot-Git&#034; class=&#034;spip_ancre&#034;&gt;Ajouter un fichier au d&#233;p&#244;t Git&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Modifier-un-fichier-suivi-par-Git&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Modifier-un-fichier-suivi-par-Git&#034; class=&#034;spip_ancre&#034;&gt;Modifier un fichier suivi par Git&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Supprimer-un-fichier-suivi-par-Git&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Supprimer-un-fichier-suivi-par-Git&#034; class=&#034;spip_ancre&#034;&gt;Supprimer un fichier suivi par Git&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Pousser-les-modifications-locales-sur-un-depot-distant&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Pousser-les-modifications-locales-sur-un-depot-distant&#034; class=&#034;spip_ancre&#034;&gt;Pousser les modifications locales sur un d&#233;p&#244;t distant&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;h2 class=&#034;h2&#034; id='Introduction'&gt;Introduction&lt;a class='sommaire-back sommaire-back-9' href='#s-Introduction' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ce tutoriel a pour but de vous familiariser avec les commandes de base et les cas d'usage simples que vous rencontrerez souvent. Il illustre tous les changements d'&#233;tats d&#233;crits dans la figure suivante&#160;:&lt;/p&gt;
&lt;div class='spip_document_123 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.smellup.net/IMG/png/etats-git2.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.smellup.net/local/cache-vignettes/L500xH257/etats-git2-144dd.png?1763129362' width='500' height='257' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Tous les tutoriels se d&#233;roulent en ligne de commande pour continuer l'apprentissage des fondements de Git sans le d&#233;cor et les raccourcis mise en place par les GUI.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Initier-un-depot-Git-local'&gt;Initier un d&#233;p&#244;t Git local&lt;a class='sommaire-back sommaire-back-9' href='#s-Initier-un-depot-Git-local' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Il y a deux fa&#231;ons d'initier un projet local sous Git&#160;: en partant juste d'un r&#233;pertoire travail vide ou en r&#233;cup&#233;rant (on dit cloner en Git) un d&#233;p&#244;t distant. Ce tutoriel adresse successivement les deux cas.&lt;/p&gt;
&lt;h3 class=&#034;h3&#034; id='Initier-un-depot-a-partir-d-un-repertoire-vide'&gt; Initier un d&#233;p&#244;t &#224; partir d'un r&#233;pertoire vide&lt;a class='sommaire-back sommaire-back-9' href='#s-Initier-un-depot-a-partir-d-un-repertoire-vide' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;On commence par cr&#233;er le r&#233;pertoire de travail &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;monprojet/&lt;/code&gt; &#224; la racine de l'utilisateur par exemple et on se rend dans le nouveau r&#233;pertoire cr&#233;&#233;.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ cd ~ $ mkdir monprojet $ cd monprojet&lt;/textarea&gt;
&lt;p&gt;Ensuite, on initie la gestion du projet sous Git en lan&#231;ant la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git init&lt;/code&gt;.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git init Initialized empty Git repository in /Users/eric/monprojet/.git/&lt;/textarea&gt;
&lt;p&gt;De fait, le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.git/&lt;/code&gt; a &#233;t&#233; cr&#233;&#233; et initialis&#233;. Vous pouvez naviguer &#224; l'int&#233;rieur pour &#233;tudier sa structure et noter que la zone d'index (fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.git/index&lt;/code&gt;) n'est pas encore cr&#233;&#233; et qu'il existe bien un fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.git/config&lt;/code&gt; comme indiqu&#233; dans l'article &lt;a href='https://blog.smellup.net/spip.php?article87' class=&#034;spip_in&#034;&gt;Configuration de Git&lt;/a&gt;. La zone de travail est encore vide mais tout est pr&#234;t pour commencer &#224; d&#233;velopper votre projet.&lt;/p&gt;
&lt;p&gt;En lan&#231;ant la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git status&lt;/code&gt; on obtient les informations suivantes&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='5' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git status On branch master No commits yet nothing to commit (create/copy files and use &#034;git add&#034; to track)&lt;/textarea&gt;
&lt;p&gt;Il est important de noter que sans pr&#233;cision, la branche cr&#233;&#233;e par d&#233;faut en local s'appelle &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;strong&gt;master&lt;/strong&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. C'est la seule qui existe &#224; cet instant.&lt;/p&gt;
&lt;h3 class=&#034;h3&#034; id='Cloner-un-depot-distant'&gt; Cloner un d&#233;p&#244;t distant&lt;a class='sommaire-back sommaire-back-9' href='#s-Cloner-un-depot-distant' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Pour ce tutoriel on consid&#232;re que l'acc&#232;s &#224; la forge SPIP (ici les plugins) est autoris&#233;. Si ce n'est pas le cas, il vous faudra demander l'acc&#232;s &#224; la forge et faire la configuration SSH comme expliqu&#233; dans l'article &lt;a href='https://blog.smellup.net/spip.php?article87' class=&#034;spip_in&#034;&gt;Configuration de Git&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On se propose donc de cloner le plugin Rainette en local. Pour ce faire, on se positionne &#224; la racine de l'utilisateur et on utilise la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git clone&lt;/code&gt; en fournissant l'URL du d&#233;p&#244;t&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='9' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git clone git@git.spip.net:plugin/rainette.git Cloning into 'rainette'... remote: Counting objects: 2603, done. remote: Compressing objects: 100% (886/886), done. Receiving objects: 79% (2057/2603), 2.37 MiB | 4.73 MiB/seceiving objects: 78% (2031/2603), 2.37 MiB | 4.73 MiB/s Receiving objects: 100% (2603/2603), 2.82 MiB | 5.02 MiB/s, done. Resolving deltas: 100% (1643/1643), done.&lt;/textarea&gt;
&lt;p&gt;Etant donn&#233; qu'on n'a pas pr&#233;cis&#233; le r&#233;pertoire destination, Git a cr&#233;&#233; le r&#233;pertoire de travail &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/rainette/&lt;/code&gt; et l'a peupl&#233; avec une copie des fichiers de la derni&#232;re version du plugin. On peut aussi noter la cr&#233;ation du &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;./git&lt;/code&gt; qui contient quasiment toutes les donn&#233;es dont le serveur dispose. Toutes les versions de tous les fichiers pour l'historique du projet sont t&#233;l&#233;charg&#233;es.&lt;/p&gt;
&lt;p&gt;En lan&#231;ant un git status &#224; partir du r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;rainette/&lt;/code&gt; on obtient&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='4' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git status On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean&lt;/textarea&gt;
&lt;p&gt;Il est &#224; noter que la branche locale se nomme encore &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;master&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; et que la branche distante d'o&#249; provient les fichiers extraits se nomme par d&#233;faut &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;strong&gt;origin/master&lt;/strong&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Consigner-les-modifications-du-depot-local'&gt;Consigner les modifications du d&#233;p&#244;t local&lt;a class='sommaire-back sommaire-back-9' href='#s-Consigner-les-modifications-du-depot-local' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ce tutoriel explique comment ajouter des fichiers au d&#233;p&#244;t Git et enregistrer les modifications sur des fichiers existants. Les exemples choisis permettent d'illustrer les diff&#233;rents &#233;tats des fichiers d&#233;crits dans l'article &lt;a href='https://blog.smellup.net/spip.php?article112' class=&#034;spip_in&#034;&gt;Les bases de l'utilisation de Git&lt;/a&gt;.&lt;/p&gt;
&lt;h3 class=&#034;h3&#034; id='Ajouter-un-fichier-au-depot-Git'&gt; Ajouter un fichier au d&#233;p&#244;t Git&lt;a class='sommaire-back sommaire-back-9' href='#s-Ajouter-un-fichier-au-depot-Git' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Reprenons le premier tutoriel avec notre r&#233;pertoire de travail &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/monprojet/&lt;/code&gt; vide &#224; l'exception du r&#233;pertoire de base Git (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.git/&lt;/code&gt;). Ajoutons un fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;README.md&lt;/code&gt; dans le r&#233;pertoire de travail et lan&#231;ons la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git status&lt;/code&gt;.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='9' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git status On branch master No commits yet Untracked files: (use &#034;git add &lt;file&gt;...&#034; to include in what will be committed) README.md nothing added to commit but untracked files present (use &#034;git add&#034; to track)&lt;/textarea&gt;
&lt;p&gt;Git a bien d&#233;tect&#233; l'ajout du fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;README.md&lt;/code&gt; dans la zone de travail mais indique qu'il est non suivi (&lt;span lang='en'&gt;untracked&lt;/span&gt;) et qu'il est possible d'utiliser la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git add&lt;/code&gt; pour l'inclure dans les fichiers suivis&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='8' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git add README.md $ git status On branch master No commits yet Changes to be committed: (use &#034;git rm --cached &lt;file&gt;...&#034; to unstage) new file: README.md&lt;/textarea&gt;
&lt;p&gt;Le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;README.md &lt;/code&gt; vient de passer dans l'&#233;tat index&#233; (&lt;span lang='en'&gt;staged&lt;/span&gt;)&#160;: il est donc pr&#234;t &#224; &#234;tre valid&#233; (&lt;span lang='en'&gt;commited&lt;/span&gt;) et &#224; &#234;tre int&#233;gr&#233; dans le premier instantan&#233; (&lt;span lang='en'&gt;commit&lt;/span&gt;) de Git. On lance donc la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git commit&lt;/code&gt; en n'oubliant pas de pr&#233;ciser un message&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git commit -m &#034;ajout du fichier readme&#034; [master (root-commit) 8049316] ajout du fichier readme 1 file changed, 2 insertions(+) create mode 100644 README.md $ git status On branch master nothing to commit, working tree clean&lt;/textarea&gt;
&lt;p&gt;Dans la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git commit&lt;/code&gt; le fichier a &#233;t&#233; omis ce qui enjoint Git de valider tout le contenu de la zone d'index qui cette fois est r&#233;duit au fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;README.md&lt;/code&gt;. La commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git status&lt;/code&gt; confirme que la branche &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;master&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; ne contient plus de modifications non int&#233;gr&#233;es au d&#233;p&#244;t.&lt;/p&gt;
&lt;h3 class=&#034;h3&#034; id='Modifier-un-fichier-suivi-par-Git'&gt; Modifier un fichier suivi par Git&lt;a class='sommaire-back sommaire-back-9' href='#s-Modifier-un-fichier-suivi-par-Git' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Supposons maintenant que nous souhaitions faire des corrections dans notre fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;README.md&lt;/code&gt;. On &#233;dite le fichier et on y rajoute une ligne par exemple. On sauvegarde et on lance la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git status&lt;/code&gt;&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='10' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git status On branch master Changes not staged for commit: (use &#034;git add &lt;file&gt;...&#034; to update what will be committed) (use &#034;git restore &lt;file&gt;...&#034; to discard changes in working directory) modified: README.md no changes added to commit (use &#034;git add&#034; and/or &#034;git commit -a&#034;)&lt;/textarea&gt;
&lt;p&gt;Git a bien d&#233;tect&#233; un changement sur un fichier suivi dans le d&#233;p&#244;t et il le pr&#233;cise en disant que le changement n'est pas index&#233; (&lt;span lang='en'&gt;not staged&lt;/span&gt;). Il est donc n&#233;cessaire d'utiliser encore la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git add&lt;/code&gt; pour ins&#233;rer la modification dans la zone d'index afin qu'elle soit prise dans le prochain commit&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git add README.md $ git status On branch master Changes to be committed: (use &#034;git restore --staged &lt;file&gt;...&#034; to unstage) modified: README.md&lt;/textarea&gt;
&lt;p&gt;Git nous informe que le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;README.md&lt;/code&gt; est pr&#234;t &#224; &#234;tre valid&#233; (&lt;span lang='en'&gt;to be committed&lt;/span&gt;). On lance donc la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git commit&lt;/code&gt; avec un message&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git commit -m &#034;premi&#232;re modification du fichier readme&#034; [master 6c1d1c9] premi&#232;re modification du fichier readme 1 file changed, 1 insertion(+) $ git status On branch master nothing to commit, working tree clean&lt;/textarea&gt;
&lt;p&gt;Pour visualiser notre travail jusqu'&#224; maintenant on lance la commande git log qui fournit la liste des commits effectu&#233;s sur la branche master de notre d&#233;p&#244;t class&#233;s du plus r&#233;cent au plus ancien&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='11' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git log commit 6c1d1c9d6ea265117da0ea8d523c9ae4b2bad111 (HEAD -&gt; master) Author: Jean Martin &lt;jean@martin.net&gt; Date: Wed Dec 18 16:09:53 2019 +0100 premi&#232;re modification du fichier readme commit b5d9bd0a40d88d6bfeeefb6d47cc9a94a8715d0c Author: Jean Martin &lt;jean@martin.net&gt; Date: Wed Dec 18 14:24:07 2019 +0100 ajout du fichier readme&lt;/textarea&gt;
&lt;/cadre&gt;
&lt;h3 class=&#034;h3&#034; id='Supprimer-un-fichier-suivi-par-Git'&gt; Supprimer un fichier suivi par Git&lt;a class='sommaire-back sommaire-back-9' href='#s-Supprimer-un-fichier-suivi-par-Git' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Avant de d&#233;marrer le tutoriel, il faut adapter notre zone de travail sous Git en rajoutant deux fichiers quelconques sous suivi Git (copie des fichiers, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git add&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git commit&lt;/code&gt;)&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git add *.txt $ git commit -m &#034;ajout de 2 fichiers a supprimer&#034; [master 5e5763e] ajout de 2 fichiers a supprimer 2 files changed, 146 insertions(+) create mode 100644 INSTALL.txt create mode 100644 htaccess.txt&lt;/textarea&gt;
&lt;p&gt;Pour supprimer l'un des deux fichiers, le premier r&#233;flexe est d'envoyer le fichier dans la corbeille de son explorateur/finder ou d'utiliser le shell avec la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;rm&lt;/code&gt;. Lan&#231;ons donc la commande shell &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;rm&lt;/code&gt; sur l'un d'eux et regardons le r&#233;sultat sur le d&#233;p&#244;t&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='11' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ rm htaccess.txt $ git status On branch master Changes not staged for commit: (use &#034;git add/rm &lt;file&gt;...&#034; to update what will be committed) (use &#034;git restore &lt;file&gt;...&#034; to discard changes in working directory) deleted: htaccess.txt no changes added to commit (use &#034;git add&#034; and/or &#034;git commit -a&#034;)&lt;/textarea&gt;
&lt;p&gt; Comme on pouvait s'y attendre, m&#234;me si le fichier a bien disparu de la zone de travail Git consid&#232;re que cette modification n'est pas pr&#234;te &#224; &#234;tre enregistr&#233;e et consid&#232;re toujours le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;htaccess.txt&lt;/code&gt; comme &#233;tant suivi sous. Il faut donc encore une fois, indexer la modification par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git add&lt;/code&gt; et l'enregistrer dans le d&#233;p&#244;t Git avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git commit&lt;/code&gt;.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='6' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git add htaccess.txt $ git commit -m &#034;suppression du fichier htaccess&#034; [master 6dea8f5] suppression du fichier htaccess 1 file changed, 133 deletions(-) delete mode 100644 htaccess.txt&lt;/textarea&gt;
&lt;p&gt;N&#233;anmoins, il est possible de r&#233;aliser cette op&#233;ration autrement en utilisant uniquement des commandes Git. La commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git rm&lt;/code&gt; supprime le fichier physiquement de la zone de travail et indexe la suppression dans la zone d'index. Ensuite la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git commit&lt;/code&gt; va enregistrer la suppression dans le d&#233;p&#244;t.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='13' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git rm INSTALL.txt $ rm 'INSTALL.txt' $ git status On branch master Changes to be committed: (use &#034;git restore --staged &lt;file&gt;...&#034; to unstage) deleted: INSTALL.txt $ git commit -m &#034;suppression du fichier INSTALL par git rm&#034; [master d14d34a] suppression du fichier INSTALL par git rm 1 file changed, 13 deletions(-) delete mode 100644 INSTALL.txt&lt;/textarea&gt;
&lt;p&gt;Pour conclure, on peut afficher le contenu de notre r&#233;pertoire de travail et lancer un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git log&lt;/code&gt; pour consulter tous les commits effectu&#233;s depuis le d&#233;but de ce tutoriel&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='29' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ ls -l total 8 -rw-r--r--@ 1 jean staff 74 18 d&#233;c 19:32 README.md $ git log commit d14d34a28cc8bbe8cbf153e0ab1a6a0a97a766c8 (HEAD -&gt; master) Author: Jean Martin &lt;jean@martin.net&gt; Date: Wed Dec 18 21:09:39 2019 +0100 suppression du fichier INSTALL par git rm commit 6dea8f5a2e422cef94ea398ec001e8b08384e751 Author: Jean Martin &lt;jean@martin.net&gt; Date: Wed Dec 18 20:51:11 2019 +0100 suppression du fichier htaccess commit 5e5763e3db5c128b96dac6c3474af0151db2a9bf Author: Jean Martin &lt;jean@martin.net&gt; Date: Wed Dec 18 20:44:32 2019 +0100 ajout de 2 fichiers a supprimer commit 0897426ef844462048157ab32c44eefdb666aec3 Author: Jean Martin &lt;jean@martin.net&gt; Date: Wed Dec 18 19:34:06 2019 +0100 premiere modification du fichier readme commit 804931660f1f9681ba11a92f077f910413f75e56 Author: Jean Martin &lt;jean@martin.net&gt; Date: Tue Dec 17 20:38:40 2019 +0100 ajout du fichier readme&lt;/textarea&gt;&lt;h2 class=&#034;h2&#034; id='Pousser-les-modifications-locales-sur-un-depot-distant'&gt;Pousser les modifications locales sur un d&#233;p&#244;t distant&lt;a class='sommaire-back sommaire-back-9' href='#s-Pousser-les-modifications-locales-sur-un-depot-distant' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Supposons que nous avons clon&#233; un d&#233;p&#244;t de la forge SPIP et fait des modifications en locales, modifications que nous avons bien valid&#233;es dans la branche &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;master&lt;/code&gt; locale. M&#234;me si Git nous permet de travailler ais&#233;ment en local il arrive un moment o&#249; il faut partager nos modifications avec le d&#233;p&#244;t distant. On dit alors qu'on pousse (&lt;span lang='en'&gt;push&lt;/span&gt;) les modifications locales sur le serveur.&lt;/p&gt;
&lt;p&gt;La commande pour ce faire est la suivante&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git push origin master ...&lt;/textarea&gt;
&lt;p&gt;On reconnait le serveur distant &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;origin&lt;/code&gt; et la branche locale dont on pousse les modifications, &#224; savoir, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;master&lt;/code&gt; (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;origin&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;master&lt;/code&gt; sont cr&#233;&#233;s par d&#233;faut lors de la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git clone&lt;/code&gt;, voir le d&#233;but de l'article). Cette commande ne fonctionne que si vous avez clon&#233; depuis un serveur sur lequel vous avez des droits d'acc&#232;s en &#233;criture et si personne n'a pouss&#233; dans l'intervalle. Mais nous reviendrons sur ce sujet dans l'article sur la gestion des branches.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Les bases de l'utilisation de Git</title>
		<link>https://blog.smellup.net/spip.php?article112</link>
		<guid isPermaLink="true">https://blog.smellup.net/spip.php?article112</guid>
		<dc:date>2019-12-16T13:47:16Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>



		<description>&lt;p&gt;L'objectif de cet article est de donner des liens de formation et quelques notions pour une utilisation basique de Git.&lt;/p&gt;

-
&lt;a href="https://blog.smellup.net/spip.php?rubrique46" rel="directory"&gt;Guide Git pour SPIP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-8&#034; id=&#034;nav6a2e289dc2e204.48555449&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Introduction&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Introduction&#034; class=&#034;spip_ancre&#034;&gt;Introduction&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Liens-d-apprentissage-et-de-reference&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Liens-d-apprentissage-et-de-reference&#034; class=&#034;spip_ancre&#034;&gt;Liens d'apprentissage et de r&#233;f&#233;rence&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Notions-de-base-de-Git&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Notions-de-base-de-Git&#034; class=&#034;spip_ancre&#034;&gt;Notions de base de Git&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Une-gestion-d-instantanes&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Une-gestion-d-instantanes&#034; class=&#034;spip_ancre&#034;&gt;Une gestion d'instantan&#233;s&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Une-gestion-locale&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Une-gestion-locale&#034; class=&#034;spip_ancre&#034;&gt;Une gestion locale&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Des-zones-et-des-etats&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Des-zones-et-des-etats&#034; class=&#034;spip_ancre&#034;&gt;Des zones et des &#233;tats&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Depot-local-et-depot-distant&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Depot-local-et-depot-distant&#034; class=&#034;spip_ancre&#034;&gt;D&#233;pot local et d&#233;pot distant&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Commandes-Git-de-base&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Commandes-Git-de-base&#034; class=&#034;spip_ancre&#034;&gt;Commandes Git de base&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;h2 class=&#034;h2&#034; id='Introduction'&gt;Introduction&lt;a class='sommaire-back sommaire-back-8' href='#s-Introduction' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;L'objectif de cet article n'est pas de r&#233;p&#233;ter une ni&#232;me fois ce que l'on peut trouver d&#233;j&#224; sur le web mais de donner des liens de formation et quelques notions pour une utilisation basique de Git. L'article &lt;a href='https://blog.smellup.net/spip.php?article123' class=&#034;spip_in&#034;&gt;Plugin Moteur de Notifications / Notification Engine&lt;/a&gt; compl&#232;te le pr&#233;sent article par des cas d'usage rencontr&#233;s quotidiennement pour contribuer &#224; SPIP.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Liens-d-apprentissage-et-de-reference'&gt;Liens d'apprentissage et de r&#233;f&#233;rence&lt;a class='sommaire-back sommaire-back-8' href='#s-Liens-d-apprentissage-et-de-reference' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Les liens suivants sont recommand&#233;s pour se familiariser avec les principes et les commandes de Git et pour consulter les manuels de r&#233;f&#233;rence des commandes&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le chapitre &lt;a href=&#034;https://git-scm.com/book/fr/v2/Les-bases-de-Git-D%C3%A9marrer-un-d%C3%A9p%C3%B4t-Git&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Les bases de Git&lt;/a&gt; du livre ProGit et la &lt;a href=&#034;https://git-scm.com/docs&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;r&#233;f&#233;rence des commandes Git&lt;/a&gt; propos&#233;e sur le m&#234;me site&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; le site &lt;a href=&#034;https://backlog.com/git-tutorial/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Backlog&lt;/a&gt;, ses tutoriels et sa r&#233;f&#233;rence d'utilisation&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; la page &lt;a href=&#034;https://www.yterium.net/Git-c-est-facile&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Git c'est facile&lt;/a&gt; du site de C&#233;dric.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034; id='Notions-de-base-de-Git'&gt;Notions de base de Git&lt;a class='sommaire-back sommaire-back-8' href='#s-Notions-de-base-de-Git' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 class=&#034;h3&#034; id='Une-gestion-d-instantanes'&gt; Une gestion d'instantan&#233;s&lt;a class='sommaire-back sommaire-back-8' href='#s-Une-gestion-d-instantanes' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tous les syst&#232;mes de gestion de version g&#232;rent une &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;base de donn&#233;es&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; des fichiers, des modifications de ces fichiers et des versions associ&#233;es (dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.svn/&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.git/&lt;/code&gt;). Mais Git a une gestion particuli&#232;re de ces donn&#233;es qui lui conf&#232;re un avantage certain.&lt;/p&gt;
&lt;p&gt;SVN et d'autres syst&#232;mes de gestion de version consid&#232;rent qu'une version d'un projet est constitu&#233;e des fichiers initiaux et de la suite des modifications apport&#233;es &#224; ces fichiers.&lt;/p&gt;
&lt;p&gt;Git agit tout autrement en consid&#233;rant qu'une version d'un projet est un instantan&#233; de tous les fichiers g&#233;r&#233;s (&lt;span lang='en'&gt;snapshot&lt;/span&gt;). Bien entendu, les fichiers non modifi&#233;s ne sont pas dupliqu&#233;s d'une version &#224; une autre mais juste identifi&#233;s par un lien vers le dernier fichier identique. De fait, Git g&#232;re une suite d'instantan&#233;s.&lt;/p&gt;
&lt;h3 class=&#034;h3&#034; id='Une-gestion-locale'&gt; Une gestion locale&lt;a class='sommaire-back sommaire-back-8' href='#s-Une-gestion-locale' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;La base de donn&#233;es de Git (le fameux dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.git/&lt;/code&gt;) contient l'ensemble de l'historique du projet. De fait, la plupart des actions Git vont se d&#233;rouler en local contrairement &#224; SVN ou autres. Cela est notable sur les performances et sur la capacit&#233; &#224; travailler sans connexion.&lt;/p&gt;
&lt;p&gt;De fait, pour la plupart des op&#233;rations, Git ne fait qu'ajouter des donn&#233;es &#224; sa base de donn&#233;es ce qui rend le syst&#232;me tr&#232;s robuste&#160;: contrairement aux autres syst&#232;mes, il est presque impossible de perdre des modifications une fois qu'elles ont &#233;t&#233; enregistr&#233;es d'une fa&#231;on ou d'une autre dans la base Git locale.&lt;/p&gt;
&lt;h3 class=&#034;h3&#034; id='Des-zones-et-des-etats'&gt; Des zones et des &#233;tats&lt;a class='sommaire-back sommaire-back-8' href='#s-Des-zones-et-des-etats' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class='spip_document_122 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.smellup.net/IMG/png/zones-git.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.smellup.net/local/cache-vignettes/L500xH356/zones-git-10179.png?1763129362' width='500' height='356' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;La &lt;strong&gt;zone de travail&lt;/strong&gt; (appel&#233;e aussi &lt;strong&gt;&lt;span lang='en'&gt;working tree&lt;/span&gt;&lt;/strong&gt; ou &lt;strong&gt;&lt;span lang='en'&gt;working directory&lt;/span&gt;&lt;/strong&gt;) est constitu&#233;e des fichiers du &lt;strong&gt;r&#233;pertoire de travail&lt;/strong&gt; dans lequel figure une version donn&#233;e du projet g&#233;r&#233; sous Git&#160;: les fichiers physiques du projet dans la version concern&#233;e que l'on va &#233;diter. Dans la zone de travail&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; certains fichiers sont g&#233;r&#233;s sous Git (&lt;span lang='en'&gt;tracked&lt;/span&gt;). Il peuvent dans ce cas &#234;tre avoir &#233;t&#233; modifi&#233;s par rapport &#224; la version du d&#233;p&#244;t Git.&lt;/li&gt;&lt;li&gt; d'autres ne sont pas g&#233;r&#233;s sous Git (&lt;span lang='en'&gt;untracked&lt;/span&gt;). Cet &#233;tat peut &#234;tre temporaire (lorsqu'on cr&#233;e un nouveau fichier du projet) ou permanent (fichier ignor&#233;).&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Le r&#233;pertoire de travail contient &#224; sa racine le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.git/&lt;/code&gt; qui mat&#233;rialise la base de donn&#233;es de gestion du projet sous Git. Ce r&#233;pertoire Git contient&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le &lt;strong&gt;d&#233;p&#244;t Git&lt;/strong&gt; appel&#233;e aussi &lt;strong&gt;&lt;span lang='en'&gt;repository&lt;/span&gt;&lt;/strong&gt; ou &lt;strong&gt;&lt;span lang='en'&gt;repo&lt;/span&gt;&lt;/strong&gt; qui stocke l'historique et le d&#233;tails des modifications enregistr&#233;es (&lt;span lang='en'&gt;commits&lt;/span&gt;) sous la forme d'instantan&#233;s (donc le d&#233;p&#244;t contient sous une forme optimis&#233;e les &#233;tats de tous les fichiers)&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; et une &lt;strong&gt;zone d'index&lt;/strong&gt; qui a pour but de pr&#233;parer les commits en stockant les diff&#233;rences entre la zone de travail et le d&#233;p&#244;t.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Cette organisation am&#232;ne Git &#224; consid&#233;rer diff&#233;rents &#233;tats pour les fichiers, &#233;tats qui sont calcul&#233;s par rapport au dernier instantan&#233; enregistr&#233; dans le d&#233;p&#244;t&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; les fichiers &lt;strong&gt;non suivis&lt;/strong&gt; sous Git ou &lt;span lang='en'&gt;&lt;strong&gt;untracked&lt;/strong&gt;&lt;/span&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; les fichiers &lt;strong&gt;modifi&#233;s &lt;/strong&gt; ou &lt;span lang='en'&gt;&lt;strong&gt;modified&lt;/strong&gt;&lt;/span&gt; par rapport au dernier instantan&#233;, mais pas encore marqu&#233;s pour faire partie du prochain instantan&#233;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; les fichiers &lt;strong&gt;index&#233;s &lt;/strong&gt; ou &lt;span lang='en'&gt;&lt;strong&gt;staged&lt;/strong&gt;&lt;/span&gt;, modifi&#233;s et marqu&#233;s dans leur version actuelle pour faire partie du prochain instantan&#233; du projet&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; les fichiers &lt;strong&gt;valid&#233;s&lt;/strong&gt; ou &lt;span lang='en'&gt;&lt;strong&gt;commited&lt;/strong&gt;&lt;/span&gt;, pour lesquels les donn&#233;es d'instantan&#233; sont stock&#233;es en s&#233;curit&#233; dans la base de donn&#233;es Git locale. En fait, l'&#233;tat de ces fichiers correspond aussi &#224; &lt;strong&gt;inchang&#233; &lt;/strong&gt; ou &lt;span lang='en'&gt;&lt;strong&gt;unmodified&lt;/strong&gt;&lt;/span&gt; par rapport au dernier instantan&#233;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;L'illustration qui suit explique comment un fichier passe d'un &#233;tat &#224; un autre et suite &#224; quelle action ou commande Git.&lt;/p&gt;
&lt;div class='spip_document_123 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.smellup.net/IMG/png/etats-git2.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.smellup.net/local/cache-vignettes/L500xH257/etats-git2-144dd.png?1763129362' width='500' height='257' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;h3 class=&#034;h3&#034; id='Depot-local-et-depot-distant'&gt; D&#233;pot local et d&#233;pot distant&lt;a class='sommaire-back sommaire-back-8' href='#s-Depot-local-et-depot-distant' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Il existe deux types de d&#233;p&#244;t Git&#160;: local et distant.&lt;br class='manualbr' /&gt;Le d&#233;p&#244;t local est celui qui est h&#233;berg&#233; sur votre machine. Le d&#233;p&#244;t distant est install&#233; sur un serveur partag&#233; accessible ou pas via une forge par de multiples utilisateurs.&lt;/p&gt;
&lt;p&gt;Si l'on d&#233;veloppe sur un d&#233;p&#244;t local (on a vu que les actions sont toutes faites dans la base Git locale), de temps &#224; autres, il est aussi n&#233;cessaire de synchroniser notre d&#233;p&#244;t local avec un d&#233;p&#244;t distant. C'est le cas des d&#233;veloppeurs du Core de SPIP qui partagent le d&#233;p&#244;t distant du Core de SPIP sur la forge Gitea de la communaut&#233;.&lt;/p&gt;
&lt;p&gt;Il existe donc des commandes sp&#233;cifiques de Git qui permettent cette synchronisation dans les deux sens.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Commandes-Git-de-base'&gt;Commandes Git de base&lt;a class='sommaire-back sommaire-back-8' href='#s-Commandes-Git-de-base' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git help&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;affiche les explications sur les commandes Git ou sur une commande particuli&#232;re &#224; pr&#233;ciser &#224; la suite du help&#160;: &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git help init&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git config&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;permet de modification la configuration Git syst&#232;me, utilisateur ou du d&#233;p&#244;t courant.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;initialise un nouveau d&#233;p&#244;t Git dans un r&#233;pertoire local qui devient de facto une zone de travail pour Git. Le sous-r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.git/&lt;/code&gt; est cr&#233;&#233; et initialis&#233;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git clone&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;copie un d&#233;p&#244;t distant dans un r&#233;pertoire local. En fait, le sous-r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.git/&lt;/code&gt; est copi&#233; du serveur, install&#233; dans le r&#233;pertoire de travail que Git a cr&#233;&#233; et, par d&#233;faut, le dernier instantan&#233; est extrait de la base Git pour peupler la zone de travail.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;v&#233;rifie le statut de votre d&#233;p&#244;t local et affiche les modifications entre le dernier instantan&#233; et l'&#233;tat actuel de la zone de travail et de la zone d'index.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git add&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;porte &#224; l'attention de Git un fichier non suivi ou indexe un fichier suivi venant d'&#234;tre modifi&#233;. Dans tous les cas, le fichier passe &#224; l'&#233;tat index&#233; (&lt;span lang='en'&gt;staged&lt;/span&gt;) dans la zone d'index.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git rm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;supprime un fichier de la zone de travail et de la zone d'index ou uniquement de la zone d'index. Cette commande ne supprime jamais un fichier de la zone de travail uniquement.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git commit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;par d&#233;faut, cette commande enregistre dans le d&#233;p&#244;t Git un instantan&#233; des modifications (&#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;commit&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;) pr&#233;sentes dans la zone d'index, les modifications non index&#233;es n'&#233;tant pas prises en compte. Cette action n&#233;cessite d'&#234;tre comment&#233;e avec un message pr&#233;cisant les raisons du commit&#160;: &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git commit -m &#034;Mon message&#034;&lt;/code&gt;. Si l'option -m est omise, Git lance l'&#233;diteur configur&#233; pour saisir le message.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git log&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;affiche la liste des modifications enregistr&#233;es dans le d&#233;p&#244;t Git appel&#233;e aussi &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;log de commits&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Cette commande poss&#232;de de multiples options pour obtenir l'affichage d&#233;sir&#233;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git fetch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;r&#233;cup&#232;re toutes les donn&#233;es d'un d&#233;p&#244;t distant qui ne sont pas encore dans la base Git locale. La commande fetch tire les donn&#233;es dans votre d&#233;p&#244;t local mais sous sa propre branche &#8212; elle ne les fusionne pas automatiquement avec aucun de vos travaux ni ne modifie votre copie de travail&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git pull&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;agit par d&#233;faut comme fetch mais fusionne automatiquement les modifications r&#233;cup&#233;r&#233;es sur le d&#233;p&#244;t distant dans la branche locale et met donc &#224; jour la zone de travail.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git push&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;pousse les modifications valid&#233;es d'une branche locale vers une branche distante&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Configuration de Git</title>
		<link>https://blog.smellup.net/spip.php?article87</link>
		<guid isPermaLink="true">https://blog.smellup.net/spip.php?article87</guid>
		<dc:date>2019-12-14T17:50:01Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>



		<description>&lt;p&gt;Cet article d&#233;crit, suite &#224; l'installation, les bases de la configuration de Git qui permet d'utiliser la ligne de commande de fa&#231;on optimale.&lt;/p&gt;

-
&lt;a href="https://blog.smellup.net/spip.php?rubrique46" rel="directory"&gt;Guide Git pour SPIP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-4&#034; id=&#034;nav6a2e289dc547c0.37906817&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Principes-de-base&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Principes-de-base&#034; class=&#034;spip_ancre&#034;&gt;Principes de base&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Configuration-classique-au-niveau-utilisateur&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Configuration-classique-au-niveau-utilisateur&#034; class=&#034;spip_ancre&#034;&gt;Configuration classique au niveau utilisateur&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Configuration-des-fichiers-ignores&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Configuration-des-fichiers-ignores&#034; class=&#034;spip_ancre&#034;&gt;Configuration des fichiers ignor&#233;s&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Configuration-des-droits-d-acces&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Configuration-des-droits-d-acces&#034; class=&#034;spip_ancre&#034;&gt;Configuration des droits d'acc&#232;s&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;h2 class=&#034;h2&#034; id='Principes-de-base'&gt;Principes de base&lt;a class='sommaire-back sommaire-back-4' href='#s-Principes-de-base' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lien tutoriel&#160;: &lt;a href=&#034;https://git-scm.com/book/fr/v2/D%C3%A9marrage-rapide-Param%C3%A9trage-%C3%A0-la-premi%C3%A8re-utilisation-de-Git&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://git-scm.com/book/fr/v2/D%C3...&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;L'installation termin&#233;e il est possible d'invoquer Git au travers d'une fen&#234;tre Bash (la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git&lt;/code&gt; est connue car on a adapt&#233; le PATH en cons&#233;quence &#224; l'&#233;tape d'installation). Par exemple, on v&#233;rifie la version install&#233;e en tapant la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git --version&lt;/code&gt; dans l'invite de commande.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git --version git version 2.25.0&lt;/textarea&gt;
&lt;p&gt;Maintenant, pour utiliser Git de fa&#231;on extensive, il est n&#233;cessaire de d&#233;finir une fois pour toute quelques param&#232;tres de configuration persistants comme l'identit&#233; de l'utilisateur. Pour ce faire, Git propose un outil &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git config&lt;/code&gt; qui g&#233;n&#232;re des fichiers de configuration&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; soit au niveau syst&#232;me (pour tous les utilisateurs). Ce fichier n'existe pas toujours. Pour le cr&#233;er, il faut invoquer la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git config&lt;/code&gt; avec l'option &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;--system&lt;/code&gt; et les param&#232;tres d&#233;sir&#233;s. Ce param&#233;trage est rarement utile, on en parlera plus dans la suite de cet article.&lt;/li&gt;&lt;li&gt; soit au &lt;strong&gt;niveau de l'utilisateur&lt;/strong&gt; et s'appelle &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.gitconfig&lt;/code&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Sous Windows 10, le fichier de niveau utilisateur se trouve dans .&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;. Pour le mettre &#224; jour, il faut invoquer la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git config&lt;/code&gt; avec l'option &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;--global&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; soit au &lt;strong&gt;niveau d'un d&#233;p&#244;t local&lt;/strong&gt; (r&#233;pertoire Git). Dans ce cas, il s'appelle &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.git/config&lt;/code&gt;, quelque soit l'OS.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ces fichiers sont aussi consultables et modifiables par un &#233;diteur de texte.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Configuration-classique-au-niveau-utilisateur'&gt;Configuration classique au niveau utilisateur&lt;a class='sommaire-back sommaire-back-4' href='#s-Configuration-classique-au-niveau-utilisateur' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lien tutoriel&#160;: &lt;a href=&#034;https://git-scm.com/book/fr/v2/Personnalisation-de-Git-Configuration-de-Git&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://git-scm.com/book/fr/v2/Pers...&lt;/a&gt;&lt;br class='manualbr' /&gt;Lien de r&#233;f&#233;rence de l'outil &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git config&lt;/code&gt;&#160;: &lt;a href=&#034;https://git-scm.com/docs/git-config.html&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://git-scm.com/docs/git-config.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pour configurer son identit&#233;, &#224; savoir, le nom de l'utilisateur, Jean Martin et son email, jean.martin@spip.org, il faut lancer les commandes suivantes &#224; l'invite de commande (Git Bash pour Windows ou Terminal pour MacOS)&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git config --global user.name &#034;Jean Martin&#034; $ git config --global user.email jean.martin@spip.org&lt;/textarea&gt;
&lt;p&gt;Pour d&#233;finir l'&#233;diteur de texte qui sera lanc&#233; pour saisir les messages (inutile quand on utilise un GUI mais n&#233;cessaire si on utilise uniquement l'invite de commande), il faut pr&#233;ciser &#224; Git le chemin vers l'ex&#233;cutable en utilisant la commande suivante&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git config --global core.editor emacs&lt;/textarea&gt;
&lt;p&gt;Il est aussi possible de changer les couleurs utilis&#233;es pour rep&#233;rer les changements de code (ajout, modification, suppression), de d&#233;finir une mod&#232;le pour les messages de commits, une cl&#233; PGP pour signer les commits et bien d'autres choses d&#233;crites dans la documentation de r&#233;f&#233;rence de l'outil &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git config&lt;/code&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Configuration-des-fichiers-ignores'&gt;Configuration des fichiers ignor&#233;s&lt;a class='sommaire-back sommaire-back-4' href='#s-Configuration-des-fichiers-ignores' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lien tutoriel&#160;: &lt;a href=&#034;https://www.atlassian.com/git/tutorials/saving-changes/gitignore&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://www.atlassian.com/git/tutor...&lt;/a&gt;&lt;br class='manualbr' /&gt;Lien de r&#233;f&#233;rence du gitignore&#160;: &lt;a href=&#034;https://git-scm.com/docs/gitignore&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://git-scm.com/docs/gitignore&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Git donne la possibilit&#233; d'exclure des fichiers ou des mod&#232;les de fichier du versionnage. Par d&#233;faut, ces fichiers ne seront jamais ajout&#233;s au d&#233;p&#244;t Git. Cette configuration est sp&#233;cifique &#224; un d&#233;p&#244;t Git et le fichier de nom &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.gitignore &lt;/code&gt;est positionn&#233; en g&#233;n&#233;ral &#224; la racine du d&#233;p&#244;t et s'applique &#224; toute l'arborescence. Il est aussi possible de rajouter d'autres fichiers de ce type dans une sous-arborescence sachant que les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.gitignore&lt;/code&gt; s'applique en cascade du haut (moins prioritaire) en bas (plus prioritaire).&lt;/p&gt;
&lt;p&gt;Maintenant, il est possible de d&#233;finir une liste d'exclusions au niveau de l'utilisateur qui s'appliqueront &#224; tous les d&#233;p&#244;ts locaux de celui-ci. Pour cela il faut utiliser la commande suivante qui configure ce fichier d'exclusions global&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ git config --global core.excludesfile ~/.gitignore_global&lt;/textarea&gt;
&lt;p&gt;Il est classique d'utiliser le nom &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.gitignore_global&lt;/code&gt; pour d&#233;signer ce fichier et de le placer &#224; la racine de l'utilisateur (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;C:\Users\nom_user\&lt;/code&gt; pour Windows en anglais ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;C:\Utilisateurs\nom_user\&lt;/code&gt; pour la version fran&#231;aise).&lt;/p&gt;
&lt;p&gt;Une fois cr&#233;&#233;, le fichier doit &#234;tre &#233;dit&#233; et compl&#233;t&#233; avec les motifs d&#233;finissant les fichiers &#224; ignorer. Il est conseill&#233; d'utiliser les commentaires pour pr&#233;ciser l'objectif de chaque motif. Par exemple&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;# Exclure les fichiers .bak et .log *.bak *.log&lt;/textarea&gt;
&lt;p&gt;La page suivante d&#233;crit la grammaire des motifs&#160;: &lt;a href=&#034;https://www.atlassian.com/git/tutorials/saving-changes/gitignore#git-ignore-patterns&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://www.atlassian.com/git/tutor...&lt;/a&gt;. Github propose aussi une liste de mod&#232;les de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.gitignore&lt;/code&gt; en fonction du langage (&lt;a href=&#034;https://github.com/github/gitignore&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://github.com/github/gitignore&lt;/a&gt;).&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Configuration-des-droits-d-acces'&gt;Configuration des droits d'acc&#232;s&lt;a class='sommaire-back sommaire-back-4' href='#s-Configuration-des-droits-d-acces' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Une fois que vous aurez effectu&#233; des modifications sur votre d&#233;p&#244;t Git local, il sera n&#233;cessaire de les pousser sur le serveur Git distant (&#224; l'instar du commit SVN). Pour ce faire, il faut que vous soyez autoris&#233; &#224; acc&#233;der au d&#233;p&#244;t distant en &#233;criture.&lt;/p&gt;
&lt;p&gt;Git supporte les protocoles HTTPS et SSH. HTTPS requiert une authentification classique par login et mot de passe mais l'utilisation de SSH est fortement recommand&#233;e car elle est simple et tr&#232;s s&#233;curis&#233;e. C'est la m&#233;thode que nous allons d&#233;crire ci-apr&#232;s.&lt;/p&gt;
&lt;p&gt;Pour utiliser SSH, il vous faut une paire de cl&#233;s attach&#233;e &#224; un compte utilisateur. L'une des cl&#233;s est dite &lt;strong&gt;priv&#233;e&lt;/strong&gt; car elle est destin&#233;e &#224; rester sur l'ordinateur de l'utilisateur (souvent nomm&#233;e &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;id_rsa&lt;/code&gt;) et l'autre est dite &lt;strong&gt;publique&lt;/strong&gt; car c'est elle qui est copi&#233;e sur les serveurs avec qui on veut communiquer (souvent nomm&#233;e &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;id_rsa.pub&lt;/code&gt;). Par d&#233;faut, ces cl&#233;s sont cr&#233;&#233;es dans le dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.ssh&lt;/code&gt; (ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;C:\Users\nom_user\.ssh\&lt;/code&gt; sous Windows en anglais).&lt;/p&gt;
&lt;p&gt;Si vous n'en disposez pas d&#233;j&#224;, vous devrez g&#233;n&#233;rer une paire de cl&#233;s SSH. Pour cela, il faut lancer la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ssh-keygen&lt;/code&gt; &#224; l'invite de commande comme suit&#160;:&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='4' class='spip_cadre spip_cadre_block' dir='ltr'&gt;$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/nom_user/.ssh/id_rsa):&lt;/textarea&gt;
&lt;p&gt;Le mieux est d'accepter le nom par d&#233;faut propos&#233; pour le fichier en pressant la touche retour. Un mot de passe est alors requis deux fois&#160;: c'est une s&#233;curit&#233; suppl&#233;mentaire mais cela pose parfois quelques soucis avec les GUI si on n'enregistre pas correctement ce mot de passe. Il est donc possible de le laisser vide en pressant deux fois la touche retour. Le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.ssh&lt;/code&gt; contient maintenant les fichiers &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;id_rsa&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;id_rsa.pub&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si vous souhaitez ajouter un mot de passe &#224; votre cl&#233; SSH suivez le tutoriel d'Atlassian &lt;a href=&#034;https://confluence.atlassian.com/bitbucket/set-up-an-ssh-key-728138079.html#SetupanSSHkey-Step2.CreateanSSHkey&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://confluence.atlassian.com/bi...&lt;/a&gt; et l'utilisation du &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ssh-agent&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si le serveur Git est motoris&#233; par une forge comme Github, Bitbucket, Gitlab.com ou une forge communautaire comme celle de SPIP sous Gitea, il suffit de se rendre sur son compte et d'y ajouter la cl&#233; publique g&#233;n&#233;r&#233;e. Pour ce faire, il est n&#233;cessaire de copier son contenu complet (le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;id_rsa.pub&lt;/code&gt; est &#233;ditable par tout &#233;diteur de texte) dans l'emplacement demand&#233; par la forge. Si aucune forge n'est utilis&#233;e, il suffit de fournir sa cl&#233; &#224; l'administrateur du serveur Git.&lt;/p&gt;
&lt;p&gt;Pour la forge SPIP propuls&#233;e par Gitea voil&#224; &#224; quoi ressemble l'onglet Cl&#233;s SSH d'un utilisateur&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Pour Github ou BitBucket des interfaces similaires sont disponibles.&#034; id=&#034;nh2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;&#160;:&lt;/p&gt;
&lt;div class='spip_document_121 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://blog.smellup.net/IMG/png/parame_tres_-_spip_on_git.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://blog.smellup.net/local/cache-vignettes/L500xH152/parame_tres_-_spip_on_git-9354e.png?1763129362' width='500' height='152' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Si vous avez plusieurs ordinateurs, le mieux est de g&#233;n&#233;rer une cl&#233; pour chacun et d'ajouter les diff&#233;rentes cl&#233;s &#224; la forge utilis&#233;e.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Sous Windows 10, le fichier de niveau utilisateur &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.gitconfig&lt;/code&gt; se trouve dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;C:\Users\nom_user\&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2&#034; class=&#034;spip_note&#034; title=&#034;Notes 2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;Pour Github ou BitBucket des interfaces similaires sont disponibles.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Installation de Git</title>
		<link>https://blog.smellup.net/spip.php?article103</link>
		<guid isPermaLink="true">https://blog.smellup.net/spip.php?article103</guid>
		<dc:date>2019-12-14T13:20:36Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>



		<description>&lt;p&gt;Cet article d&#233;crit pour chaque syst&#232;me d'exploitation la proc&#233;dure d'installation de fa&#231;on simple et accessible &#224; tous.&lt;/p&gt;

-
&lt;a href="https://blog.smellup.net/spip.php?rubrique46" rel="directory"&gt;Guide Git pour SPIP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-4&#034; id=&#034;nav6a2e44fd6920d6.27805570&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Introduction&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Introduction&#034; class=&#034;spip_ancre&#034;&gt;Introduction&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Sous-Windows&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Sous-Windows&#034; class=&#034;spip_ancre&#034;&gt;Sous Windows&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Sous-Mac-OS&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Sous-Mac-OS&#034; class=&#034;spip_ancre&#034;&gt;Sous Mac OS&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Sous-NIX&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Sous-NIX&#034; class=&#034;spip_ancre&#034;&gt;Sous *NIX&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;h2 class=&#034;h2&#034; id='Introduction'&gt;Introduction&lt;a class='sommaire-back sommaire-back-4' href='#s-Introduction' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Il existe un tutoriel tr&#232;s complet sur le site de Atlassian qui d&#233;crit les diff&#233;rentes possibilit&#233;s pour installer Git sur son ordinateur et ce, pour les diff&#233;rents syst&#232;mes d'exploitation. Le but de ce chapitre n'est donc pas de reprendre l'ensemble des informations du tutoriel d'Atlassian mais d'apporter des pr&#233;cisions.&lt;/p&gt;
&lt;p&gt;Le &lt;a href=&#034;https://www.atlassian.com/fr/git/tutorials/install-git&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;tutoriel d'Atlassian&lt;/a&gt; est donc &#224; lire en pr&#233;ambule pour le syst&#232;me d'exploitation qui vous concerne.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Sous-Windows'&gt;Sous Windows&lt;a class='sommaire-back sommaire-back-4' href='#s-Sous-Windows' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lien tutoriel&#160;: &lt;a href=&#034;https://www.atlassian.com/fr/git/tutorials/install-git#windows&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://www.atlassian.com/fr/git/tutorials/install-git#windows&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La meilleure solution sous Windows est d'installer le logiciel &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Git for Windows&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; disponible sur le site &lt;a href=&#034;https://gitforwindows.org/&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://gitforwindows.org/&lt;/a&gt;. Il suffit de t&#233;l&#233;charger la derni&#232;re version disponible et de lancer l'ex&#233;cutable d'installation. Pour la version 2.25.0 la s&#233;quence des fen&#234;tres de configuration est un peu longue et parfois un peu obscure. Elle est rappel&#233;e et expliqu&#233;e ci-dessous&#160;:&lt;/p&gt;
&lt;p&gt;En premier lieu il faut choisir les composants &#224; installer. Le Bash est essentiel, le GUI est inutile (&#224; mon avis) et peut &#234;tre avantageusement remplac&#233; par un autre GUI comme expliqu&#233; dans l'article &lt;a href='https://blog.smellup.net/spip.php?article66' class=&#034;spip_in&#034;&gt;Installation et configuration d'un GUI&#160;: SourceTree&lt;/a&gt;. On peut donc le d&#233;cocher.&lt;/p&gt;
&lt;div class='spip_document_116 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.smellup.net/local/cache-vignettes/L499xH387/git3-bc3f9.png?1763129362' width='499' height='387' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;On choisit ensuite son &#233;diteur par d&#233;faut, qui servira pour saisir les messages de commits, ici Notepad++.&lt;/p&gt;
&lt;div class='spip_document_117 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.smellup.net/local/cache-vignettes/L499xH387/git5-27a5b.png?1763129362' width='499' height='387' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Le troisi&#232;me &#233;tape est cruciale. Si on ne veut jamais utiliser autre chose que le Git Bash qui va &#234;tre install&#233; (c'est-&#224;-dire l'invite de commande) on peut cocher le premier choix. Si on veut utiliser un GUI comme SourceTree alors il faut cocher le deuxi&#232;me choix (comme sur l'image) et &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Git for Windows&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; s'occupe seul de cr&#233;er le bon environnement pour cela. En g&#233;n&#233;ral, il n'y a pas lieu de faire un autre choix.&lt;/p&gt;
&lt;div class='spip_document_118 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.smellup.net/local/cache-vignettes/L499xH387/git6-b8444.png?1763129362' width='499' height='387' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;L'&#233;tape 4 est aussi d&#233;licate. Si vous cochez le premier choix il vous faudra... je ne sais plus quoi mais c'est chiant&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!!!.&lt;/p&gt;
&lt;div class='spip_document_119 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.smellup.net/local/cache-vignettes/L499xH387/git7-0b0b3.png?1763129362' width='499' height='387' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Pour l'&#233;tape 5 le premier choix est recommand&#233; (lire l'explication).&lt;/p&gt;
&lt;div class='spip_document_120 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://blog.smellup.net/local/cache-vignettes/L499xH387/git8-af2a0.png?1763129362' width='499' height='387' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Il reste encore 3 &#233;tapes qu'il suffit de valider en laissant le choix par d&#233;faut et le processus de configuration se termine. Une fois l'installation compl&#232;te termin&#233;e vous disposez d'un Git utilisable avec votre une ligne de commande Bash et &#233;ventuellement d'un GUI minimal.&lt;/p&gt;
&lt;p&gt;Le menu contextuel de l'explorateur s'est enrichi d'un item &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Git Bash Here&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; qui permet d'ouvrir une fen&#234;tre Bash dans le r&#233;pertoire choisi ce qui est bien pratique.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Sous-Mac-OS'&gt;Sous Mac OS&lt;a class='sommaire-back sommaire-back-4' href='#s-Sous-Mac-OS' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lien tutoriel&#160;: &lt;a href=&#034;https://www.atlassian.com/fr/git/tutorials/install-git#mac-os-x&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://www.atlassian.com/fr/git/tutorials/install-git#mac-os-x&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Plusieurs possibilit&#233;s s'offrent &#224; vous&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Xcode ou uniquement ses outils ligne de commande&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; le logiciel &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Git for Mac&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; &#224; l'instar de Windows&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; avec Homebrew&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; ou avec MacPorts.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Si vous avez install&#233; Xcode ou ses outils CLI vous pouvez utiliser Git nativement, l'environnement ayant &#233;t&#233; mis au point. Git est install&#233; dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/usr/bin&lt;/code&gt; et inclut dans le PATH par d&#233;faut.&lt;br class='autobr' /&gt;
La commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git --version&lt;/code&gt; permet de consulter la version Git install&#233;e et on reconnait le fork de Apple gr&#226;ce &#224; une indication entre parenth&#232;ses.&lt;/p&gt;
&lt;p&gt;Sinon, l'autre solution est &#224; l'instar de Windows, d'installer &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Git for Mac&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; que l'on peut trouver &#224; l'adresse &lt;a href=&#034;https://sourceforge.net/projects/git-osx-installer/files/&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://sourceforge.net/projects/gi...&lt;/a&gt;. Ce logiciel installe Git dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/usr/local/git&lt;/code&gt; et des liens symboliques sont cr&#233;&#233;s dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/usr/local/bin&lt;/code&gt;. Pour utiliser cette installation de Git il faut donc rajouter le dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/usr/local/bin&lt;/code&gt; dans le PATH.&lt;/p&gt;
&lt;p&gt;Il est possible de concilier ces deux installations et de passer de l'une &#224; l'autre en ajoutant ou supprimant le dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/usr/local/bin&lt;/code&gt; du PATH. Cela peut &#234;tre n&#233;cessaire si on veut faire du Git-SVN qui n'est plus embarqu&#233; dans &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Git for Mac&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034; id='Sous-NIX'&gt;Sous *NIX&lt;a class='sommaire-back sommaire-back-4' href='#s-Sous-NIX' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lien tutoriel&#160;: &lt;a href=&#034;https://www.atlassian.com/fr/git/tutorials/install-git#linux&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://www.atlassian.com/fr/git/tutorials/install-git#linux&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Objectif et contenu du guide Git</title>
		<link>https://blog.smellup.net/spip.php?article109</link>
		<guid isPermaLink="true">https://blog.smellup.net/spip.php?article109</guid>
		<dc:date>2019-12-14T13:20:18Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>



		<description>&lt;p&gt;Le pr&#233;sent guide a pour but de rassembler les liens vers des ressources Git et de les compl&#233;ter en fournissant des explications plus d&#233;taill&#233;es ou plus accessibles sur certains sujets, en particulier, pour les utilisateurs non aguerris.&lt;/p&gt;

-
&lt;a href="https://blog.smellup.net/spip.php?rubrique46" rel="directory"&gt;Guide Git pour SPIP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Le pr&#233;sent guide a pour but de rassembler les liens vers des ressources Git et de les compl&#233;ter en fournissant des explications plus d&#233;taill&#233;es ou plus accessibles sur certains sujets, en particulier, pour les utilisateurs non aguerris.&lt;/p&gt;
&lt;p&gt;Le guide est organis&#233; en plusieurs articles&#160;:&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href='https://blog.smellup.net/spip.php?article103' class=&#034;spip_in&#034;&gt;Installation de Git&lt;/a&gt;, d&#233;crit les diff&#233;rentes m&#233;thodes d'installation de Git sur Windows, MacOS et *NIX&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; &lt;a href='https://blog.smellup.net/spip.php?article87' class=&#034;spip_in&#034;&gt;Configuration de Git&lt;/a&gt;, qui explique quelle configuration minimale est n&#233;cessaire pour utiliser ou simplifier l'utilisation de Git&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; &lt;a href='https://blog.smellup.net/spip.php?article112' class=&#034;spip_in&#034;&gt;Les bases de l'utilisation de Git&lt;/a&gt;, liste des ressources de d&#233;marrage et rappelle les principales notions de Git ainsi que commandes usuelles&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; &lt;a href='https://blog.smellup.net/spip.php?article113' class=&#034;spip_in&#034;&gt;Tutoriel de d&#233;marrage avec Git&lt;/a&gt;, fournit un tutoriel de d&#233;marrage avec Git bas&#233; sur des cas d'usage tr&#232;s simples&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; &lt;a href='https://blog.smellup.net/spip.php?article117' class=&#034;spip_in&#034;&gt;Installer un SPIP en Git&lt;/a&gt;, qui explique comment installer un nouveau site SPIP ou migrer un environnement SPIP en Git&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; Comprendre la forge Git de SPIP&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; Utiliser la forge Git de SPIP pour contribuer&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Il existe des tas de pages sur Git et son utilisation. N&#233;anmoins, toutes ne sont pas accessibles pour les utilisateurs d&#233;butants ou occasionnels. Par contre, des ressources se r&#233;v&#232;lent tr&#232;s utiles &#224; tous&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;ProGit&lt;/strong&gt;, le livre de Scott Chacon et Ben Straub, disponible en version web fran&#231;aise et anglaise &#224; l'adresse &lt;a href=&#034;https://git-scm.com/book/fr/v2&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://git-scm.com/book/fr/v2&lt;/a&gt;. Ce livre s'inscrit dans un site plus large qui comprend aussi une &lt;a href=&#034;https://git-scm.com/docs&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;r&#233;f&#233;rence Git&lt;/a&gt;, des &lt;a href=&#034;https://git-scm.com/videos&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;tutoriels vid&#233;o&lt;/a&gt; et des &lt;a href=&#034;https://git-scm.com/doc/ext&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;liens externes&lt;/a&gt; vers d'autres ressources Git. Ce site a largement inspir&#233; certains articles du pr&#233;sent guide.&lt;/li&gt;&lt;li&gt; les &lt;a href=&#034;https://www.atlassian.com/fr/git/tutorials&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;tutoriels Git de l'&#233;diteur Atlassian&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; et bien entendu la &lt;a href=&#034;http://www.kernel.org/pub/software/scm/git/docs/user-manual.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;documentation officielle&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Dans la suite du guide, d'autres ressources plus sp&#233;cifiques seront identifi&#233;es car leur lecture est n&#233;cessaire &#224; la compr&#233;hension du guide.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
