<?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>Geekographie Ma&#239;eulesque</title>
	<link>https://geekographie.maieul.net/</link>
	<description>Ce site est consacr&#233; &#224; quelques unes des mes geekeries. J'y donne des conseils, des r&#233;flexions, sur les logiciels et les langages que je connais ou que j'apprends.
J'y parle notamment de l'usage de LaTeX en sciences humaines et sociales, en particulier pour la gestion de la bibliographie.
Le contenu peut &#234;tre sous la forme d'articles d&#233;taill&#233;s ou de simples notes.
L'ensemble du contenu est, sauf pr&#233;cision contraire, sous licence Cr&#233;ative Commons Paternit&#233;-Partage des Conditions Initiales &#224; l'identique France.</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="http://geekographie.maieul.net/spip.php?id_rubrique=45&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Stage LaTeX Dunkerque&#160;: Git</title>
		<link>http://geekographie.maieul.net/231</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/231</guid>
		<dc:date>2019-06-12T06:00:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Je pr&#233;sente au Stage LaTeX de Dunkerque une initiation &#224; Git. Vous trouverez ci-dessous mon support de pr&#233;sentation.&lt;/p&gt;


-
&lt;a href="http://geekographie.maieul.net/Git" rel="directory"&gt;Git&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Je pr&#233;sente au &lt;a href=&#034;http://stage-latex-gte.univ-littoral.fr/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Stage LaTeX de Dunkerque&lt;/a&gt; une initiation &#224; Git. Vous trouverez ci-dessous mon support de pr&#233;sentation.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;div class='spip_document_238 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;39&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='http://geekographie.maieul.net/IMG/pdf/intro-git.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 390.2 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='http://geekographie.maieul.net/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1772795065' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-238 '&gt;&lt;strong&gt;Pr&#233;sentation sur l'utilisation de Git
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Comme d'habitude, &lt;a href=&#034;https://framagit.org/maieul/intro-git&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;les sources sont sur Framagit&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Ma politique de branches avec Git</title>
		<link>http://geekographie.maieul.net/232</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/232</guid>
		<dc:date>2019-06-02T17:39:33Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;En pr&#233;parant mon intervention sur Git au Stage LaTeX de juin, je me suis dit qu'il pouvait &#234;tre utile que je r&#233;sume, succinctement, ma politiquement de branchement avec Git. Elle n'a rien de tr&#232;s original, mais je la trouve pratique, et je me la suis plus ou moins construite avec le temps, notamment &#224; cause de mon travail sur (r)(e)ledmac. Principe num&#233;ro 1&#160;: la branche master doit &#234;tre utilisable &#224; tout moment Contrairement &#224; &lt;span class=&#034;caps&#034;&gt;SVN&lt;/span&gt; o&#249; le trunk sert souvent de branche de d&#233;veloppement,&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="http://geekographie.maieul.net/Git" rel="directory"&gt;Git&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;En pr&#233;parant mon &lt;a href='http://geekographie.maieul.net/230' class=&#034;spip_in&#034;&gt;intervention sur Git au Stage LaTeX de juin&lt;/a&gt;, je me suis dit qu'il pouvait &#234;tre utile que je r&#233;sume, succinctement, ma politiquement de branchement avec Git.&lt;/p&gt;
&lt;p&gt;Elle n'a rien de tr&#232;s original, mais je la trouve pratique, et je me la suis plus ou moins construite avec le temps, notamment &#224; cause de mon travail sur &lt;a href=&#034;https://github.com/maieul/ledmac&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;(r)(e)ledmac&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Principe num&#233;ro 1&#160;: la branche &lt;code&gt;master&lt;/code&gt; doit &#234;tre utilisable &#224; tout moment&lt;/h2&gt;
&lt;p&gt;Contrairement &#224; &lt;code&gt;SVN&lt;/code&gt; o&#249; le &lt;code&gt;trunk&lt;/code&gt; sert souvent de branche de d&#233;veloppement, la facilit&#233; de cr&#233;er des branches en &lt;code&gt;git&lt;/code&gt; fait qu'il vaut mieux garder une branche &lt;code&gt;master&lt;/code&gt; toujours pr&#234;te &#224; fonctionner.&lt;/p&gt;
&lt;p&gt;C'est pourquoi je ne commite jamais directement dans &lt;code&gt;master&lt;/code&gt;, sauf pour corriger des coquilles dans le manuel.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Principe num&#233;ro 2&#160;: une branche par &lt;code&gt;issue&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Pour chaque &lt;code&gt;issue&lt;/code&gt; (ticket) ouvert, je cr&#233;e une branche homonyme &lt;code&gt;issueXXX&lt;/code&gt; o&#249; &lt;span class=&#034;caps&#034;&gt;XXX&lt;/span&gt; est le num&#233;ro de l'issue.&lt;/p&gt;
&lt;p&gt;Le premier commit de la branche contient un exemple complet minimal, permettant de cerner le probl&#232;me.&lt;/p&gt;
&lt;p&gt;Le dernier commit contient l'effacement de cet exemple, ainsi que l'enregistrement des logs de changement dans le fichier &lt;code&gt;.dtx&lt;/code&gt;. Son message habituel est &lt;code&gt;changelog + fixe #XXX&lt;/code&gt;. Le &lt;code&gt;fixe #XXX&lt;/code&gt; permet de fermer automatiquement l'issue lors de la fusion dans &lt;code&gt;master&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Je demande &#224; la personne ayant ouvert l'issue de tester &#224; partir de ces branches.&lt;/p&gt;
&lt;p&gt;Si la r&#233;solution d'un ticket d&#233;pend de la r&#233;solution d'un autre ticket, je fusionne d'une branche &#224; l'autre.&lt;/p&gt;
&lt;p&gt;Si une personne rouvre une issue ferm&#233;e, deux solutions&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; soit je consid&#232;re qu'il s'agit en fait d'un probl&#232;me diff&#233;rent, et dans ce cas je demande de rouvrir une nouvelle issue&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; soit j'avais mal r&#233;solu le probl&#232;me, et dans ce cas je cr&#233;e une branche &lt;code&gt;issueXXX-bis&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Principe num&#233;ro 3&#160;: jamais de rebasage ou de fast-forward, toujours de la fusion de branche&lt;/h2&gt;
&lt;p&gt;Le principe de cr&#233;er des branches est de pouvoir faire des d&#233;veloppements parall&#232;les. Il importe que la trace de ces d&#233;veloppements parall&#232;les soit conserv&#233;e m&#234;me une fois finis les d&#233;veloppements. C'est pourquoi je ne rebase jamais les branches une fois un d&#233;veloppement achev&#233;, et je refuse les fast-forward.&lt;/p&gt;
&lt;p&gt;Ainsi qu'&lt;a href=&#034;https://delicious-insights.com/fr/articles/bien-utiliser-git-merge-et-rebase/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;expliqu&#233; ailleurs&lt;/a&gt;, le rebasage ne devrait &#234;tre conserv&#233; que pour g&#233;rer le cas o&#249; mon d&#233;p&#244;t distant et mon d&#233;p&#244;t local n'ont plus le m&#234;me historique. Comme je travaille quasiment seul, cela m'arrive rarement.&lt;/p&gt;
&lt;p&gt;J'ai donc dans mon &lt;code&gt;.gitconfig&lt;/code&gt; global les lignes suivantes&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt; [pull] ff = only rebase = preserve [merge] ff = false &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;Principe num&#233;ro&#160;4&#160;: une branche par release&lt;/h2&gt;
&lt;p&gt;Avant de sortir (&#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;releaser&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;) une nouvelle version, je cr&#233;e une branche. Le nom de cette branche correspond au num&#233;ro de version de la future release. Dans le cas de reledmac, comme en plus reledpar n'a pas le m&#234;me num&#233;ro de version, j'utilise un tiret pour s&#233;parer les deux num&#233;ros. Cela donne donc &lt;code&gt;x1.y1.z1-x2-y2-z2&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Dans cette branche&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; je fusionne les branches fonctionnelles / de d&#233;bogage&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; je corrige le cas &#233;ch&#233;ant le changelog, pour adapter &#224; la date effective de sortie&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; je proc&#232;de aux tests automatiques.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Puis je fusionne avec &lt;code&gt;master&lt;/code&gt;, d'o&#249; je pr&#233;pare la sortie effective.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Principe num&#233;ro&#160;5&#160;: une branche par version majeure&lt;/h2&gt;
&lt;p&gt;Avant &lt;code&gt;reledmac&lt;/code&gt;, ils y avaient &lt;code&gt;eledmac&lt;/code&gt; et &lt;code&gt;ledmac&lt;/code&gt;. Dans mon syst&#232;me de codification, &lt;code&gt;reledmac&lt;/code&gt; est la version &lt;code&gt;2&lt;/code&gt;, eledmac la version &lt;code&gt;1&lt;/code&gt; et ledmac la version &lt;code&gt;0&lt;/code&gt;. J'ai donc une branche &lt;code&gt;1&lt;/code&gt; et une branche &lt;code&gt;0&lt;/code&gt; pour les rares cas o&#249; j'accepte d'intervenir sur ces anciennes versions&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;Principalement pour corriger des ruptures de comptabilit&#233; apport&#233;es par les (&#8230;)&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Principe num&#233;ro&#160;6&#160;: une branche pour la relecture de l'anglais&lt;/h2&gt;
&lt;p&gt;Comme je demande r&#233;guli&#232;rement &#224; des personnes de relire l'anglais et le manuel de reledmac/reledpar, j'ai cr&#233;&#233; une branche &lt;code&gt;english2&lt;/code&gt;&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;parce que cela concerne , cf. plus haut.&#034; id=&#034;nh2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;. Cette branche contient l'&#233;tat des fichiers apr&#232;s la derni&#232;re relecture par un&lt;span aria-hidden='true'&gt;&#183;&lt;/span&gt;e correcteur&lt;span aria-hidden='true'&gt;&#183;&lt;/span&gt;trice. Je m'en sers pour proposer de ne relire que les nouvelles modifications en comparant &lt;code&gt;english2&lt;/code&gt; et &lt;code&gt;master&lt;/code&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Principe num&#233;ro 7&#160;: ne pas conserver les branches fusionn&#233;es&lt;/h2&gt;
&lt;p&gt;Une fois une branche fusionn&#233;e, je la supprime en local comme en distant.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Appendice&#160;: principe de num&#233;rotation des tags et des release&lt;/h2&gt;
&lt;p&gt;J'utilise un syst&#232;me simple de num&#233;rotation sur le mode &lt;code&gt;x.y.z&lt;/code&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Un changement de &lt;code&gt;x&lt;/code&gt; indique une rupture majeure, impliquant de grands changements. Dans le monde LaTeX, je change &#233;galement le nom, pour faciliter la compatibilit&#233; ascendante des documents.&lt;/li&gt;&lt;li&gt; Un changement de &lt;code&gt;y&lt;/code&gt; indique de nouvelles fonctionnalit&#233;s.&lt;/li&gt;&lt;li&gt; Un changement de &lt;code&gt;z&lt;/code&gt; indique une correction de bug.&lt;/li&gt;&lt;li&gt; Parfois j'ajoute une lettre (&lt;code&gt;a&lt;/code&gt;, &lt;code&gt;b&lt;/code&gt;, &lt;code&gt;c&lt;/code&gt;, etc.) pour indiquer une simple correction dans le manuel.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Mes tags correspondent simplement au num&#233;ro de version (pas de &lt;code&gt;v.&lt;/code&gt; devant). Dans le cas de &lt;code&gt;reledmac&lt;/code&gt;-&lt;code&gt;reledpar&lt;/code&gt;, comme les deux paquets sont li&#233;s sur le d&#233;p&#244;t et en distribution, mais sont n&#233;anmoins distincts, mes tags ont la forme &lt;code&gt;macx1.y1.z1-parx2.y2.z2&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;J'ai enfin des tags sur tests abandonn&#233;s, que je garde plus pour me dire &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;si jamais il me revient &#224; l'id&#233;e de reprendre ce projet&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&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;Principalement pour corriger des ruptures de comptabilit&#233; apport&#233;es par les &#233;volutions de LaTeX.&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;&lt;code&gt;2&lt;/code&gt; parce que cela concerne &lt;code&gt;reledmac&lt;/code&gt;, cf. plus haut.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Stage LaTeX &#224; Dunkerque</title>
		<link>http://geekographie.maieul.net/230</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/230</guid>
		<dc:date>2019-05-06T16:58:29Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Comme chaque ann&#233;e, l'&lt;span class=&#034;caps&#034;&gt;IUT&lt;/span&gt; de g&#233;nie thermique de Dunkerque, ou plus exactement Denis Bitouz&#233;, organise un stage d'une journ&#233;e. Cette ann&#233;e, le stage LaTeX aura lieu le 12&#160;juin prochain. Le stage n&#233;cessite une inscription pr&#233;alable, et ne co&#251;t que 6 &#8364; de participation aux frais. J'y pr&#233;senterai deux interventions&#160;: biblatex et biber&#160;: g&#233;rer sa bibliographie avec des outils &#64258;exibles et modernes G&#233;rer son historique de &#64257;chiers LaTeX avec Git&lt;/p&gt;


-
&lt;a href="http://geekographie.maieul.net/BibLaTeX" rel="directory"&gt;BibLaTeX&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Comme chaque ann&#233;e, l'&lt;span class=&#034;caps&#034;&gt;IUT&lt;/span&gt; de g&#233;nie thermique de Dunkerque, ou plus exactement Denis Bitouz&#233;, organise un stage d'une journ&#233;e.
Cette ann&#233;e, le &lt;a href=&#034;http://stage-latex-gte.univ-littoral.fr/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;stage LaTeX aura lieu le 12&#160;juin prochain&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Le stage n&#233;cessite &lt;a href=&#034;http://stage-latex-gte.univ-littoral.fr/inscriptions&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;une inscription pr&#233;alable&lt;/a&gt;, et ne co&#251;t que 6 &#8364; de participation aux frais.&lt;/p&gt;
&lt;p&gt;J'y pr&#233;senterai &lt;a href=&#034;http://stage-latex-gte.univ-littoral.fr/programmes/edition-en-cours/programme-format-html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;deux interventions&lt;/a&gt;&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;i&gt;biblatex et biber&#160;: g&#233;rer sa bibliographie avec des outils &#64258;exibles et modernes&lt;/i&gt;&lt;/li&gt;&lt;li&gt; &lt;i&gt;G&#233;rer son historique de &#64257;chiers LaTeX avec Git&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Sauvegarder et partager son historique git</title>
		<link>http://geekographie.maieul.net/191</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/191</guid>
		<dc:date>2015-11-28T18:56:30Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Il y a fort, fort longtemps, j'ai &#233;crit une petite introduction &#224; Git pour expliquer &#224; un.e chercheur.euse utilisant LaTeX comment versionner son travail. Je poursuis ici, en expliquant comment envoyer son historique Git sur un serveur, afin d'avoir d'une part une copie de sauvegarde, et d'autre part de pouvoir travailler avec d'autres personnes. Objectifs Contentons-nous d'objectifs simples&#160;: ouvrir un d&#233;p&#244;t git distant y envoyer une copie de notre d&#233;p&#244;t local mettre r&#233;guli&#232;rement &#224;&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="http://geekographie.maieul.net/LaTeX" rel="directory"&gt;LaTeX&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Il y a fort, fort longtemps, j'ai &#233;crit une &lt;a href='http://geekographie.maieul.net/83' class=&#034;spip_in&#034;&gt;petite introduction &#224; Git&lt;/a&gt; pour expliquer &#224; un.e chercheur.euse utilisant LaTeX comment versionner son travail. Je poursuis ici, en expliquant comment envoyer son historique Git sur un serveur, afin d'avoir d'une part une copie de sauvegarde, et d'autre part de pouvoir travailler avec d'autres personnes.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Objectifs&lt;/h2&gt;
&lt;p&gt;Contentons-nous d'objectifs simples&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; ouvrir un d&#233;p&#244;t git distant&lt;/li&gt;&lt;li&gt; y envoyer une copie de notre d&#233;p&#244;t local&lt;/li&gt;&lt;li&gt; mettre r&#233;guli&#232;rement &#224; jour cette copie&lt;/li&gt;&lt;li&gt; la r&#233;cup&#233;rer depuis un autre ordinateur et faire la synchronisation&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Principes de base&lt;/h2&gt;
&lt;p&gt;Avec Git, l'historique du travail est conserv&#233; sur l'ordinateur de travail, dans ce qu'on appelle un d&#233;p&#244;t git. Il est cependant possible de cr&#233;er un d&#233;p&#244;t git sur un autre ordinateur, et de le synchroniser avec notre propre d&#233;p&#244;t.
Les avantages sont &#233;videmment multiples&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; pour la personne qui travaille sur une seule machine, avoir un copie de sauvegarde en plus de celle de sa machine.&lt;/li&gt;&lt;li&gt; pour la personne qui travaille sur plusieurs machines, pouvoir synchroniser les historiques entre les machines&lt;/li&gt;&lt;li&gt; pour les personnes qui travaillent sur le m&#234;me projet, pouvoir se synchroniser.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Nous allons prendre un cas simple&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; deux d&#233;p&#244;ts locaux de travail&#160;: (A) et (B)&lt;/li&gt;&lt;li&gt; un d&#233;p&#244;t distant de synchronisation et sauvegarde (C)&lt;/li&gt;&lt;/ul&gt;&lt;div class='spip_document_198 spip_document spip_documents spip_document_image spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;59&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='http://geekographie.maieul.net/local/cache-vignettes/L199xH161/git-push-pull-0b271.png?1760449129' width='199' height='161' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-198 '&gt;&lt;strong&gt;Utiliser un serveur pour synchroniser ses historiques git
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt; &lt;p&gt;&lt;span class=&#034;caps&#034;&gt;XX&lt;/span&gt; travaille sur (A). Il y enregistre l'historique de ses modifications. &#192; la fin de sa session de travail, il les envoie sur (C). Au d&#233;but de sa session de travail, &lt;span class=&#034;caps&#034;&gt;YY&lt;/span&gt; r&#233;cup&#232;re l'historique depuis (C) et le met sur (B). &#192; la fin de sa session, il envoie ses modifications sur (C). Quand &lt;span class=&#034;caps&#034;&gt;XX&lt;/span&gt; reprend le travail, il r&#233;cup&#232;re depuis (C) vers (A), puis envoie sur (C) ses nouvelles modifications &#224; la fin de sa session, etc.&lt;/p&gt;
&lt;p&gt;Je prends un cas simple dans la mesure o&#249; je suppose que chaque personne r&#233;cup&#232;re l'historique sur (C) avant de travailler, et renvoie son historique &#224; la fin de son travail. En outre &lt;span class=&#034;caps&#034;&gt;XX&lt;/span&gt; et &lt;span class=&#034;caps&#034;&gt;YY&lt;/span&gt; ne travaille pas en parall&#232;le. Si bien lorsqu'on travaille tant sur (A) que sur (B), on a forc&#233;ment tout ce qui existe d&#233;j&#224; sur (C).&lt;/p&gt;
&lt;p&gt;Git permet de g&#233;rer les cas o&#249; &lt;span class=&#034;caps&#034;&gt;XX&lt;/span&gt; r&#233;cup&#232;re l'historique sur (C) pour le mettre en (A), et pendant qu'il travaille &lt;span class=&#034;caps&#034;&gt;YY&lt;/span&gt; envoie des donn&#233;es sur (B). Cependant, je n'aborderai pas, ici en tout cas, ce probl&#232;me.&lt;/p&gt;
&lt;p&gt;Il permet &#233;galement de travailler avec plusieurs d&#233;p&#244;ts distants, mais une chose &#224; la fois.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Communication entre les d&#233;p&#244;ts&lt;/h2&gt;
&lt;p&gt;Puisque les donn&#233;es de (A) (et de (B)) doivent &#234;tre envoy&#233;es vers le d&#233;p&#244;t (C), il nous faut&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Savoir o&#249; se trouve le d&#233;p&#244;t (C), autrement dit conna&#238;tre son adresse. Tr&#232;s souvent l'adresse d'un d&#233;p&#244;t distant est de la forme &lt;code&gt;git@serveur:utilisateur/nom.git&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; r&#233;f&#233;rencer ce d&#233;p&#244;t distant depuis le d&#233;p&#244;t local. Comme il est possible de lier un d&#233;p&#244;t local &#224; plusieurs d&#233;p&#244;ts distants (remote), chaque adresse de d&#233;p&#244;t distant se verra ajouter un alias. Pour notre cas, nous allons utiliser un seul d&#233;p&#244;t distant, dont l'alias sera &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;origin&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, un terme conventionnel.&lt;/li&gt;&lt;li&gt; faire quelques petits r&#233;glages pour permettre &#224; votre ordinateur de communiquer avec l'ordinateur sur lequel se trouve le d&#233;p&#244;t de mani&#232;re s&#233;curis&#233;e et authentifi&#233;e.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Cr&#233;ation et r&#233;glage d'un compte chez Framasoft&lt;/h2&gt;&lt;h3 class=&#034;h3&#034;&gt; Choix de Framasoft&lt;/h3&gt;
&lt;p&gt;N'importe quel serveur ayant une installation Git peut h&#233;berger un d&#233;p&#244;t Git distant. Il vous est donc possible de demander &#224; une institution de rattachement (Universit&#233;, Centre de Recherche). Il existe cependant des structures proposant non seulement des d&#233;p&#244;ts Git, mais aussi des interfaces graphiques pour les g&#233;rer et d'autres outils.&lt;/p&gt;
&lt;p&gt;La plus c&#233;l&#232;bre de ces structures est l'entreprise Github. Pour ma part, je vous proposerai d'utiliser les services de l'association &lt;a href=&#034;http://framasoft.org&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Framasoft&lt;/a&gt;, pour diverses raisons&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; pour &lt;a href=&#034;http://degooglisons-internet.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&#233;viter de concentrer l'internet en quelques p&#244;les&lt;/a&gt;, le plus souvent priv&#233;s.&lt;/li&gt;&lt;li&gt; parce que Framasoft est une association, et non une entreprise.&lt;/li&gt;&lt;li&gt; parce que l'infrastructure propos&#233;e tourne sous logiciel libre, et que vous pourrez vous m&#234;me monter un jour votre propre serveur avec la m&#234;me interface.&lt;/li&gt;&lt;li&gt; parce qu'elle permet de cr&#233;er gratuitement des d&#233;p&#244;ts priv&#233;s, accessibles &#224; vous seulement, alors que Github ne le propose que contre argent&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;Ce qui est normal, puisqu'il s'agit d'une entreprise &#224; but lucratif.&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&#034;h3&#034;&gt;Cr&#233;ation d'un compte&lt;/h3&gt;
&lt;p&gt;Rendons-nous donc sur la page d'&lt;a href=&#034;https://git.framasoft.org/public/projects&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;accueil du service Git de Framasoft&lt;/a&gt;, choisissons &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Sign In&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;&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;&#171;&#160;S'identifier&#160;&#187;.&#034; id=&#034;nh2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;. Remplissez les informations pour cr&#233;er le compte, dans la rubrique &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;New user&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? Create an account&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Vous recevrez un mail contenant un lien pour confirmer la cr&#233;ation de votre compte. Cliquez sur le lien.&lt;/p&gt;
&lt;p&gt;Vous &#234;tes automatiquement authentifi&#233;s apr&#232;s la validation du compte. Cependant il vous faudra sans doute vous reconnecter les prochaines fois, via &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Existing user&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? Sign in&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, en choisissant non pas la connexion &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;span class=&#034;caps&#034;&gt;LDAP&lt;/span&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; mais &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Standard&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;h3 class=&#034;h3&#034;&gt;Cr&#233;ation d'une paire de clef &lt;span class=&#034;caps&#034;&gt;SSH&lt;/span&gt; et mise en ligne de la clef publique&lt;/h3&gt;
&lt;p&gt;Pour que votre ordinateur puisse envoyer et r&#233;cup&#233;rer l'historique sur le serveur de Framasoft, il faut qu'il communique avec lui en lui prouvant qu'il est bien votre ordinateur, et pas celui d'un tiers.&lt;/p&gt;
&lt;p&gt;Plusieurs m&#233;thodes sont possibles. L'une est de frapper un mot de passe &#224; chaque nouvelle communication, l'autre d'utiliser un syst&#232;me de clefs &lt;span class=&#034;caps&#034;&gt;SSH&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Pour faire court, vous disposerez d'une clef priv&#233;e, &#224; garder secr&#232;te, et d'une clef publique, &#224; fournir au serveur de Framasoft. Nous allons donc g&#233;n&#233;rer ces clefs et envoyer la clef secr&#232;te sur le serveur. La g&#233;n&#233;ration de ces clefs se fait via le &lt;i&gt;Terminal&lt;/i&gt; (sous Mac et Linux) ou le &lt;i&gt;Git Shell&lt;/i&gt; (sous Windows).&lt;/p&gt;
&lt;p&gt;Tout d'abord v&#233;rifier qu'il n'y a pas de clefs d&#233;j&#224; g&#233;n&#233;r&#233;es via&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;cat ~/.ssh/id_rsa.pub&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si vous n'obtenez rien, alors c'est qu'il n'y a pas de clefs. Il vous faut donc les g&#233;n&#233;rer, via&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;ssh-keygen -t rsa -C &#034;email@fournisseur&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;En rempla&#231;ant &lt;code&gt;email@fournisseur&lt;/code&gt; par votre adresse courriel.&lt;/p&gt;
&lt;p&gt;Apr&#232;s le retour ligne, une nouvelle ligne appara&#238;t, commen&#231;ant par &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Enter file in which to save the key&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Faite alors un simple retour ligne, pour prendre la valeur par d&#233;faut.&lt;/p&gt;
&lt;p&gt;Ensuite il est propos&#233; &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Enter passphrase&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Choisissez une &lt;i&gt;phrase&lt;/i&gt; servant &#224; crypter vos clefs. Donc comprenant des espaces. Ne prenez pas une phrase existante&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb3&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Vous pouvez, et m&#234;me devez, prendre quelque chose n'ayant aucun sens comme &#171; (&#8230;)&#034; id=&#034;nh3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt;. Votre ordinateur stockera normalement cette phrase de passe dans votre trousseau d'acc&#232;s. Apr&#232;s votre retour ligne, on vous demande de reconfirmer votre phrase de passe. Faites-le donc.&lt;/p&gt;
&lt;p&gt;Ouf, les clefs sont g&#233;n&#233;r&#233;es&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!&lt;/p&gt;
&lt;p&gt;Il vous rester &#224; fournir la clef publique &#224; Framasoft, on ouvrant le fichier &lt;code&gt;~/.ssh/id_rsa.pub&lt;/code&gt; et en copiant le contenu dans le presse papier. &lt;strong&gt;Attention, il vous faut bien copier le fichier finissant par &lt;code&gt;.pub&lt;/code&gt;, et pas un autre&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Puis sur votre compte Framasoft, vous rendre sur &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Profile Settings&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, puis l'onglet &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;span class=&#034;caps&#034;&gt;SSH&lt;/span&gt; Keys&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, et utiliser le formulaire propos&#233; apr&#232;s &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Add &lt;span class=&#034;caps&#034;&gt;SSH&lt;/span&gt; Keys&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Cr&#233;ation de votre d&#233;p&#244;t distant et mis en relation avec le d&#233;p&#244;t local&lt;/h2&gt;
&lt;p&gt;Il vous faut maintenant cr&#233;er votre d&#233;p&#244;t distant, sur votre compte Framasoft. Sur la page de Framasoft, utilisez le &#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 haut &#224; droite pour cr&#233;er un &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;New Projects&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;p&gt;Dans &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Projet Path&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; mettre le nom de votre d&#233;p&#244;t. Par exemple &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;these&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. N'oubliez pas non plus de choisir la visibilit&#233;&#160;: entre Private (priv&#233;e) / Internal (visible apr&#232;s authentification chez Framasoft) / Public (accessible &#224; tout.es)&lt;/p&gt;
&lt;p&gt;Apr&#232;s validation du formulaire, votre d&#233;p&#244;t distant est vide. Il vous faut donc lier votre d&#233;p&#244;t local au d&#233;p&#244;t distant pour y envoyer les informations. Pour cela, suivre les instructions propos&#233;es par Framasoft sous &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Command line instruction&#160;: existing folder or Git repository&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;p&gt;Donc&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; se rendre en ligne de commande &#224; l'emplacement de votre d&#233;p&#244;t local.&lt;/li&gt;&lt;li&gt; y copier-coller la ligne propos&#233;e par Framasoft commen&#231;ant par &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;git remote add origin&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Ceci permet de lier le d&#233;p&#244;t distant au d&#233;p&#244;t local en appelant le d&#233;p&#244;t distant &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;origin&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Par exemple dans le cas de ma th&#232;se, j'ai mis&#160;:
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;git remote add origin git@git.framasoft.org:maieul/these.git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ce qui signifie que je relie le d&#233;p&#244;t distant situ&#233; &#224; l'adresse &lt;code&gt;git@git.framasoft.org:maieul/these.git&lt;/code&gt; &#224; mon d&#233;p&#244;t local, en donnant comme alias &#224; ce d&#233;p&#244;t distant &lt;code&gt;origin&lt;/code&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Envoyer l'historique sur le serveur distant&lt;/h2&gt;
&lt;p&gt;Au premier envoi de l'historique sur le serveur distant, il vous faut proc&#233;der ainsi&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb4&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Ce qui signifie &#171;&#160;envoyer vers le d&#233;p&#244;t git la branche master&#160;&#187;, en disant (&#8230;)&#034; id=&#034;nh4&#034;&gt;4&lt;/a&gt;]&lt;/span&gt;&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;git push -u origin master&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il se peut que votre ordinateur vous demande &#224; ce moment de frapper la &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;phrase de passe&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; de votre clef &lt;span class=&#034;caps&#034;&gt;SSH&lt;/span&gt;. Il ne devrait le faire qu'une seule fois, l'enregistrant dans son gestionnaire de mot de passe pour les fois suivantes.&lt;/p&gt;
&lt;p&gt;Les envois les fois suivantes peuvent se faire avec juste&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;git push -u origin master&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;R&#233;cup&#233;rer l'historique du serveur distant&lt;/h2&gt;
&lt;p&gt;Supposons maintenant que vous avez un deuxi&#232;me ordinateur. Vous souhaitez r&#233;cup&#233;rer le d&#233;p&#244;t git distant.&lt;/p&gt;
&lt;p&gt;&#201;videmment pour ce faire il vous faut conna&#238;tre l'adresse du d&#233;p&#244;t distant. Rien de bien sorcier&#160;: lorsque vous vous connectez avec votre compte sur &lt;a href=&#034;https://git.framasoft.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;l'interface web de Framasoft&lt;/a&gt;, celui-ci vous liste &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Your projects&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, c'est &#224; dire vos d&#233;p&#244;ts&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb5&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;&#192; l'heure o&#249; j'&#233;cris ces lignes, Framasoft propose 42 d&#233;p&#244;ts par compte. Si (&#8230;)&#034; id=&#034;nh5&#034;&gt;5&lt;/a&gt;]&lt;/span&gt;. Choisissez le d&#233;p&#244;t qui vous int&#233;resse.&lt;/p&gt;
&lt;p&gt;Tout en haut de la page de chaque d&#233;p&#244;t est indiqu&#233; de mani&#232;re tr&#232;s claire son adresse.&lt;/p&gt;
&lt;div class='spip_document_199 spip_document spip_documents spip_document_image spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;55&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='http://geekographie.maieul.net/local/cache-vignettes/L500xH64/adresse-depot-5d9bd.png?1760466889' width='500' height='64' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-199 '&gt;&lt;strong&gt;R&#233;cup&#233;rer l'adresse d'un d&#233;p&#244;t distant chez Framasoft
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Une fois que vous avez copi&#233; l'adresse, Il vous suffit simplement de frapper dans votre terminal&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;git clone adressedudepotdistant&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ceci va r&#233;cup&#233;rer l'ensemble de l'historique du d&#233;p&#244;t distant et le copier en local en un nouveau d&#233;p&#244;t. Ce d&#233;p&#244;t sera automatiquement reli&#233; au d&#233;p&#244;t distant&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb6&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Autrement dit le ne sera pas n&#233;cessaire.&#034; id=&#034;nh6&#034;&gt;6&lt;/a&gt;]&lt;/span&gt;. Vous pourrez donc y envoyer vos modifications de l'historique avec &lt;code&gt;git push&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il ne vous reste donc plus qu'&#224; r&#233;cup&#233;rer l'historique du d&#233;p&#244;t distant dans votre d&#233;p&#244;t local avant chaque session de travail, via&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;git pull&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;Partager les tags&lt;/h2&gt;
&lt;p&gt;Dans mon pr&#233;c&#233;dent article, j'expliquais &lt;a href='http://geekographie.maieul.net/83#tag' class=&#034;spip_in&#034;&gt;comment ajouter des tags pour marquer les grandes &#233;tapes du travail&lt;/a&gt;. Il faut savoir que les tags ne sont pas envoy&#233;s au serveur via &lt;code&gt;git push&lt;/code&gt;. Il vous faut envoyer manuellement les tags via &lt;code&gt;git push --tags&lt;/code&gt;. De m&#234;me pour les r&#233;cup&#233;rer, il faut utiliser &lt;code&gt;git pull --tags&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Un autre article sur le sujet &lt;a href=&#034;https://blog.luthi.be/2018/03/utiliser-git-et-bitbucket-pour-ecrire-un-livre-en-latex-partie-1//&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;par Xavier L&#252;thi&lt;/a&gt;.&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;Ce qui est normal, puisqu'il s'agit d'une entreprise &#224; but lucratif.&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;&#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;S'identifier&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;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb3&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3&#034; class=&#034;spip_note&#034; title=&#034;Notes 3&#034; rev=&#034;appendix&#034;&gt;3&lt;/a&gt;] &lt;/span&gt;Vous pouvez, et m&#234;me devez, prendre quelque chose n'ayant aucun sens comme &#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;Le rat du chat est devenu fou en mangeant des champignons atomiques.&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;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb4&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh4&#034; class=&#034;spip_note&#034; title=&#034;Notes 4&#034; rev=&#034;appendix&#034;&gt;4&lt;/a&gt;] &lt;/span&gt;Ce qui signifie &#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;envoyer vers le d&#233;p&#244;t git la branche master&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 disant que la branch &#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;master&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; local va suivre la branche &#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;master&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; du d&#233;p&#244;t &#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;origin&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;. Une branche correspond &#224; une succession de commit. Il est possible de d'avoir plusieurs branches, mais ce n'est pas la question.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb5&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh5&#034; class=&#034;spip_note&#034; title=&#034;Notes 5&#034; rev=&#034;appendix&#034;&gt;5&lt;/a&gt;] &lt;/span&gt;&#192; l'heure o&#249; j'&#233;cris ces lignes, Framasoft propose 42 d&#233;p&#244;ts par compte. Si vous d&#233;passez cela, il est conseill&#233; de monter son propre serveur d'h&#233;bergement Git.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb6&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh6&#034; class=&#034;spip_note&#034; title=&#034;Notes 6&#034; rev=&#034;appendix&#034;&gt;6&lt;/a&gt;] &lt;/span&gt;Autrement dit le &lt;code&gt;git remote add origin xxx&lt;/code&gt; ne sera pas n&#233;cessaire.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Hook de pre-commit pour fichier .dtx, .sty et autres fichiers de package</title>
		<link>http://geekographie.maieul.net/158</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/158</guid>
		<dc:date>2015-02-21T19:51:12Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Dans un pr&#233;c&#233;dent article, je parlais de mon hook de pr&#233;-commit pour v&#233;rifier l'ajout de de&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;% &#224; la fin de chaque ligne dans un fichier .dtxy ou .sty. J'ai am&#233;lior&#233; ce hook pour lui ajouter d'autres fonctions de v&#233;rifications utiles lorsqu'on cr&#233;e des packages LaTeX. Principe Les fichiers .dtx permettent de documenter un code LaTeX en m&#234;me temps qu'on le saisit. Il n&#233;cessite cependant une syntaxe rigoureuse, et il m'arrive parfois de faire quelques erreurs. Installation Rien ne&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="http://geekographie.maieul.net/Package" rel="directory"&gt;Package&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Dans un pr&#233;c&#233;dent article, je parlais de mon &lt;a href='http://geekographie.maieul.net/148' class=&#034;spip_in&#034;&gt;hook de pr&#233;-commit pour v&#233;rifier l'ajout de de &lt;code&gt;%&lt;/code&gt;&lt;/a&gt; &#224; la fin de chaque ligne dans un fichier &lt;code&gt;.dtxy&lt;/code&gt; ou &lt;code&gt;.sty&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;J'ai am&#233;lior&#233; ce hook pour lui ajouter d'autres fonctions de v&#233;rifications utiles lorsqu'on cr&#233;e des packages LaTeX.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Principe&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#034;http://yvon-henel.fr/texnicien/docs/dtxtut-fr/dtxtut-fr.pdf&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Les fichiers &lt;code&gt;.dtx&lt;/code&gt; permettent de documenter un code LaTeX en m&#234;me temps qu'on le saisit&lt;/a&gt;. Il n&#233;cessite cependant une syntaxe rigoureuse, et il m'arrive parfois de faire quelques erreurs.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Installation&lt;/h2&gt;
&lt;p&gt;Rien ne changer&#160;: t&#233;l&#233;charger le hook, l'installer dans le dossier &lt;code&gt;.git/hook&lt;/code&gt;, le renommer &lt;code&gt;pre-commit&lt;/code&gt;, et faire un &lt;code&gt;chmod +x&lt;/code&gt; dessus.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Fonctionnalit&#233;&lt;/h2&gt;&lt;h3 class=&#034;h3&#034;&gt;Fins de ligne&lt;/h3&gt;
&lt;p&gt;La fonction principale reste, bien s&#251;r&#160;: impossibilit&#233; de commiter si un ligne non vide ne finit pas par un &lt;code&gt;%&lt;/code&gt;, ou si ce &lt;code&gt;%&lt;/code&gt; est pr&#233;c&#233;d&#233; d'un ou plusieurs espaces.&lt;/p&gt;
&lt;h3 class=&#034;h3&#034;&gt;Commande &lt;code&gt;\cs{}&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Impossible de commiter si l'argument d'une commande &lt;code&gt;\cs&lt;/code&gt; commence par un &lt;code&gt;\&lt;/code&gt;&lt;/p&gt;
&lt;h3 class=&#034;h3&#034;&gt;Environnement &lt;code&gt;macro&lt;/code&gt; et &lt;code&gt;macrocode&lt;/code&gt;&lt;/h3&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Impossible de commiter si le d&#233;but ou la fin de l'environnement n'est pas sur une ligne sp&#233;cifique.&lt;/li&gt;&lt;li&gt; V&#233;rification du nombre d'espaces entre le &lt;code&gt;%&lt;code&gt; et le &lt;code&gt;\begin&lt;/code&gt; ou &lt;code&gt;\end&lt;/code&gt;&#160;: 1 pour &lt;code&gt;macro&lt;/code&gt; et 4 pour &lt;code&gt;macrocode&lt;/code&gt;. Impossible de commiter dans le cas contraire.&lt;/li&gt;&lt;li&gt; V&#233;rification des appareillement d'environnement. Attention, on ne v&#233;rifie pas les &#233;ventuelles suppressions de d&#233;but/fin d'environnement. Impossible de v&#233;rifier dans le cas contraire.&lt;/li&gt;&lt;li&gt; V&#233;rifier que le nom de la macro est bien mentionn&#233; apr&#232;s &lt;code&gt;\begin{macro}&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Comme avant, le code est &lt;a href=&#034;https://github.com/maieul/git-hooks/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;versionn&#233; sur Github&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="https://raw.githubusercontent.com/maieul/git-hooks/master/pre-commit-latex" length="8553" type="text/plain" />
		

	</item>
<item xml:lang="fr">
		<title>Un hook de pre-commit pour s'assurer d'ajouter des&#160;% en fin de ligne</title>
		<link>http://geekographie.maieul.net/148</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/148</guid>
		<dc:date>2014-08-10T19:53:08Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Lorsqu'on cr&#233;e une commande LaTeX, il est quasi-obligatoire de mettre 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; &#224; la fin de chaque ligne pour &#233;viter les espaces ind&#233;sirables. Si vous versionnez votre code avec Git, il est possible de v&#233;rifier automatiquement la pr&#233;sence de ces&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;%, gr&#226;ce &#224; un hook de pre-commit. Le hook emp&#234;chant l'ajout de ligne sans ce&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;%. Pourquoi mettre des&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;% en fin de ligne &#224; la fin des commandes&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? En TeX, les fins de lignes sont consid&#233;r&#233;s comme des simples espaces. Ce qui pose probl&#232;me si on fait&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="http://geekographie.maieul.net/Package" rel="directory"&gt;Package&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Lorsqu'on cr&#233;e une commande LaTeX, il est quasi-obligatoire de mettre 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; &#224; la fin de chaque ligne pour &#233;viter les espaces ind&#233;sirables.&lt;/p&gt;
&lt;p&gt;Si vous versionnez votre code avec &lt;a href=&#034;https://fr.wikipedia.org/wiki/Git&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;Git&lt;/a&gt;, il est possible de v&#233;rifier automatiquement la pr&#233;sence de ces&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;%, gr&#226;ce &#224; un &lt;a href=&#034;http://www.git-scm.com/book/fr/Personnalisation-de-Git-Crochets-Git&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;hook de pre-commit&lt;/a&gt;. Le hook emp&#234;chant l'ajout de ligne sans ce&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;%.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Pourquoi mettre des&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;% en fin de ligne &#224; la fin des commandes&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/h2&gt;
&lt;p&gt;En TeX, les fins de lignes sont consid&#233;r&#233;s comme des simples espaces. Ce qui pose probl&#232;me si on fait tenir un commande sur plusieurs lignes.&lt;/p&gt;
&lt;p&gt;Prenons par exemple la commande suivante, relativement simple&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;latex&#034;&gt;&lt;code&gt;\newcommand{\nom}[1]{ \index{#1} \textbf{#1}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si on l'appelle ainsi,&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;latex&#034;&gt;&lt;code&gt;La pens&#233;e de \nom{Tertullien} a chang&#233; au cours des temps.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On constate des espaces ind&#233;sirables avant et apr&#232;s &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Tertullien&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; (soulign&#233; pour les besoins de la d&#233;monstration)&#160;:&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;
La pens&#233;e de _Tertullien_ a chang&#233; au cours des temps.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pour &#233;viter cela, il faut ins&#233;rer un&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;% &#224; la fin de chaque ligne&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;latex&#034;&gt;&lt;code&gt;\newcommand{\nom}[1]{% \index{#1}% \textbf{#1}%
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce qui &#233;viter d'avoir des espaces ind&#233;sirables&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;
La pens&#233;e de Tertullien a chang&#233; au cours des temps.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 class=&#034;h2&#034;&gt;Un hook de pre-commit&lt;/h2&gt;
&lt;p&gt;Un &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;hook&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, au sens Git, est un script, &#233;crit dans un language quelconque (perl, python, bash) qui est ex&#233;cut&#233; lorsque certains actions git ont lieu, dans le cas qui nous int&#233;resse, juste avant un commit.&lt;/p&gt;
&lt;p&gt;Le script peut envoyer des informations sur le Terminal, il peut modifier des fichers, il peut aussi faire &#233;chouer une action de Git, par exemple le commit.&lt;/p&gt;
&lt;p&gt;J'ai donc cr&#233;&#233; un hook qui v&#233;rifie, sur les fichiers de &lt;code&gt;.cls&lt;/code&gt; (d&#233;finition de classe), &lt;code&gt;.sty&lt;/code&gt; (d&#233;finition de package), &lt;code&gt;.dtx&lt;/code&gt; (&lt;a href=&#034;http://mirror.switch.ch/ftp/mirror/tex/help/Catalogue/entries/dtxtut.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;documentation de package et de classe&lt;/a&gt;, &lt;code&gt;.bbx&lt;/code&gt;, &lt;code&gt;.lbx&lt;/code&gt;, &lt;code&gt;.cbx&lt;/code&gt; (styles biblatex), qu'il n'y a pas, lors d'un commit, de lignes modifi&#233;s finissant sans&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;%, &#224; l'exception des lignes vides.&lt;/p&gt;
&lt;p&gt;Le hook ne fonctionne pas sur les &lt;code&gt;.tex&lt;/code&gt; car les fonctions devraient &#234;tre d&#233;finies dans des &lt;code&gt;.sty&lt;/code&gt;, et qu'il ne faudrait pas forcer les&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;% en fin de ligne dans les &lt;code&gt;.tex&lt;/code&gt;, comme le prouve l'exemple suivant&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;latex&#034;&gt;&lt;code&gt;Ce serait une mauvaise%
id&#233;e.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour faire fonctionner le hook&#160;:&lt;/p&gt;
&lt;div class='spip_document_136 spip_document spip_documents spip_document_file spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;60&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href=&#034;https://raw.githubusercontent.com/maieul/git-hooks/master/pre-commit-latex&#034; class=&#034; spip_doc_lien&#034; title='Texte - 8.4 kio' type=&#034;text/plain&#034;&gt;&lt;img src='http://geekographie.maieul.net/local/cache-vignettes/L64xH64/txt-55e11.svg?1772803260' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-136 '&gt;&lt;strong&gt;Hook de pre-commit
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_descriptif crayon document-descriptif-136 '&gt;Derni&#232;re version stable. Licence &lt;span class=&#034;caps&#034;&gt;GPL&lt;/span&gt;&#160;3.
&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;-* le t&#233;l&#233;charger&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Le d&#233;placer dans le dossier invisible &lt;code&gt;.git/hooks&lt;/code&gt; dans le d&#233;p&#244;t git local.&lt;/li&gt;&lt;li&gt; Le renommer &lt;code&gt;pre-commit&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Lui donner les droits d'&#233;xecutions (&lt;code&gt;chmod +x&lt;/code&gt;).&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;C'est tout&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!&lt;/p&gt;
&lt;p&gt;D&#233;sormais, il vous sera impossible de commiter par erreur une ligne ne finissant pas par &lt;code&gt;%&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;&lt;a href=&#034;https://github.com/maieul/git-hooks/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Le code est versionn&#233; sur Github&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Garder un historique de son travail gr&#226;ce &#224; Git</title>
		<link>http://geekographie.maieul.net/83</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/83</guid>
		<dc:date>2012-02-05T14:49:04Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Cet article sort un peu de l'ordinaire. Je ne viens pas y donner des techniques LaTeX, mais expliquer comment garder un historique de son travail lorsqu'on utilise LaTeX. Pour cela, je propose de passer par le logiciel de gestion des versions Git. Versionner, quesaco&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? Un m&#233;moire, ou une th&#232;se, cela &#233;volue en permanence. On fait parfois des retours en arri&#232;re, on souhaite parfois &#233;crire des brouillons que finalement on ne conservera pas etc. Les logiciels de type &lt;span class=&#034;caps&#034;&gt;WYSIWYG&lt;/span&gt; (comme Word&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="http://geekographie.maieul.net/LaTeX" rel="directory"&gt;LaTeX&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Cet article sort un peu de l'ordinaire. Je ne viens pas y donner des techniques LaTeX, mais expliquer comment garder un historique de son travail lorsqu'on utilise LaTeX. Pour cela, je propose de passer par le logiciel de gestion des versions Git.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Versionner, quesaco&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/h2&gt;
&lt;p&gt;Un m&#233;moire, ou une th&#232;se, cela &#233;volue en permanence. On fait parfois des retours en arri&#232;re, on souhaite parfois &#233;crire des brouillons que finalement on ne conservera pas etc.&lt;/p&gt;
&lt;p&gt;Les logiciels de type &lt;span class=&#034;caps&#034;&gt;WYSIWYG&lt;/span&gt; (comme Word et LibreOffice) proposent en g&#233;n&#233;ral des outils permettant d'avoir un historique des modifications. Que faire si on utilise (X&lt;sup class=&#034;typo_exposants&#034;&gt;e&lt;/sup&gt;)LaTeX&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/p&gt;
&lt;p&gt;Les fichiers LaTeX &#233;tant des simples fichiers texte, le plus facile est d'utiliser un syst&#232;me de gestion de version dont se servent les informaticiens. Ces outils permettent en g&#233;n&#233;ral&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; de travailler &#224; plusieurs sur un m&#234;me projets, tout en s'assurant que chacun dispose de la bonne version.&lt;/li&gt;&lt;li&gt; de g&#233;rer les cas o&#249; deux personnes diff&#233;rentes modifient les m&#234;mes morceaux dans deux sens diff&#233;rents.&lt;/li&gt;&lt;li&gt; d'avoir un historique de toutes les modifications, et donc de pouvoir le cas &#233;ch&#233;ant revenir en arri&#232;re.&lt;/li&gt;&lt;li&gt; d'associer un (court) message &#224; chaque modification effectu&#233;e, la r&#233;sumant, et permettant ainsi de (plus ou moins) facilement la retrouver.&lt;/li&gt;&lt;li&gt; de pouvoir indiquer des &#233;tapes marquants, permettant de retrouver facilement l'&#233;tat du projet &#224; un moment donn&#233; (par exemple avant la premi&#232;re soumission au directeur, ou au moment de la d&#233;position etc.)&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Pourquoi versionner son travail&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/h2&gt;
&lt;p&gt;Pour une personne non informaticienne, cela peut para&#238;tre un luxe d'utiliser un tel outil. Pourtant pour un r&#233;dacteur en sciences humaines, choisir de versionner son travail a de nombreux avantages&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; si on h&#233;site sur la modification d'une formulation, on peut l'effectuer tout en ayant la garantie de retrouver ensuite la formulation initiale en cas de volte-face.&lt;/li&gt;&lt;li&gt; le fait d'associer un message &#224; chaque modifications aide &#8212; en tout cas pour ma part &#8212; &#224; d&#233;composer sa r&#233;daction en petites &#233;tapes, &#224; se concentrer sur un point &#224; la fois.&lt;/li&gt;&lt;li&gt; en th&#233;orie, on pourrait combiner un outils de gestions des modifications avec un outils de suivi des t&#226;ches &#224; effectuer (par exemple&#160;: &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;corriger telle partie&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;v&#233;rifier telle r&#233;f&#233;rence&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; etc.)&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Quels outils choisir&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/h2&gt;
&lt;p&gt;Il existe actuellement trois outils majeurs de suivis des version&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;span class=&#034;caps&#034;&gt;SVN&lt;/span&gt;, qui tend &#224; devenir archa&#239;que et manque de souplesse comparativement aux deux autres.&lt;/li&gt;&lt;li&gt; Mercurial, que je ne connais pas.&lt;/li&gt;&lt;li&gt; Git, qui connais un succ&#232;s semble-t-il grandissant, et qui est plus adapt&#233; que &lt;span class=&#034;caps&#034;&gt;SVN&lt;/span&gt; pour&#160;:
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Commencer facilement &#224; g&#233;rer ses versions avec une seule personne.&lt;/li&gt;&lt;li&gt; Tout en pouvant basculer facilement vers un mode de type multi-r&#233;dacteurs.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;C'est donc Git que j'ai choisi de pr&#233;senter dans cet article. La pr&#233;sentation sera succincte, et ne vise qu'&#224; expliquer les bases&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; pour un seul r&#233;dacteur&lt;/li&gt;&lt;li&gt; pour une r&#233;daction de type lin&#233;aire, avec simplement la possibilit&#233; de marquer les jalons, et &#233;ventuellement de faire des retours en arri&#232;re.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour aller plus loin, je conseille l'excellent livre &lt;a href=&#034;https://git-scm.com/book/fr/v2&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ProGit&lt;/a&gt;, qui est sous licence libre&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Il n'existe pas de version fran&#231;aise sous forme PDF. On peut toutefois (&#8230;)&#034; id=&#034;nh2-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Pr&#233;-requis&lt;/h2&gt;
&lt;p&gt;Pour pouvoir utiliser Git, la mani&#232;re la plus efficace est de se servir de la ligne de commande, m&#234;me s'il existe des interfaces graphiques. Rien de bien m&#233;chant toutefois. J'ai expliqu&#233; dans un autre article &lt;a href='http://geekographie.maieul.net/50' class=&#034;spip_in&#034;&gt;comment utiliser LaTeX en ligne de commande&lt;/a&gt;. Ce que j'y ai &#233;crit reste valable pour Git, il faut simplement changer les commandes.&lt;/p&gt;
&lt;p&gt;Il faut bien s&#251;r installer Git, pour cela, il suffit de se rendre sur &lt;a href=&#034;http://git-scm.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;le site officiel&lt;/a&gt; puis de suivre le chemin &#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; correspondant &#224; son syst&#232;me d'exploitation.&lt;/p&gt;
&lt;p&gt;Sous Windows, l'installation ajoute un programme &lt;i&gt;Git Shell&lt;/i&gt;. Il faudra y saisir toutes lignes de commandes.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Notion de bases&lt;/h2&gt;
&lt;p&gt;La notion de base gestion de versions est la notion de &#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;. Gardons ce terme anglais tel quel, puisqu'il correspond &#224; l'une des commandes que vous aurez &#224; frapper dans votre Terminal.&lt;/p&gt;
&lt;p&gt;Faire un commit, c'est indiquer que l'on souhaite enregistrer dans l'historique du travail des modifications effectu&#233;es sur un ou plusieurs fichiers.&lt;/p&gt;
&lt;p&gt;Exemple&#160;: j'ai le fichier contenant la ligne suivante&#160;:&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;
Le petit chat es mort&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;et autres fautes du m&#234;me type. Je proc&#232;de &#224; une correction g&#233;n&#233;rale de l'orthographe. &#192; la fin de cette correction, je souhaite enregistrer mes modifications dans l'historique des modifications. Je fais alors un commit.&lt;/p&gt;
&lt;p&gt;Sommairement un commit contient les donn&#233;es suivantes&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; un identifiant unique qui permet de le distinguer des autres commits.&lt;/li&gt;&lt;li&gt; le nom de la personne qui proc&#232;de au commit.&lt;/li&gt;&lt;li&gt; une date et heure&lt;/li&gt;&lt;li&gt; les modifications apport&#233;es aux fichiers concern&#233;s par le commit&lt;/li&gt;&lt;li&gt; un message r&#233;sumant son contenu.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Dans &lt;span class=&#034;caps&#034;&gt;GIT&lt;/span&gt;, un fichier peut se trouver dans trois &#233;tats diff&#233;rents&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; il a &#233;t&#233; modifi&#233; mais on n'a pas indiqu&#233; &#224; Git qu'il devra faire l'objet d'un commit&#160;: il se trouve dans le le r&#233;pertoire de travail, ou &lt;i&gt;working directory&lt;/i&gt;.&lt;/li&gt;&lt;li&gt; il a &#233;t&#233; modifi&#233; et on a indiqu&#233; qu'il devait faire l'objet du prochain commit&#160;: il se trouve dans la zone d'attente, ou &lt;i&gt;staging area&lt;/i&gt;.&lt;/li&gt;&lt;li&gt; il a &#233;t&#233; commit&#233;, et il est donc pr&#233;sent dans l'historique, ou &lt;i&gt;repository&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&#192; ceci s'ajoutent les fichiers qui ne sont pas encore pris en charge par Git.&lt;/p&gt;
&lt;p&gt;Les commandes de base de Git servent &#224; faire passer d'une zone &#224; l'autre.&lt;/p&gt;
&lt;div class='spip_document_49 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;94&#034; data-legende-lenx=&#034;xx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='http://geekographie.maieul.net/local/cache-vignettes/L500xH460/18333fig01063ec6-86869-29b8e.png?1760449150' width='500' height='460' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-49 '&gt;&lt;strong&gt;Les trois &#233;tats d'un fichiers dans Git
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_descriptif crayon document-descriptif-49 '&gt;Sch&#233;ma par Scott Chacon, sous licence &lt;span class=&#034;caps&#034;&gt;CC&lt;/span&gt;-by-nc-sa 3.0
&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;Param&#232;trage de Git&lt;/h2&gt;
&lt;p&gt;Nous avons dit que chaque commit contenait le nom de la personne qui l'a effectu&#233;. S'il est possible de pr&#233;ciser &#224; chaque fois qui est la personne, il est plus simple de donner un nom par d&#233;faut, en configurant Git une fois pour toutes.&lt;/p&gt;
&lt;p&gt;Vous me direz &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#224; quoi cela sert, puisque je suis le seul &#224; faire des modifications&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;. Je vous r&#233;pondrais qu'un jour, peut-&#234;tre, vous utiliserez Git &#224; plusieurs, alors autant prendre les bonnes habitudes tout de suite&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!&lt;/p&gt;
&lt;p&gt;Donc une fois Git install&#233;, nous allons indiquer&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; l'auteur par d&#233;faut&lt;/li&gt;&lt;li&gt; son courriel&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour cela, il suffit de se rendre dans le Terminal, et frapper (le&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;% repr&#233;sente l'invite de commande)&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='bash'&gt;&lt;code&gt;% git config --global user.name &#034;auteur&#034; % git config --global user.email &#034;email&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;En rempla&#231;ant &#233;videmment &lt;code&gt;auteur&lt;/code&gt; par votre nom, et &lt;code&gt;email&lt;/code&gt; par votre courriel.&lt;/p&gt;
&lt;p&gt;&#192; noter que si vous &#234;tes plusieurs &#224; vous partager l'ordinateur en ayant chacun un compte, ce r&#233;glage ne concerne que votre compte.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Commencer le versionnage d'un projet&lt;/h2&gt;
&lt;p&gt;Ces premiers r&#233;glages effectu&#233;s, nous pouvons maintenant nous attaquer au probl&#232;me du versionnage du m&#233;moire / de la th&#232;se.&lt;/p&gt;
&lt;p&gt;Rendons nous avec le terminal dans le dossier de r&#233;daction du m&#233;moire.&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;% cd chemin_vers_mon_dossier_de_memoire&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis indiquons que nous souhaitons d&#233;sormais versionner les fichiers de ce dossier&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;% git init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cette commande n'est &#224; mettre en &#339;uvre qu'une seule fois.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Versionner son premier fichier&lt;/h2&gt;
&lt;p&gt;Cr&#233;ons notre premier fichier, un fichier &lt;code&gt;.tex&lt;/code&gt; simple, &lt;code&gt;principal.tex&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='tex'&gt;&lt;code&gt;\documentclass[a4paper]{book} \usepackage{fontspec} \usepackage{xunicode} \usepackage{polyglossia} \begin{document} \end{document}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Maintenant frappons dans le terminal&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='bash'&gt;&lt;code&gt;% git status&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cette commande va nous indiquer l'&#233;tat des fichiers&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;# On branch master # # Initial commit # # Untracked files: # (use &#034;git add &lt;file&gt;...&#034; to include in what will be committed) # #	principal.tex&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour le moment, oubliez les lignes 1 &#224; 4. Sachez simplement que ces lignes vous serviront le jour o&#249; vous voudrez cr&#233;er une branche divergente de votre m&#233;moire&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;L'avantage, c'est que Git pourra fabriquer pour vous le stemma codicum.&#034; id=&#034;nh2-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Nous avons l'indication des qu'il existe un fichier &lt;code&gt;principal.tex&lt;/code&gt; qui n'est actuellement pas pris en compte par Git.&lt;/p&gt;
&lt;p&gt;Ajoutons ce fichier dans la liste des fichiers qui vont devoir &#234;tre commit&#233;s&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='bash'&gt;&lt;code&gt;% git add principal.tex&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis effectuons le commit, en mettant comme message &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;mon fichier principal, avec juste les packages minimum&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='bash'&gt;&lt;code&gt;% git commit -m &#034;mon fichier principal, avec juste les packages minimum&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On obtient alors un les lignes suivantes dans le terminal&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;[master (root-commit) e6328ab] mon fichier principal, avec juste les packages minimum 1 files changed, 6 insertions(+), 0 deletions(-) create mode 100644 principal.tex&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ces lignes nous indiquent&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; une version abr&#233;g&#233; de l'identifiant du commit&#160;: &lt;code&gt;e6328ab&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; le message de commit.&lt;/li&gt;&lt;li&gt; le contenu du commit.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Modifier son premier fichier&lt;/h2&gt;
&lt;p&gt;Reprenons notre fichier &lt;code&gt;principal.tex&lt;/code&gt; et ajoutons les informations sur l'auteur et le titre&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='latex'&gt;&lt;code&gt;\documentclass[a4paper]{book} \usepackage{fontspec} \usepackage{xunicode} \usepackage{polyglossia} \author{Moi} \title{Mon m&#233;moire} \begin{document} \maketitle \end{document}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et dans le terminal, regardons ce que nous indique la commande &lt;code&gt;git status&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;# 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 checkout -- &lt;file&gt;...&#034; to discard changes in working directory) # #	modified: principal.tex # no changes added to commit (use &#034;git add&#034; and/or &#034;git commit -a&#034;)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On nous indique gentiment que le fichier &lt;code&gt;principal.tex&lt;/code&gt; n'est pas indiqu&#233; pour &#234;tre commit&#233;. Nous allons donc l'ajouter dans la liste des fichiers &#224; commiter. Mais avant, v&#233;rifions quand m&#234;me les modifications apport&#233;es, avec la commande&#160;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git diff&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;On obtient (avec de la couleur) les lignes suivantes&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;diff --git a/principal.tex b/principal.tex index a61d523..042e384 100644 --- a/principal.tex +++ b/principal.tex @@ -2,5 +2,8 @@ \usepackage{fontspec} \usepackage{xunicode} \usepackage{polyglossia} +\author{Moi} +\title{Mon m&#233;moire} \begin{document} +\maketitle \end{document} \ No newline at end of file&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Passons sur les lignes &#224; 5 qui indique &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;simplement&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; quels sont les fichiers compar&#233;s&#160;: en l'occurence, il s'agit d'une comparaison entre le fichier principal.tex tel qu'il se trouve actuellement et le m&#234;me fichier dans sa version la plus r&#233;cente au sein de l'historique.&lt;/p&gt;
&lt;p&gt;Remarquons simplement que les lignes commen&#231;ant par un &lt;code&gt;+&lt;/code&gt; sont des lignes ajout&#233;es. Les lignes commen&#231;ant par un moins sont celles supprim&#233;es. Et si on modifie une ligne&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? Alors on obtient une ligne &lt;code&gt;-&lt;/code&gt; et une ligne &lt;code&gt;+&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pour cette raison, il est conseill&#233; d'avoir une phrase par ligne dans le fichiers &lt;code&gt;.tex&lt;/code&gt; source, pour voir plus facilement les modifications.&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-3&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Il existe des logiciels de comparaison de versions permettant de contourner (&#8230;)&#034; id=&#034;nh2-3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Bref, maintenant commitons ces diff&#233;rences. D'abord indiquons qu'il faut ajouter le fichier &lt;code&gt;principal.tex&lt;/code&gt;, puis commitons&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;% git add principal.tex % git commit -m &#034;titre et nom de l'auteur&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On comprendra que si chaque commit poss&#232;de un message descriptif rapide, et si on respect correctement cette r&#232;gle, on travaillera sa r&#233;daction par &#233;tape successive, ce qui est en g&#233;n&#233;ral plut&#244;t une saine habitude ...&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Consulter l'historique&lt;/h2&gt;
&lt;p&gt;Il peut &#234;tre utile d'avoir l'historique des commits. Pour ce faire, on utilise la commande&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='bash'&gt;&lt;code&gt;% git log&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Nous obtenons alors&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;commit 5c2b1ee8bcd7e1b6d22c13b2703e978b59d1cc81 Author: maieul &lt;prenom@prenom.net&gt; Date: Sun Feb 5 14:36:59 2012 +0100 titre et nom de l'auteur commit e6328ab55747c5f673345d64147d6ed806e111a0 Author: maieul &lt;prenom@prenom.net&gt; Date: Sun Feb 5 13:30:09 2012 +0100 mon fichier principal, avec juste les packages minimum&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On nous indique &#224; chaque fois&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; l'identifiant unique du commit (par ex &lt;code&gt;5c2b1ee8bcd7e1b6d22c13b2703e978b59d1cc81&lt;/code&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-4&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Si cette identifiant semble avoir un nom impronon&#231;able, c'est parce qu'il (&#8230;)&#034; id=&#034;nh2-4&#034;&gt;4&lt;/a&gt;]&lt;/span&gt;).&lt;/li&gt;&lt;li&gt; son auteur, avec son courriel.&lt;/li&gt;&lt;li&gt; sa date et son heure.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il est possible de passer des options &#224; la commande &lt;code&gt;git log&lt;/code&gt; pour ne s&#233;lectionner les commits que sur certains crit&#232;res (par exemple de dates, ou de fichiers modifi&#233;s)&#160;: je renvoie &#224; ProGit.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Reprendre un fichier tel qu'il &#233;tait &#224; un instant donn&#233;&lt;/h2&gt;
&lt;p&gt;Supposons que pour x raison, je souhaite finalement reprendre le fichier &lt;code&gt;principal.tex&lt;/code&gt; tel qu'il &#233;tait dans l'historique au niveau du commit &lt;code&gt;e6328ab55747c5f673345d64147d6ed806e111a0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il me suffit de faire&#160;:&lt;/p&gt;
&lt;p&gt;&lt;code class='bash'&gt;%git checkout e6328ab55747c5f673345d64147d6ed806e111a0 principal.tex&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;On ne peut le faire que si les fichiers sont dans la m&#234;me &#233;tat que la derni&#232;re version enregistr&#233;e dans l'historique.&lt;/p&gt;
&lt;p&gt;&#192; noter qu'en g&#233;n&#233;ral, on peut se contenter des six premiers caract&#232;res&#160;:&lt;/p&gt;
&lt;p&gt;&lt;code class='bash'&gt;%git checkout e6328a principal.tex&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&#192; ce moment l&#224;, mon fichier &lt;code&gt;principal.tex&lt;/code&gt; est remplac&#233; par sa version du commit e6328a. Je peux d&#232;s lors enregistrer dans l'historique le retour &#224; cette version&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='bash'&gt;&lt;code&gt;% git add principal.tex % git commit -m &#034;en fait, je ne voulais pas de titre : revenons &#224; l'&#233;tat e6328ab55747c5f673345d64147d6ed806e111a0 pour le fichier principal.tex&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;En revanche, supposons que je ne voulais que consulter l'&#233;tat du fichier au commit &lt;code&gt;e6328ab55747c5f673345d64147d6ed806e111a0&lt;/code&gt;, mais ne souhaitais pas y revenir. J'ai effectu&#233; ma consultation, et maintenant j'aimerais retrouver la version la plus &#224; jour.&lt;/p&gt;
&lt;p&gt;La solution est simple&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-5&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;La notion de est un brin complexe&#160;: elle est li&#233;e au travail par branche. (&#8230;)&#034; id=&#034;nh2-5&#034;&gt;5&lt;/a&gt;]&lt;/span&gt;&#160;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;% git checkout master&lt;/code&gt;&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;&lt;a id=&#034;tag&#034;&gt;&lt;/a&gt;Marquer des &#233;tapes&#160;: la notion de &lt;code&gt;tag&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Si la consultation de l'historique est utile, il peut &#234;tre plus simple de retenir automatiquement les grands jalons de votre travail. Par exemple&#160;: tel qu'il est avant que vous le relisiez, tel qu'il est avant que vous ne le confiez &#224; la relecture de vos proches, tel qu'il est avant que vous ne le confiez &#224; le relecture de votre directeur, tel qu'il est au moment o&#249; vous le d&#233;posez pour soutenance.&lt;/p&gt;
&lt;p&gt;Le plus simple pour ce faire est de poser un &lt;code&gt;tag&lt;/code&gt;. Un tag, c'est simplement une &#233;tiquette pos&#233;e sur un commit donn&#233;.&lt;/p&gt;
&lt;p&gt;Supposons que vous &#234;tes arriv&#233; au bout de vos peines, et souhaitez marquer la version que vous allez donner &#224; votre directeur, pour ultime validation.&lt;/p&gt;
&lt;p&gt;Vous poser alors un tag qui poss&#232;de&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; un identifiant&lt;/li&gt;&lt;li&gt; un petit message d'explication&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Apr&#232;s avoir v&#233;rifier via &lt;code&gt;git status&lt;/code&gt; que vous n'avez aucune modification &#224; enregistrer dans l'historique, vous frappez&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;% git tag -a &#034;directeur_dec2011&#034; --amend &#034;version remise au directeur, en d&#233;cembre 2011&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Vous venez ainsi de poser un tag. Vous pouvez continuer &#224; travailler tranquillement. Le jour o&#249; vous souhaiterez obtenir &#224; nouveau la version que vous lui avez remise, il vous suffira de faire&#160;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;% git checkout directeur_dec2011&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Et si vous avez oubli&#233; le nom de votre tag, vous pourriez facilement retrouver la liste des tags, en frappant&#160;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%git tag&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Et m&#234;me obtenir les messages assign&#233;s &#224; chaque tag, en utilisant&#160;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%git tag -n&lt;/code&gt;&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Si j'ai &#233;t&#233; bon, vous savez d&#233;sormais avoir un historique de vos modifications, revenir facilement &#224; un &#233;tat donn&#233;, marquer les principales &#233;tapes du travail. Bravo&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!&lt;/p&gt;
&lt;p&gt;Il y aurait encore beaucoup de chose &#224; dire, par exemple&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; dire &#224; Git de ne pas se pr&#233;occuper de certains fichiers, comme par exemple les &lt;code&gt;.aux&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; comment annuler les modifications d'un commit, sans pour autant revenir &#224; l'&#233;tat ant&#233;rieur &#224; ce commit.&lt;/li&gt;&lt;li&gt; comment corriger un commit que l'on vient d'effectuer.&lt;/li&gt;&lt;li&gt; comment g&#233;rer plusieurs versions du travail en parall&#232;les (branches).&lt;/li&gt;&lt;li&gt; comment partager ses modifications avec d'autes utilisateurs pour un travail collaboratif.&lt;/li&gt;&lt;li&gt; etc.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Si j'ai le courage je ferais des tutoriels sur chacun de ces sujets. Mais d&#233;j&#224; avoir un historique de son travail garanti la possibilit&#233; de revenir en arri&#232;re le cas &#233;ch&#233;ant. Le reste n'est plus qu'affinage&#160;: vous trouverez ais&#233;ment sur internet les outils pour le faire.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Un autre article sur le sujet &lt;a href=&#034;https://blog.luthi.be/2018/03/utiliser-git-et-bitbucket-pour-ecrire-un-livre-en-latex-partie-1//&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;par Xavier L&#252;thi&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb2-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Il n'existe pas de version fran&#231;aise sous forme &lt;span class=&#034;caps&#034;&gt;&lt;span class=&#034;caps&#034;&gt;PDF&lt;/span&gt;&lt;/span&gt;. On peut toutefois fabriquer la sienne en r&#233;cup&#233;rant &lt;a href=&#034;https://github.com/progit/progit/tree/master/fr&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;les sources sur le site Github&lt;/a&gt;. Toutefois la fabrication de ce &lt;span class=&#034;caps&#034;&gt;&lt;span class=&#034;caps&#034;&gt;PDF&lt;/span&gt;&lt;/span&gt; passe par des outils qu'il faut installer sur son ordinateur (en plus de LaTeX). C'est pourquoi je vous propose &lt;a href='http://geekographie.maieul.net/IMG/pdf/progit.fr.pdf' class=&#034;spip_in&#034; type='application/pdf'&gt;une version que je me suis faite pour moi m&#234;me en juillet dernier&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2-2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-2&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;L'avantage, c'est que Git pourra fabriquer pour vous le &lt;i&gt;stemma codicum&lt;/i&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2-3&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-3&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-3&#034; rev=&#034;appendix&#034;&gt;3&lt;/a&gt;] &lt;/span&gt;Il existe &lt;a href=&#034;https://twitter.com/#!/cdlm/status/165806605869391873&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;des logiciels de comparaison de versions&lt;/a&gt; permettant de contourner ce probl&#232;me, mais ceci n&#233;cessiterait sans doute un autre tutoriel, une chose &#224; la fois.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2-4&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-4&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-4&#034; rev=&#034;appendix&#034;&gt;4&lt;/a&gt;] &lt;/span&gt;Si cette identifiant semble avoir un nom impronon&#231;able, c'est parce qu'il s'agit d'une version &#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;r&#233;sum&#233;&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; du commit, qui permet de v&#233;rifier qu'il n'y a pas eu de corruption de la base de donn&#233;e. On appelle cela un &lt;a href=&#034;https://fr.wikipedia.org/wiki/hash&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;hash&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2-5&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-5&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-5&#034; rev=&#034;appendix&#034;&gt;5&lt;/a&gt;] &lt;/span&gt;La notion de &lt;code&gt;master&lt;/code&gt; est un brin complexe&#160;: elle est li&#233;e au travail par branche. Disons simplement que &lt;code&gt;master&lt;/code&gt; d&#233;signe, dans un syst&#232;me avec une seule branche, l'&#233;tat des fichiers &#224; la date la plus r&#233;cente dans l'historique.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		
		<enclosure url="http://geekographie.maieul.net/IMG/pdf/progit.fr.pdf" length="4170194" type="application/pdf" />
		

	</item>



</channel>

</rss>
