<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Exponential Fault &#187; git</title>
	<atom:link href="http://weblog.lo2k.net/tag/git/feed/" rel="self" type="application/rss+xml" />
	<link>http://weblog.lo2k.net</link>
	<description></description>
	<lastBuildDate>Fri, 25 Feb 2011 16:26:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>GIT n&#8217;est pas magique !</title>
		<link>http://weblog.lo2k.net/2009/07/git-nest-pas-magique/</link>
		<comments>http://weblog.lo2k.net/2009/07/git-nest-pas-magique/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 20:47:45 +0000</pubDate>
		<dc:creator>X-Blaster</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[management]]></category>

		<guid isPermaLink="false">http://weblog.lo2k.net/?p=193</guid>
		<description><![CDATA[Après un article qui explique &#8220;pourquoi GIT c&#8217;est mieux que SVN ?&#8220;, j&#8217;ai jugé qu&#8217;il pouvait être intéressant de faire un petit retour sur mon expérience et d&#8217;expliquer les bonnes ou mauvaises pratique autour de ce merveilleux logiciel de versionning. Pourquoi GIT n&#8217;est pas magique ? Certaines personnes pensent que GIT est &#8220;magique&#8221;. Il permet [...]]]></description>
			<content:encoded><![CDATA[<p>Après un article qui explique &#8220;<a href="http://weblog.lo2k.net/2008/11/pourquoi-utiliser-git-plutot-que-svn/">pourquoi GIT c&#8217;est mieux que SVN ?</a>&#8220;, j&#8217;ai jugé qu&#8217;il pouvait être intéressant de faire un petit retour sur mon expérience et d&#8217;expliquer les bonnes ou mauvaises pratique autour de ce merveilleux logiciel de versionning.</p>
<h2>Pourquoi GIT n&#8217;est pas magique ?</h2>
<p>Certaines personnes pensent que GIT est &#8220;magique&#8221;. Il permet de merger mieux que SVN c&#8217;est donc l&#8217;occasion de faire plein de fork ? GIT permet de décentraliser, est-ce une bonne idée de le garder centraliser ? Autant de bonnes questions auquel il est important de répondre.</p>
<p>Comment savoir si vous utilisez mal git ?</p>
<ul>
<li>Vous avez plus de 20 branches en cours de développement sur votre serveur GIT</li>
<li>Votre serveur GIT est centralisé et tout le monde utilise ce même serveur</li>
<li>Tout le monde a le droit de push</li>
<li>Aucune personne n&#8217;est en charge des merges</li>
<li>Vous n&#8217;avez pas l&#8217;habitude de signer.</li>
</ul>
<p>Si vous vous reconnaissez dans un ou plusieurs de ces choix, il faut revoir votre politique de développement <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><span id="more-193"></span></p>
<h2>TROP de fork TUE le fork.</h2>
<p>GIT n&#8217;est pas magique et même si il facilite les merges entre les branches il n&#8217;est pas &#8220;conflict proof&#8221;. Certains conflits vont apparaitre c&#8217;est obligatoire, et ce n&#8217;est pas parce qu&#8217;il facilite les merge qu&#8217;il faut pour autant ne pas prendre des mesures pour les éviter.</p>
<p>Lorsque l&#8217;on décide de développer plusieurs projets en parallèles sur une même base il est bon de définir ce qui va être développé. Il est toujours bon dans une structure d&#8217;avoir une personne qui décide des points clés d&#8217;un projet et si plusieurs points se rejoignent il faut faire en sorte que les équipes n&#8217;effectuent pas le même travail chacun de leur coté ou alors vous risquez irrémédiablement d&#8217;avoir des conflits.</p>
<p>Cela peut paraitre &#8220;trivial&#8221; mais pour autant dans des structures de taille moyenne, il n&#8217;y a pas toujours de personnes dédiés à ce genre de coordination. GIT nous oblige ici à avoir un développement discipliné.</p>
<h2>Une organisation bien défini</h2>
<p>Si vous n&#8217;avez qu&#8217;un seul serveur GIT pour tout centraliser vous avez fait une grosse erreur. Pourquoi ?</p>
<ul>
<li>Si vous avez une équipe ou une personne avec des compétences assez médiocres, comment contrôlerez vous l&#8217;intégration de son développement ?</li>
<li>Quand bien même vous auriez une équipe très compétente, quel est l&#8217;intérêt d&#8217;avoir tout vos commits centralisé sur un même serveur en permanence ? A part avoir beaucoup trop de branches et beaucoup trop de choses à gérer cela n&#8217;est pas très utile. C&#8217;est une mauvaise habitude résultant de l&#8217;utilisation de SVN</li>
</ul>
<p>Intéressons nous à  l&#8217;organisation du noyau Linux. Si je devais la résumer en une seule phrase de Machiavel &#8220;Diviser pour mieux régner&#8221;. Si Linus Torvalds a choisit cette organisation ce n&#8217;est pas pour rien. C&#8217;est un geek et<strong> tout bon geek est fainéant</strong>.</p>
<p>Il fait confiance à un certains nombre de personnes. Il vérifie de manière ponctuel un certain nombre de patch mais si un patch qu&#8217;on lui envoie est signé par 2 ou 3 personnes de confiance il peut l&#8217;intégrer sans trop de vérification au noyau Linux.</p>
<p>Dans une entreprise cette attitude serait similaire a un coordinateur qui irait récupérer une branche git définit comme stable et qui ferait une vérification de cette branche avant son intégration. Si ce coordinateur n&#8217;a jamais eu de soucis avec le responsable du développement de la branche, il peut juste effectuer des vérifications sommaire mais là nous rentrons plus dans une relation de confiance et dans le relationnel entre les personnes de l&#8217;équipe.</p>
<p>Dans une grosse structure on pourrait voir ainsi 1, 2, 3, voir même 4 niveaux de hiérarchie entre le développeur et le &#8220;code keeper&#8221;. Le plus haut niveau n&#8217;a pas a se soucier des problèmes de développement, il a juste a valider la version finale qui sera intégrer dans le GIT. A contrario, le bas niveau n&#8217;a pas à se soucier de l&#8217;integration, il respecte juste un certain nombre de règles et développe son application.</p>
<h2>Et si on pense que cela ne sert à rien ?</h2>
<p>Si il n&#8217;y a aucune validation on peut se retrouver dans des cas dramatiques.</p>
<p>Un merge farfelus d&#8217;une branche en test dans un développement pour ne pas se prendre la tête et faire un raccourcis, des hotfix sur le noyau dans plusieurs branches, aucun suivis des branches upstream ou encore des merges avec une strategy &#8220;-s ours&#8221; sans vérification. <strong>L&#8217;intégration d&#8217;une branche &#8220;MAUDITE&#8221; peut devenir un vrai casse tête voir même impossible.</strong></p>
<p>Au hasard les conséquences peuvent être:</p>
<ul>
<li>De nombreux conflits</li>
<li>L&#8217;intégration de code &#8220;instable&#8221; par merge d&#8217;une branche déjà mergé avec une autre branche instable</li>
<li>Rendre le code moins performant.</li>
</ul>
<p>Bien sûr vous avez pu mettre un certain nombre d&#8217;indicateur comme des tests unitaires, des coverages reports mais il faut dans tout les cas avoir une organisation solide.</p>
<h2>Cas pratique: la traversée du désert</h2>
<p>Prenons un cas pratique que j&#8217;ai déjà eu l&#8217;occasion de voir. Ce cas j&#8217;aime l&#8217;appeler &#8220;la traversée du désert&#8221;.</p>
<p>Prenez un développeur, donnez lui une tâche et laissez le faire son fork. Il revient 3 mois après avec un développement qui a modifié votre noyau de base, qui n&#8217;a pas suivis les évolutions de l&#8217;upstream et qui soit dit en passant a sûrement réinventé la roue carrée. Résultat ? 3 mois de travail de perdu. Son code peut être considéré comme inutilisable.</p>
<p>L&#8217;image de traversée du désert montre bien l&#8217;image de ce développeur qui part seul sans radio avec une mission sommairement posé sur un bout de papier. Son chef de projet confiant pense que GIT arrivera comme un grand a merger ce qu&#8217;il &#8220;dénichera&#8221;. Il se trompe, cela ne changera rien.</p>
<h2>Si vous deviez retenir que quelques regles ?</h2>
<blockquote><p>With great power comes great responsibility</p></blockquote>
<ol>
<li>Définissez une organisation.</li>
<li>Formez les personnes responsables aux différents enjeux.</li>
<li>Instaurez un climat de confiance entre les différents niveaux de votre pyramide.</li>
<li>Ne donnez pas des &#8220;pouvoirs&#8221; à des gens qui ne les maitrisent pas.</li>
<li>Définissez des règles pour les modifications de parties communes a tout les projets.</li>
</ol>
<p>Ces règles pourraient être tout aussi utile pour un développement sous SVN mais le fait de faire des &#8220;fork&#8221; accentuent ces problèmes car les développeurs peuvent vite être isolé et leurs erreurs peuvent être detecté moins vite et avoir un plus gros impact sur le long terme.</p>
<h2>Pour conclure</h2>
<p>GIT est un outil puissant avec une grande liberté d&#8217;action. Il peut vous apportez beaucoup mais il faut bien comprendre son fonctionnement. Autant pour l&#8217;utilisateur néophyte qui fait un fork de Ruby on Rails pour rajouter une fonction, son utilisation est simple; autant pour la gestion de très gros projet, son utilisation peut être contre productive si vous n&#8217;avez pas une organisation bien structurée.</p>
<p>Si vous prenez la décision de changer de logiciel de versionning est d&#8217;adopter une méthode plus agile, plus souple, retenez bien cela ne se traduit pas que dans les logiciels que vous utilisez mais aussi dans l&#8217;utilisation que vous en faite.</p>
<p>Les mentalités sont encore habitués a un système de versioning centralisé avec un impact direct sur le développement. Avec GIT vous entrez dans des méthodes de développement sur le long terme où <strong>il faut savoir anticiper les problèmes avant de les laisser germer.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.lo2k.net/2009/07/git-nest-pas-magique/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pourquoi utiliser GIT plutôt que SVN ?</title>
		<link>http://weblog.lo2k.net/2008/11/pourquoi-utiliser-git-plutot-que-svn/</link>
		<comments>http://weblog.lo2k.net/2008/11/pourquoi-utiliser-git-plutot-que-svn/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 12:34:44 +0000</pubDate>
		<dc:creator>X-Blaster</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[organisation]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://weblog.lo2k.net/2008/11/26/pourquoi-utiliser-git-plutot-que-svn/</guid>
		<description><![CDATA[VITE URGENT ! Notre client &#8220;xxx&#8221; veut à tout pris une integration avec gloubiboulga maintenant. Cela ne PEUT pas attendre. Cas de figure avec SVN Je pense que vous avez déjà tous eu le cas d&#8217;un client qui a une demande super urgente. La gestion de ce genre de cas est très difficile car: L&#8217;application [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>VITE URGENT ! Notre client &#8220;xxx&#8221; veut à tout pris une integration avec gloubiboulga maintenant. Cela ne PEUT pas attendre.</p></blockquote>
<h2>Cas de figure avec SVN</h2>
<p>Je pense que vous avez déjà tous eu le cas d&#8217;un client qui a une demande super urgente.</p>
<p>La gestion de ce genre de cas est très difficile car:</p>
<ol>
<li>L&#8217;application doit rester stable.</li>
<li>Les developpeurs ne DOIVENT pas gérer plusieurs version à la fois.</li>
</ol>
<p>Concrètement cela va se résumer à la création d&#8217;une branche, sûrement un &#8220;branches/gloubiboulga&#8221;.  Mais voila ! Il doit partir en production mais il n&#8217;a pas été testé dans tout les cas car le client sur lequel l&#8217;appli va être testé n&#8217;utilise pas toutes les fonctionnalités de votre logiciel et dans l&#8217;état, IL MARCHE.  Il peut partir en production mais en aucun cas ne peut être mergé avec le &#8220;trunk&#8221;car cela pourrait causer un désastre sur le reste de l&#8217;appli.  3 versions se succedent et votre client revient en vous demandant &#8220;pourquoi ma version n&#8217;évolue plus ?&#8221;. <span id="more-76"></span></p>
<h2>SVN donne de mauvaises habitudes</h2>
<p>Si vous êtes un utilisateur de SVN vous devez trouver la gestion de branch assez &#8220;utopique&#8221;. On a souvent en tête <strong>le développeur un peu foufou qui part s&#8217;exiler 3 semaines dans un chalet</strong> pour faire un fork complet qu&#8217;il faudra reintegrer à l&#8217;appli.  Le reste du temps, tout le monde développe dans &#8220;trunk&#8221; et trouve cela parfaitement normal. Pour reprendre une phrase que j&#8217;ai déjà souvent entendu &#8220;ça marche, pourquoi changer ?&#8221;.</p>
<blockquote><p>Et si maintenant je veux une version stable, dans la seconde, je fais comment ?</p></blockquote>
<p>Le soucis est maintenant, avec cette méthode de développement, si je veux une version stable instantanément je fais comment ?  Vous allez me ressortir une vieille version stabilisé il y a 2 mois. Vous êtes sûr qu&#8217;elle marche, elle a était testé par 30 personnes de manières intensives pendant 2 semaines. Pourtant à l&#8217;heure actuel, vous pourriez peut être faire une version stable sauf que &#8220;Roger&#8221; doit finaliser un support de fichier quelconque et le soucis c&#8217;est que lui aussi travaille dans &#8220;trunk&#8221;.</p>
<h2>Pourquoi on a prit de mauvaises habitudes ?</h2>
<p>Tout simplement parce que SVN ne permet pas de faire simplement <strong>un merge dans les deux sens</strong>.</p>
<p>Si chacun travaille dans une branche dans SVN</p>
<ol>
<li>Les merges peuvent devenir un cauchemard</li>
<li>Si Roger commit une amélioration, Patrick n&#8217;en beneficiera pas dans sa branche sans faire un merge qui pourrait devenir un casse tête.</li>
</ol>
<p>Alors je vais vous poser deux questions:</p>
<ol>
<li>Et si &#8220;trunk&#8221; devenait stable ?</li>
<li>Et si tout le monde crée une branche par amélioration à apporter ?</li>
</ol>
<h2>Maintenant on change la méthode de travail</h2>
<p><a href="http://weblog.lo2k.net/wp-content/uploads/2008/11/state-machine-diagram1.gif" title="state-machine-diagram1.gif"><img src="http://weblog.lo2k.net/wp-content/uploads/2008/11/state-machine-diagram1.thumbnail.gif" alt="state-machine-diagram1.gif" /></a> Voici à présent comment sous GIT le développement peut s&#8217;articuler. Une branche est crée pour chaque &#8220;tache&#8221;. Les taches mineures pouvant bien évidemment être dans une même branche.</p>
<p>Il y a 3 principal zones</p>
<ol>
<li>Les branches (en developpement)</li>
<li>La branche &#8220;Testing&#8221;</li>
<li>La branche &#8220;Stable&#8221;</li>
</ol>
<p>On garantit ici la stabilité par 2 tests.</p>
<p>Le deuxième test est justifié sur de possibles interactions entre taches qui pourraient faire apparaitre des bugs qui ne seraient pas apparu pendant le test du module a la fin de la période de développement.</p>
<p>On se retrouve ici avec une architecture de développement proche des packages debian avec plusieurs niveaux de &#8220;stabilité&#8221;.</p>
<h2>GIT serait-il magique ?</h2>
<p>GIT permet une approche de développement totalement différente et permet plus facilement a mon sens de &#8220;stabiliser&#8221; une version d&#8217;une application si on utilise ce type d&#8217;architecture. Cependant il y plusieurs autre élément a prendre en compte.</p>
<ul>
<li>Une architecture de ce type est inutile pour des petits projects avec juste 2 ou 3 personnes</li>
<li>GIT est un outil qui propose une grande liberté. Un merge avec par exemple &#8220;-s ours&#8221; pourrait causer des catastrophes desastreuses, il faut donc avoir conscience de ce que l&#8217;on fait.</li>
</ul>
<p>Pour plus d&#8217;info sur git je vous conseille de voir comment fonctionne la fonction &#8220;<a href="http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html">rebase</a>&#8221; de GIT et de consulter mais bookmarks associé sur &#8220;<a href="http://delicious.com/xblaster/git">del.icio.us</a>&#8221;<br />
C&#8217;est mon premier post &#8220;serieux&#8221; sur mon blog&#8230; donc n&#8217;hesitez pas a donner des critiques <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.lo2k.net/2008/11/pourquoi-utiliser-git-plutot-que-svn/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

