<?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>blog.freelan.org &#187; &#187; git</title>
	<atom:link href="https://blog.freelan.org/tag/git/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.freelan.org</link>
	<description>De l&#039;informatique, des octets et des poneys.</description>
	<lastBuildDate>Fri, 04 Apr 2014 17:34:59 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Installation d&#8217;un serveur Git avec Apache sous Linux</title>
		<link>https://blog.freelan.org/2011/09/02/installation-dun-serveur-git-avec-apache-sous-linux/</link>
		<comments>https://blog.freelan.org/2011/09/02/installation-dun-serveur-git-avec-apache-sous-linux/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 18:28:26 +0000</pubDate>
		<dc:creator><![CDATA[Julien Kauffmann]]></dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[dav]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[serveur]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://blog.freelan.org/?p=386</guid>
		<description><![CDATA[Cet article a pour but de vous montrer comment mettre en place rapidement et simplement un serveur Git sous Apache, avec un ou plusieurs dépôts, et une authentification par identifiant/mot de passe.]]></description>
				<content:encoded><![CDATA[<p>Cet article a pour but de vous montrer comment mettre en place rapidement et simplement un serveur Git sous Apache, avec un ou plusieurs dépôts, et une authentification par identifiant/mot de passe.</p>
<h1>Démarrage</h1>
<p>Nous partirons du principe que vous avec un Linux moderne (j&#8217;utilise Debian, mais la démarche devrait être similaire sur n&#8217;importe quelle autre distribution).</p>
<p>Installez tout d&#8217;abord les paquets nécessaires :</p><pre class="crayon-plain-tag">$ apt-get install git-core apache2</pre><p>Vérifiez ensuite que git est installé :</p><pre class="crayon-plain-tag">$ git --version
git version 1.5.6.5</pre><p>Si vous obtenez une sortie similaire, c&#8217;est que Git est bien installé.</p>
<h1>Création du dépôt</h1>
<p>Nous allons commencer par attribuer un répertoire à nos futurs dépôts Git. J&#8217;ai personnellement choisi &#8220;<code>/home/git</code>&#8221; mais libre à vous de choisir autre chose. Notez simplement ce chemin, car nous allons y faire référence quelques fois dans les prochaines étapes.</p>
<p>Tapez les commandes suivantes :</p><pre class="crayon-plain-tag">$ mkdir -p /home/git/repositories
$ chown -R www-data: /home/git</pre><p>Où <code>www-data</code> est le nom du user sous lequel tourne le démon apache.</p>
<p>Nous placerons tous les dépôts Git dans le répertoire <code>/home/git/repositories</code>. Dans notre exemple, nous créons un dépôt nommé &#8220;<code>depot.git</code>&#8221; :</p><pre class="crayon-plain-tag">$ cd /home/git/repositories
$ mkdir depot.git
$ cd depot.git
$ git init --bare
$ git update-server-info</pre><p>La commande &#8220;<code>git init --bare</code>&#8221; créé un dépôt Git &#8220;bare&#8221;, c&#8217;est à dire un dépôt qui ne possède pas de copie de travail : c&#8217;est un dépôt de &#8220;stockage&#8221; uniquement; vous n&#8217;y ferez jamais de commit mais seulement des &#8220;push&#8221; ou des &#8220;pull&#8221;.</p>
<p>La commande &#8220;<code>git update-server-info</code>&#8221; met à jour les données du serveur dans le dépôt, pour lui permettre d&#8217;être accédé à distance.</p>
<p>Vous devrez répéter cette dernière étape pour chaque dépôt que vous souhaiterez créer. Notez que vous pouvez également créer une arborescence de répertoires pour organiser plus finement les dépôts.</p>
<h1>Paramétrage d&#8217;Apache</h1>
<p>Nous devons ensuite informer Apache de la présence de nos dépôts Git. Pour ce faire, nous créons un fichier nommé &#8220;<code>git</code>&#8221; dans le répertoire &#8220;<code>/etc/apache2/sites-available</code>&#8221; qui contient les paramètres suivants :</p><pre class="crayon-plain-tag">Alias /git/ &quot;/home/git/repositories/&quot;

&lt;Directory /home/git/repositories&gt;
        DAV on
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
        AuthType Basic
        AuthName &quot;Git&quot;
        AuthUserFile /home/git/passwd
        Require valid-user
&lt;/Directory&gt;</pre><p>Nous définissons une authentification de type &#8220;identifiant/mot de passe&#8221; mais libre à vous de choisir une autre méthode d&#8217;authentification.</p>
<p>Nous supposons ici que le serveur apache possède déjà au moins un &#8220;virtual host&#8221;. Si vous souhaitez par exemple limiter l&#8217;accès à un &#8220;virtual host&#8221; en particulier (utile dans le cas où l&#8217;on souhaite forcer le passage en <code>HTTPS</code> par exemple), il suffit d&#8217;imbriquer le code ci-dessus dans la déclaration de ce &#8220;virtual host&#8221;.</p>
<p>Lorsqu&#8217;une personne tentera d&#8217;accéder au sous répertoire &#8220;<code>/git/</code>&#8221; de notre serveur web, elle devra saisir un identifiant et un mot de passe ayant été renseigné dans le fichier &#8220;<code>/home/git/passwd</code>&#8220;.</p>
<p>Créons maintenant ce fichier grâce à la commande suivante :</p><pre class="crayon-plain-tag">$ htpasswd -c /home/git/passwd &lt;login utilisateur&gt;</pre><p>Le programme vous invite à saisir un mot de passe pour votre utilisateur. Créez autant d&#8217;utilisateurs que vous le souhaitez à l&#8217;aide de la même commande (omettez le paramètre &#8220;<code>-c</code>&#8221; lors des fois suivantes).</p>
<p>Vérifiez que l&#8217;utilisateur <code>www-data</code> ait accès à ce fichier, uniquement en lecture.</p>
<p>Vous n&#8217;avez plus qu&#8217;à activer le site, les modules <code>dav</code> et <code>dav_fs</code> puis à redémarrer apache pour mettre en ligne le dépôt :</p><pre class="crayon-plain-tag">$ a2ensite git
$ a2enmod dav
$ a2enmod dav_fs
$ /etc/init.d/apache2 restart</pre><p>Le dépôt devrait désormais, être accessible.</p>
<h1>Un petit test pour la route</h1>
<p>Testons l&#8217;accès au dépôt depuis un autre poste sur le réseau. Vous pouvez bien évidemment utiliser un poste Windows ou Linux, graphique ou en ligne de commande.</p>
<p>Pour la simplicité de l&#8217;exemple (et parce que j&#8217;adore ça), nous utiliserons la ligne de commande :</p><pre class="crayon-plain-tag">$ git clone http://notre_serveur/git/depot.git</pre><p>Cette commande devrait réussir et créer un répertoire nommé &#8220;<code>depot</code>&#8221; dans le répertoire courant.</p>
<p>Ignorez l&#8217;avertissement qui dit que le dépôt est vide : cela est tout à fait normal.</p>
<p>Remarque : si vous avez choisi d&#8217;héberger votre dépôt en HTTPS, git refusera peut-être de s&#8217;y connecter si votre certificat n&#8217;est pas signé par une autorité de certification reconnue. Vous pouvez définir la variable d&#8217;environnement &#8220;<code>GIT_SSL_NO_VERIFY=1</code>&#8221; pour ignorer l&#8217;erreur <strong>temporairement</strong>. Ne vous servez évidemment pas de cette variable comme solution <strong>à long terme</strong> !</p>
<h1>Conclusion</h1>
<p>La mise en place d&#8217;un serveur Git accessible sous Apache est donc plutôt simple. Notre configuration ici est minimale et pourrait encore être améliorée, notamment en permettant une affectation des droits plus précise pour les différents dépôts au sein d&#8217;Apache.</p>
<p>Vos recherches sur l&#8217;Internet vous auront peut-être conduit à d&#8217;autres solutions, utilisant gitosis ou encore ssh. Ces approches proposent d&#8217;autres modes d&#8217;authentification (par certificat ou en ssh avec un compte sur le système) qui peuvent être très intéressantes mais je n&#8217;ai personnellement pas réussi à les faire fonctionner correctement pour l&#8217;instant. Si vous avez des ressources à partager à ce sujet, n&#8217;hésitez pas à me les transmettre <img src="https://blog.freelan.org/wp-includes/images/smilies/icon_biggrin.gif" alt=":D" class="wp-smiley" /></p>
<p>J&#8217;espère en tout cas que cet article vous aura été utile, et comme d&#8217;habitude, n&#8217;hésitez pas à me faire part de vos commentaires ! <img src="https://blog.freelan.org/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss>https://blog.freelan.org/2011/09/02/installation-dun-serveur-git-avec-apache-sous-linux/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Quelques astuces Git</title>
		<link>https://blog.freelan.org/2011/09/01/quelques-astuces-git/</link>
		<comments>https://blog.freelan.org/2011/09/01/quelques-astuces-git/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 09:21:23 +0000</pubDate>
		<dc:creator><![CDATA[Julien Kauffmann]]></dc:creator>
				<category><![CDATA[Astuces]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[astuces]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://blog.freelan.org/?p=372</guid>
		<description><![CDATA[Ce petit article rapide a pour but de me servir de mémo pour quelques astuces Git que j'ai découvertes récemment et qui serviront peut-être à d'autres personnes.]]></description>
				<content:encoded><![CDATA[<p>Ce petit article rapide a pour but de me servir de mémo pour quelques astuces Git que j&#8217;ai découvertes récemment et qui serviront peut-être à d&#8217;autres personnes.</p>
<h1>Supprimer tous les fichiers non-versionnés</h1>
<p>J&#8217;ai pris l&#8217;habitude dans mes projets (surtout ceux en C++) de faire un &#8220;<code>scons -c</code>&#8221; de temps en temps pour supprimer les fichiers issus de la compilation. Cependant, cette commande ne supprime évidemment pas tous les autres fichiers, eux-aussi générés mais qui proviennent d&#8217;autre part (par exemple le &#8220;<code>.sconsign.dblite</code>&#8221; généré par SCons).</p>
<p>Si votre projet utilise Git, vous pouvez aussi faire :</p><pre class="crayon-plain-tag">git clean</pre><p>Qui supprime tous les fichiers non-versionnés du dépôt.</p>
<p>Notez que par défaut, la configuration de Git prévient l&#8217;utilisation de &#8220;<code>git clean</code>&#8220;, en obligeant la spécification du paramètre &#8220;<code>-f</code>&#8220;.</p>
<p>Vous devrez donc probablement faire :</p><pre class="crayon-plain-tag">git clean -f</pre><p>Pour que ça fonctionne.</p>
<p>Pour ma part, j&#8217;ai créé l&#8217;alias suivant :</p>
<p></p><pre class="crayon-plain-tag">git config --global alias.cl 'clean -f -x -d'</pre><p></p>
<p>Qui me supprime du dépôt tous les fichiers non-versionnés, ignorés et les répertoires vides.</p>
<h1>Ajouter tous les fichiers non-versionnés au .gitignore</h1>
<p>Ayant récemment du travailler sur un projet automake/autoconf, j&#8217;ai été confronté au problème suivant :</p>
<p>automake/autoconf génèrent tout un tas de fichiers qui ne doivent pas être versionnés, et qui ont donc tout intérêt à être ignorés.</p>
<p>La commande git status m&#8217;affichait quelque-chose de ce genre :</p><pre class="crayon-plain-tag"># On branch master
# Untracked files:

# &nbsp; (use &quot;git add &amp;lt;file&amp;gt;...&quot; to include in what will be committed)
#
# &nbsp; &nbsp; &nbsp; Makefile.global
# &nbsp; &nbsp; &nbsp; acinclude.m4
# &nbsp; &nbsp; &nbsp; aclocal.m4
#       autom4te.cache/
#       build/
#       config.guess
#       config.h.in
#       config.sub
#       configure
#       configure.in
#       install-sh
#       ltmain.sh
#       missing
#       mkinstalldirs
#       run-tests.php
nothing added to commit but untracked files present (use &quot;git add&quot; to track)</pre><p>Très informatif, certes, mais peu exploitable. Et je n&#8217;avais pas envie de jouer du parseur pour traiter une liste de quelques fichiers.</p>
<p>Notez que dans ce cas, vous pouvez simplement utiliser :</p><pre class="crayon-plain-tag">git ls-files -o &amp;gt; .gitignore</pre><p>Qui va ajouter dans le fichier .gitignore tous les fichiers non-versionnés <img src="https://blog.freelan.org/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Je vous invite par ailleurs à regarder l&#8217;aide de la commande git ls-files pour voir toutes les options d&#8217;affichage qu&#8217;elle propose : une vraie mine d&#8217;or !</p>
<h1>Mais encore&#8230;</h1>
<p>N&#8217;hésitez pas à commenter si avez vous aussi des astuces à partager. Je me ferai une joie de mettre à jour cet article !</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.freelan.org/2011/09/01/quelques-astuces-git/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Découverte de Git sous Windows</title>
		<link>https://blog.freelan.org/2011/02/02/decouverte-de-git-sous-windows/</link>
		<comments>https://blog.freelan.org/2011/02/02/decouverte-de-git-sous-windows/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 17:41:36 +0000</pubDate>
		<dc:creator><![CDATA[Julien Kauffmann]]></dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Logiciels]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://blog.freelan.org/?p=222</guid>
		<description><![CDATA[J'ai commencé à entendre parler de Git il y a quelques temps déjà mais je n'avais jamais eu l'occasion de vraiment travailler avec. Pour moi, son seul intérêt était qu'il était distribué, mais sans comprendre exactement ce que ça impliquait.

Aujourd'hui les choses ont changé et j'ai, pour mon plus grand bonheur découvert un outil incroyablement puissant et efficace. Git n'est pas simplement un autre gestionnaire de sources, c'est une nouvelle façon de penser le développement.

Dans cet article, nous allons présenter Git en comparaison avec d'autres gestionnaires de sources plus "classiques" puis expliquer son installation sous Windows.]]></description>
				<content:encoded><![CDATA[<p>J&#8217;ai commencé à entendre parler de Git il y a quelques temps déjà mais je n&#8217;avais jamais eu l&#8217;occasion de vraiment travailler avec. Pour moi, son seul intérêt était qu&#8217;il était distribué, mais sans comprendre exactement ce que ça impliquait.  Aujourd&#8217;hui les choses ont changé et j&#8217;ai, pour mon plus grand bonheur découvert un outil incroyablement puissant et efficace. À mon sens, git n&#8217;est pas simplement un autre gestionnaire de sources, c&#8217;est une nouvelle façon de penser le développement.  Dans cet article, nous allons <strong>brièvement</strong> présenter Git en comparaison avec d&#8217;autres gestionnaires de sources plus &#8220;classiques&#8221; puis expliquer son <strong>installation sous Windows</strong>.</p>
<h1>Présentation</h1>
<p>Il existe de très nombreuses ressources sur l&#8217;Internet (mais pas que) qui présentent <a href="http://git-scm.com/">Git</a> de façon très complète. L&#8217;objectif de cet article n&#8217;est pas de faire de vous un expert Git en quelques pages mais simplement de vous présenter l&#8217;outil et de, j&#8217;espère, vous donner l&#8217;envie de l&#8217;utiliser.  si vous connaissez déjà suffisamment Git, vous pouvez sauter la section suivante et directement vous rendre à la partie &#8220;Installation sous Windows&#8221;.</p>
<h2>Un gestionnaire de sources</h2>
<p>Git est un <strong>gestionnaire de sources</strong>, comme <a href="http://subversion.apache.org/">Subversion (SVN)</a>, <a href="http://cvs.nongnu.org/">CVS</a> ou encore <a href="http://msdn.microsoft.com/fr-fr/library/3h0544kx(v=vs.80).aspx">Visual Source Safe (VSS)</a>. Un outil qui assure principalement les rôles suivants :</p>
<ul>
<li>Il permet de stocker différentes versions du code source.</li>
<li>Il permet un travail collaboratif en facilitant la synchronisation entre différents développeurs.</li>
<li>Il permet de savoir qui est à l&#8217;origine d&#8217;une modification</li>
</ul>
<p>Les trois derniers outils que j&#8217;ai cités ont en commun leur <strong>architecture centralisée</strong> : tous les développeurs synchronisent leurs fichiers de code source auprès d&#8217;un <strong>dépôt central</strong>. Cette approche, très simple à comprendre est souvent plébiscitée par les entreprises, pour différentes raisons :</p>
<ul>
<li>L&#8217;administration d&#8217;un dépôt central est plutôt simple : on peut régler finement et individuellement les droits d&#8217;accès.</li>
<li>Tout le monde comprend la notion de &#8220;publier&#8221; ses sources dans un dépôt central.</li>
<li>En entreprise, en général, les liaisons réseaux sont fiables et robustes; l&#8217;accès 24H/24 au dépôt est quasi-garanti.</li>
<li>Les clients ne disposent que du code source sur lequel ils travaillent actuellement; l&#8217;historique reste, lui, dans le dépôt.</li>
</ul>
<p>Git se distingue principalement par son <strong>architecture distribuée</strong>. Avec Git, il n&#8217;y a pas de dépôt central, principal, ou autre : chaque dépôt Git contient tout l&#8217;historique du dépôt, de façon autonome. Il n&#8217;y a pas d&#8217;entité supérieure. Les dépôts peuvent communiquer entre eux selon des règles très simples.  Ses avantages principaux sont les suivants :</p>
<ul>
<li>Le dépôt, puisque local et autonome, est <strong>toujours accessible</strong> et extrêmement rapide, même lorsque déconnecté du réseau.</li>
<li>Git ne stocke pas les fichiers, mais <strong>les différences</strong> entre les fichiers : ce principe lui permet de disposer d&#8217;un des mécanismes de <strong>fusion</strong> (ou &#8220;merge&#8221;) les plus efficaces.</li>
<li>Contrôle total sur le dépôt : on ne dépend plus d&#8217;une entité externe. Avec une solution centralisée, si le dépôt nous lâche, adieu l&#8217;historique.</li>
<li>Un système de branchage extrêmement efficace.</li>
</ul>
<p><em>Note : Il n&#8217;y <strong>aucun mal</strong> à utiliser un gestionnaire de sources centralisé; c&#8217;est d&#8217;ailleurs dans bien des cas la solution la plus adaptée. Cependant, puisque cet article parle essentiellement de Git, nous allons nous concentrer sur des cas où l&#8217;utilisation de Git semble plus opportune.</em> Vous trouverez <a href="http://en.wikipedia.org/wiki/Git_(software)">ici</a> un historique plus précis de git et des raisons de sa création.</p>
<h2>Avant de commencer</h2>
<p>Si vous êtes déjà habité à utiliser un gestionnaire de sources &#8220;classique&#8221;, avant de continuer prenez quelques minutes pour vous rappeler de leur fonctionnement puis <strong>oubliez tout !</strong> En tout cas temporairement : l&#8217;utilisation de Git est drastiquement différente et lui appliquer la logique d&#8217;un gestionnaire de source centralisé n&#8217;aurait <strong>aucun sens</strong>.  Pour ma part, je suis habitué à utiliser SVN et il m&#8217;a fallu une certaine période d&#8217;adaptation pour comprendre que son fonctionnement était plus différent qu&#8217;il n&#8217;y paraissait.</p>
<p><em>Note : Bien que différents, il est tout à fait possible d&#8217;utiliser un dépôt SVN avec la ligne de commande git, grace à &#8220;git svn&#8221; qui s&#8217;avère être un moyen très simple de découvrir git sans changer ses dépôts existants. Je l&#8217;utilise depuis plusieurs semaines maintenant et j&#8217;en suis vraiment très satisfait.</em></p>
<h2>Concepts</h2>
<p>Chaque dépôt Git conserve un historique de tous les <strong>changements</strong> (ou &#8220;commits&#8221;) depuis sa création, potentiellement au sein de plusieurs <strong>branches</strong>.  Au sein d&#8217;un dépôt, on ne peut travailler <strong>à la fois</strong> que dans une seule branche et sur un seul commit. Lorsqu&#8217;on a effectué des changements au sein d&#8217;une branche, on peut librement les enregistrer à la suite de la branche (on parle de faire un &#8220;commit&#8221;) et continuer (éventuellement en allant travailler dans une autre branche).  Il est par la suite possible de fusionner (faire un &#8220;merge&#8221;) de plusieurs branches pour répercuter les changements de l&#8217;une dans l&#8217;autre.  La philosophie de Git, c&#8217;est de faire des commits très souvent, même (et surtout) pour de petites modifications. Plus vous &#8220;commiterez&#8221; souvent, plus il sera facile pour Git de fusionner vos changements avec ceux des autres.</p>
<h1>Installation sous Windows</h1>
<p>J&#8217;ai longtemps travaillé avec Subversion (SVN) sous Windows en utilisant <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>. Cet outil graphique est plutôt bien pensé et m&#8217;a toujours satisfait. En voulant essayer git, je me suis donc naturellement porté vers <a href="http://code.google.com/p/tortoisegit/">TortoiseGIT</a> mais je dois avouer que j&#8217;ai été déçu. Je pense que les gens derrière TortoiseGIT ont fait un travail remarquable et ils continuent d&#8217;améliorer le logiciel, mais à l&#8217;heure actuelle l&#8217;outil me paraît plus contraignant à utiliser que sa version classique en <strong>ligne de commande</strong> (comme sous Linux).  C&#8217;est donc sur cette dernière que va porter l&#8217;installation.</p>
<h2>Téléchargements</h2>
<p>Commencez par télécharger git en vous rendant sur <a href="http://code.google.com/p/msysgit/downloads/list">cette page</a>. Prenez la dernière version existante de git (Version &#8220;<a href="http://code.google.com/p/msysgit/downloads/detail?name=Git-1.7.3.1-preview20101002.exe&amp;can=2&amp;q=">Git-1.7.3.1-preview20101002.exe</a>&#8221; à l&#8217;heure actuelle).  Exécutez l&#8217;installation :</p>
<div id="attachment_226" style="width: 523px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/git-install.png"><img class="size-full wp-image-226" title="Installation de git" src="http://blog.freelan.org/wp-content/uploads/2011/02/git-install.png" alt="Installation de git" width="513" height="398" /></a><p class="wp-caption-text">Installation de git</p></div>
<p>Choisissez les modules que vous souhaitez installer. Pour ma part, j&#8217;ai choisi ces modules :</p>
<div id="attachment_227" style="width: 523px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/git-options.png"><img class="size-full wp-image-227" title="Modules à installer" src="http://blog.freelan.org/wp-content/uploads/2011/02/git-options.png" alt="Modules à installer" width="513" height="398" /></a><p class="wp-caption-text">Modules à installer</p></div>
<p>Enfin, l&#8217;installeur vous demande de quelle façon vous souhaitez installer git. Les deux premières options nécessitent l&#8217;utilisation d&#8217;une console de type UNIX (msys/cygwin) pour l&#8217;utilisation de Git, la dernière permet d&#8217;utiliser git depuis une console native (type &#8220;cmd.exe&#8221; ou encore Powershell).</p>
<div id="attachment_228" style="width: 523px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/git-mode.png"><img class="size-full wp-image-228" title="Mode d'installation de git" src="http://blog.freelan.org/wp-content/uploads/2011/02/git-mode.png" alt="Mode d'installation de git" width="513" height="398" /></a><p class="wp-caption-text">Mode d&#39;installation de git</p></div>
<p>C&#8217;est cette dernière option que nous choisirons pour les raisons suivantes :</p>
<ul>
<li>La console UNIX est vraiment très puissante et efficace&#8230; mais, à mon sens, assez peu adaptée à Windows.</li>
<li>De nombreux développeurs Windows utilisent déjà Powershell et donc il faut pouvoir utiliser git depuis n&#8217;importe quelle console. Changer de console juste pour commit ses changements dans git n&#8217;est pas envisageable.</li>
</ul>
<p>Notez que comme il est indiqué dans l&#8217;installeur, la dernière option va remplacer une partie des outils Windows (tels que find.exe et sort.exe) par leur équivalent GNU. Si vous utilisez ces outils, vous pourrez toujours les utiliser, mais il faudra les préfixer par leur chemin complet.  Une fois l&#8217;installation terminée, lancez une console puis saisissez la commande :</p><pre class="crayon-plain-tag">git --version</pre><p>Si vous obtenez la sortie suivante :</p>
<div id="attachment_229" style="width: 687px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/git-mode1.png"><img class="size-full wp-image-229" title="Version de git" src="http://blog.freelan.org/wp-content/uploads/2011/02/git-mode1.png" alt="Obtenir la version installée de git" width="677" height="250" /></a><p class="wp-caption-text">Obtenir la version installée de git</p></div>
<p>C&#8217;est que git est correctement installé et fonctionnel. Félicitations !</p>
<h1>Configuration préliminaire</h1>
<p>Il est possible de configurer un bon nombre de choses dans git. Cela passe du nom d&#8217;utilisateur au proxy à utiliser ou à l&#8217;activation des couleurs lors de l&#8217;affichage des informations du dépôt.  Les configurations de git sont soit <strong>globales</strong>, soit propres à chaque dépôt. En pratique, si une valeur de paramètre n&#8217;est pas trouvée au sein du dépôt, git va regarder la configuration globale.  Voici les paramètres les plus couramment modifiés :</p><pre class="crayon-plain-tag">git config --global user.name &quot;Votre nom&quot;
git config --global user.email &quot;adresse@email.com&quot;
git config --global color.branch auto
git config --global color.diff auto
git config --global color.interactive auto
git config --global color.status auto</pre><p>Le deux premiers sont assez explicites; les quatre suivant activent les couleurs lors des commandes associées (ce qui est quand même plus sympathique).  Il existe évidemment encore bien d&#8217;autres paramètres, je vous invite à consulter la <a href="http://www.kernel.org/pub/software/scm/git/docs/git-config.html">page de manuel de git-config</a> pour les découvrir.</p>
<h1>Utilisation basique</h1>
<p>Le moyen le plus efficace, c&#8217;est de pratiquer. Commençons par créer un dépôt git :</p>
<div id="attachment_231" style="width: 847px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/git-init.png"><img class="size-full wp-image-231" title="Création d'un dépôt git" src="http://blog.freelan.org/wp-content/uploads/2011/02/git-init.png" alt="Création d'un dépôt git" width="837" height="218" /></a><p class="wp-caption-text">Création d&#39;un dépôt git</p></div>
<p><em>Note : Plutôt que de créer un dépôt vide, on aurait également pu choisir de <strong>cloner</strong> un dépôt existant avec la commande &#8220;git clone&#8221;.</em></p>
<p><em> </em>Créons un fichier à ajouter au dépôt :</p>
<div id="attachment_233" style="width: 847px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/git-status.png"><img class="size-full wp-image-233" title="Création d'un fichier à ajouter au dépôt" src="http://blog.freelan.org/wp-content/uploads/2011/02/git-status.png" alt="Création d'un fichier à ajouter au dépôt" width="837" height="330" /></a><p class="wp-caption-text">Création d&#39;un fichier à ajouter au dépôt</p></div>
<p>La commande &#8220;git status&#8221; permet d&#8217;interroger le dépôt sur le statut actuel de la <strong>copie de travail</strong> (ou &#8220;working copy&#8221;).  Ici, on voit que le fichier main.cpp a été créé mais n&#8217;est pas <strong>suivi</strong> (ou &#8220;tracked&#8221;) par le dépôt.  Indiquons à git que ce fichier doit être suivi et faire partie du prochain commit :</p>
<div id="attachment_234" style="width: 847px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/git-add.png"><img class="size-full wp-image-234" title="Ajout d'un fichier au dépôt" src="http://blog.freelan.org/wp-content/uploads/2011/02/git-add.png" alt="Ajout d'un fichier au dépôt" width="837" height="330" /></a><p class="wp-caption-text">Ajout d&#39;un fichier au dépôt</p></div>
<p>Pour ce faire, nous avons utilisé la commande &#8220;git add&#8221; qui permet d&#8217;indiquer qu&#8217;un fichier (même si il est déjà suivi) doit faire partie du prochain commit.</p>
<p>Après &#8220;git add&#8221;, &#8220;git status&#8221; nous indique bel est bien que le fichier doit être suivi.  Nous pourrions à ce moment là, ajouter d&#8217;autres fichiers, en modifier, voire en supprimer ou en déplacer certains. Il faut simplement signaler à git que le changement (quel que soit sa nature) doit faire partie du prochain commit.</p>
<p>Nous nous contentons de ce simple ajout pour l&#8217;instant.</p>
<div id="attachment_236" style="width: 847px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/git-commit.png"><img class="size-full wp-image-236" title="Historisation d'un changement" src="http://blog.freelan.org/wp-content/uploads/2011/02/git-commit.png" alt="Historisation d'un changement" width="837" height="330" /></a><p class="wp-caption-text">Historisation d&#39;un changement</p></div>
<p>La commande &#8220;git commit&#8221; permet de sauver le changement au sein du dépôt. Ici le paramètre &#8220;-m&#8221; permet de spécifier un message à associer au commit. Sans ça, git aurait ouvert un éditeur de texte pour nous demander de saisir notre message.</p>
<p><em>Note : La saisie d&#8217;un message est extrêmement importante. Les messages ne doivent pas forcément être très longs, mais il ne devraient jamais être vides. À quoi sert-il de mettre ses changements sous historiques si on est incapable de dire pourquoi ils ont été faits ? <strong>Même lorsque vous travaillez seul</strong>, prenez l&#8217;habitude de toujours renseigner des messages informatifs pour chacun de vos commits. C&#8217;est une habitude que <strong>vous ne regrettez pas</strong>.</em></p>
<p><em> </em>Après le commit, on constate que la &#8220;working copy&#8221; a été mise à zéro : &#8220;git status&#8221; indique qu&#8217;aucun changement n&#8217;a été apporté depuis le commit actuel.  Nous pouvons bien entendu dès à présent consulter l&#8217;historique de notre dépôt grâce à la commande &#8220;git log&#8221; :</p>
<div id="attachment_237" style="width: 847px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/git-log.png"><img class="size-full wp-image-237" title="Consultation de l'historique" src="http://blog.freelan.org/wp-content/uploads/2011/02/git-log.png" alt="Consultation de l'historique" width="837" height="442" /></a><p class="wp-caption-text">Consultation de l&#39;historique</p></div>
<p>Le commit est bien dans l&#8217;historique. Il s&#8217;est vu assigner un identifiant unique &#8220;c0d281e3532a4970415bba1e9159b1dc7ed816b1&#8243;.  Modifions maintenant le fichier main.cpp, de la façon suivante :</p>
<div id="attachment_238" style="width: 830px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/main.cpp_.png"><img class="size-full wp-image-238" title="Le fichier main.cpp modifié" src="http://blog.freelan.org/wp-content/uploads/2011/02/main.cpp_.png" alt="Le fichier main.cpp modifié" width="820" height="442" /></a><p class="wp-caption-text">Le fichier main.cpp modifié</p></div>
<p>Après sauvegarde des modifications, on utilise &#8220;git status&#8221; qui nous informe qu&#8217;en effet, main.cpp a été modifié par rapport à la version actuelle :</p>
<div id="attachment_239" style="width: 847px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/git-status1.png"><img class="size-full wp-image-239" title="Le fichier main.cpp a été modifié" src="http://blog.freelan.org/wp-content/uploads/2011/02/git-status1.png" alt="Le fichier main.cpp a été modifié" width="837" height="442" /></a><p class="wp-caption-text">Le fichier main.cpp a été modifié</p></div>
<p>Notons que bien que modifié, le fichier n&#8217;est pas automatiquement marqué comme faisant partie du prochain commit.</p>
<p>Nous pouvons afficher la liste des modifications apportées au fichier grâce à la commande &#8220;git diff&#8221; :</p>
<div id="attachment_240" style="width: 847px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/git-diff.png"><img class="size-full wp-image-240" title="Utilisation de git diff pour lister les changements" src="http://blog.freelan.org/wp-content/uploads/2011/02/git-diff.png" alt="Utilisation de git diff pour lister les changements" width="837" height="714" /></a><p class="wp-caption-text">Utilisation de git diff pour lister les changements</p></div>
<p>Nous souhaitons archiver cette nouvelle version de main.cpp. Pour ce faire, nous pouvons faire &#8220;git add main.cpp&#8221; suivi de &#8220;git commit&#8221; ou bien directement :</p>
<div id="attachment_241" style="width: 847px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/git-commit1.png"><img class="size-full wp-image-241" title="Archivage de la correction de main.cpp" src="http://blog.freelan.org/wp-content/uploads/2011/02/git-commit1.png" alt="Archivage de la correction de main.cpp" width="837" height="202" /></a><p class="wp-caption-text">Archivage de la correction de main.cpp</p></div>
<p>L&#8217;argument &#8220;-a&#8221; permet de dire à &#8220;git commit&#8221; qu&#8217;il doit automatiquement ajouter tous les fichiers <strong>déjà suivis</strong> qui ont été <strong>modifiés</strong> depuis le dernier commit.</p>
<p>Encore une fois, un appel &#8220;git log&#8221; nous donne la sortie suivante :</p>
<div id="attachment_242" style="width: 847px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/git-log1.png"><img class="size-full wp-image-242" title="Affichage des logs du dépôt" src="http://blog.freelan.org/wp-content/uploads/2011/02/git-log1.png" alt="Affichage des logs du dépôt" width="837" height="778" /></a><p class="wp-caption-text">Affichage des logs du dépôt</p></div>
<p>Le changement a bien été archivé.  Il est possible de revenir à un état antérieur du dépôt grâce à la commande &#8220;git checkout&#8221; :</p>
<div id="attachment_243" style="width: 847px" class="wp-caption aligncenter"><a href="http://blog.freelan.org/wp-content/uploads/2011/02/git-checkout.png"><img class="size-full wp-image-243" title="Utilisation de git checkout" src="http://blog.freelan.org/wp-content/uploads/2011/02/git-checkout.png" alt="Utilisation de git checkout" width="837" height="362" /></a><p class="wp-caption-text">Utilisation de git checkout</p></div>
<p>Et bien entendu de revenir à la dernière version en date en utilisant : &#8220;git checkout master&#8221;, où &#8220;master&#8221; est le nom de la branche à utiliser.  <em>Note : par défaut, la branche principale d&#8217;un dépôt git est nommée &#8220;master&#8221;. Il s&#8217;agit d&#8217;une convention, que vous êtes libre de ne pas suivre, mais qu&#8217;il est tout de même recommandé de respecter.</em></p>
<h1>Aller plus loin</h1>
<p>Nous n&#8217;avons vu ici qu&#8217;un petit aperçu de l&#8217;utilisation et du principe de git : il y a bien plus à voir et à découvrir.  Il est également possible de (liste loin d&#8217;être exhaustive) :</p>
<ul>
<li>Partager ses modifications avec un ou plusieurs autres dépôts (&#8220;push&#8221;, &#8220;pull&#8221;, &#8220;fetch&#8221;, etc.).</li>
<li>Effacer localement certains commit intermédiaires ou de réécrire totalement l&#8217;historique (lorsque cela est absolument nécessaire).</li>
<li>Utiliser git avec un dépôt SVN (&#8220;git svn&#8221;) pour par exemple faciliter la transition.</li>
<li>Rechercher quelle modification a introduit un bogue (&#8220;git bissect&#8221;)</li>
</ul>
<p>Pour tout découvrir, je vous recommande notamment le livre <a href="http://www.pragprog.com/titles/pg_git/pragmatic-guide-to-git">Pragmatic Guide to Git</a> qui est à la fois très facile d&#8217;accès et très complet. N&#8217;hésitez pas non plus à consulter les pages de manuel de git qui sont très bien fournies.  Comme toujours, n&#8217;hésitez pas à poser vos questions si j&#8217;ai manqué de clarté sur certains aspects.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.freelan.org/2011/02/02/decouverte-de-git-sous-windows/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
