<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wikibr.binets.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Arthur</id>
	<title>WikiBR - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wikibr.binets.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Arthur"/>
	<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/Sp%C3%A9cial:Contributions/Arthur"/>
	<updated>2026-05-11T17:13:22Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Git&amp;diff=7716</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Git&amp;diff=7716"/>
		<updated>2013-02-14T17:19:47Z</updated>

		<summary type="html">&lt;p&gt;Arthur : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu Root Toolbox}}&lt;br /&gt;
&lt;br /&gt;
Git est un [[VCS|système de contrôle de version]]. Assez proche de [[SVN]] par certains côtés, il présente néanmoins un grand nombre de différences.&lt;br /&gt;
&lt;br /&gt;
Avant de découvrir les spécificités de Git, il est nécessaire de connaître les concepts généraux des [[VCS|systèmes de contrôle de version]].&lt;br /&gt;
&lt;br /&gt;
Cette page donne un bref aperçu des fonctionnalités de Git. Un autre bon aperçu est disponible [http://giudoku.sourceforge.net/media/GitHandbook.pdf ici] (lien non BR)&lt;br /&gt;
&lt;br /&gt;
Une cheatsheet est également disponible [http://ndpsoftware.com/git-cheatsheet.html ici], c'est un bon aide mémoire.&lt;br /&gt;
&lt;br /&gt;
== Dépôts ==&lt;br /&gt;
&lt;br /&gt;
Alors que [[CVS]] et [[SVN]] sont des systèmes de versionnement centralisés (i.e un serveur contient le dépôt, et chaque utilisateur effectue un ''checkout'' depuis ce dépôt), Git est complètement décentralisé. Cela signifie que chaque contributeur a sa propre copie locale de tout l'historique d'un projet. Si aujourd'hui vous considérez que l'espace disque sur votre ordinateur est un problème, allez faire un tour, partez admirer les merveilles de la technologies qui nous entoure, et revenez demain. Sur cette page, tous les examples sont tirés du Git de [[Frankiz]], mais voici d'autres dépôts bien utiles :&lt;br /&gt;
* [http://www.github.com/ GitHub]&lt;br /&gt;
* [http://git.frankiz.net/ Frankiz]&lt;br /&gt;
* [http://git.polytechnique.org/ Polytechnique.org]&lt;br /&gt;
&lt;br /&gt;
== Récupérer le code d'un projet existant ==&lt;br /&gt;
&lt;br /&gt;
Pour télécharger un projet existant, il y a deux possibilités : avec un compte de développeur ou sans compte. Avec un compte SSH simple, il suffit d'exécuter la commande suivante :&lt;br /&gt;
 git clone mybeautifulname@git.frankiz.net:/hosting/git/frankiz&lt;br /&gt;
Sans compte, certains projets sont téléchargeables avec le protocole HTTP, mais vous ne pourrez pas uploader vos modifications.&lt;br /&gt;
 git clone http://git.frankiz.net/frankiz&lt;br /&gt;
&lt;br /&gt;
Cela crée un '''clone''' du dépôt d'origine (i.e une copie conforme), qui peut d'ailleurs servir de backup si le dépôt d'origine était perdu. Notre clone contient tout l'historique du dépôt depuis sa création, toutes les branches, etc. Cette première opération est très souple. On peut cloner des dépôt via SSH, HTTP, GIT, ou même en local le dépôt d'un autre utilisateur...&lt;br /&gt;
&lt;br /&gt;
Par exemple la commande suivante clone dans le dossier ''platal'' la branche ''core/master'' d'une version de Plat/al potientiellement modifiée par le vice-prez 2010 :&lt;br /&gt;
 git clone /home/2010/fishilico/dev/platal/.git platal -b core/master&lt;br /&gt;
&lt;br /&gt;
== Accéder à l'aide ==&lt;br /&gt;
Avant toute chose, il est essentiel de savoir où trouver de l'aide, d'autant plus que l'aide de Git est très bien faite.&lt;br /&gt;
* Sur internet, il y a le wikiBR, les pages de manuel ([http://linux.die.net/man/1/git sur Linux Die] par exemple) et le [http://book.git-scm.com/ Git Book]&lt;br /&gt;
* En terminal, ''git help'' pour une liste des commandes, ''git help cmd'' ou ''git cmd --help'' pour l'aide complète de la commande ''cmd'', ou encore simplement ''git cmd -h'' pour une aide courte sur la commande ''cmd''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quel est l'état de ma copie de travail ? ==&lt;br /&gt;
Ceci est la question que vous devez vous posez avant de reprendre après une pause votre travail sur un projet versionné. Il peut y avoir eu des changements sur le projet entre temps, des patchs mal faits en production, ... Pour cela, il y a trois commandes essentielles :&lt;br /&gt;
* Pour vérifier que le dépôt est correct, ''git status'' doit dire cela :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 nothing to commit (working directory clean)&lt;br /&gt;
* En cours de travail, la réponse ressemble plus à :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 # Changes not staged for commit:&lt;br /&gt;
 #   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)&lt;br /&gt;
 #   (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)&lt;br /&gt;
 #&lt;br /&gt;
 #	modified:   un-fichier-random.blah&lt;br /&gt;
 #&lt;br /&gt;
 # Untracked files:&lt;br /&gt;
 #   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to include in what will be committed)&lt;br /&gt;
 #&lt;br /&gt;
 #	un-fichier-chombier-ajouté.42&lt;br /&gt;
 no changes added to commit (use &amp;quot;git add&amp;quot; and/or &amp;quot;git commit -a&amp;quot;)&lt;br /&gt;
* Lire l'historique est bien pour savoir quel est le dernier commit&lt;br /&gt;
 git log&lt;br /&gt;
 commit 2a424aae1e746fb5f33de3b3bc3e8a31ee25c684&lt;br /&gt;
 Author: Nicolas Iooss &amp;lt;fishilico@eleves.polytechnique.fr&amp;gt;&lt;br /&gt;
 Date:   Fri Mar 9 00:27:35 2012 +0100&lt;br /&gt;
* Voir les différences entre la version sur le dépôt distant et celle de travail&lt;br /&gt;
 git diff&lt;br /&gt;
&lt;br /&gt;
De plus, après avoir téléchargé les derniers commits avec ''git fetch'', il est possible d'obtenir le message suivant :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 # Your branch is behind 'origin/master' by 42 commits, and can be fast-forwarded.&lt;br /&gt;
Cela signifie que la copie locale a 42 commits de retard sur le dépôt distant, mais qu'un ''git rebase origin/master'' suffit pour mettre à jour la copie locale.&lt;br /&gt;
&lt;br /&gt;
== Réinitialiser le dépôt ==&lt;br /&gt;
Pour restaurer un fichier, il suffit de le ''checkout'' à partir de l'index. En français, cela signifie que lorsque vous faites une modification sur un fichier, vous pouvez effacer les modifications et revenir la dernière version enregistrée dans l'index Git avec la commande :&lt;br /&gt;
 git checkout -- chemin/vers/mon/fichier.blih&lt;br /&gt;
Pour réinitialiser l'index dans l'état indiqué par une branche (comme ''master'' par exemple) sans modifier les fichier, il suffit d'écrire :&lt;br /&gt;
 git reset master&lt;br /&gt;
Si cela ne marche pas car des fichiers seront modifiés ou effacés, on peut forcer la main à Git, mais alors il faut être prêt à subir les conséqences que cela implique (perte des modifications non commitées)&lt;br /&gt;
 git reset --hard master&lt;br /&gt;
&lt;br /&gt;
== Mettre à jour la copie de travail ==&lt;br /&gt;
=== git fetch &amp;amp;&amp;amp; git rebase origin/master ===&lt;br /&gt;
Dans le cas général, vous travaillez sur la branche ''master'' et vous synchronisez votre projet sur un seul serveur. Si votre cas est plus compliqué, vous devez être suffisamment compétent pour vous débrouillez par vous-même. On disait donc... dans le cas simple, Git stocke en interne deux branches : ''master'' et ''origin/master''. Sur Frankiz, c'est un peu plus compliqué car il y a une branche de production, mais les développeurs n'utilisent que master.&lt;br /&gt;
 git branch -a&lt;br /&gt;
 * master&lt;br /&gt;
   remotes/origin/HEAD -&amp;gt; origin/master&lt;br /&gt;
   remotes/origin/f579e1971a66623b2948bf0e20c2e23481022b41&lt;br /&gt;
   remotes/origin/fkz2&lt;br /&gt;
   remotes/origin/kangz-h4ck3s&lt;br /&gt;
   remotes/origin/master&lt;br /&gt;
   remotes/origin/prod&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour sa copie de travail, il faut donc commencer par mettre à jour les branches distantes, avec '''au choix''' l'une des commandes suivantes&lt;br /&gt;
 git fetch&lt;br /&gt;
 git fetch origin&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut appliquer les éventuelles modifications locales à la suite de celles effectuées sur le dépôt, c'est le '''rebase'''.&lt;br /&gt;
 git rebase origin/master&lt;br /&gt;
Git essaiera alors d'appliquer les commits locaux successivement, en indiquant chaque fois qu'il y a un problème (conflit ou fichier supprimé). En cas de problème, il faut&lt;br /&gt;
# Résoudre le problème (les fichiers avec des conflits apparaîssent comme ''Changed but not updated'' dans ''git status'')&lt;br /&gt;
# Ajouter les fichiers (''git add'')&lt;br /&gt;
# Indiquer à git de continuer : ''git rebase --continue''&lt;br /&gt;
&lt;br /&gt;
Remarque : git pull --rebase est un raccourci pour l'ensemble git fetch &amp;amp;&amp;amp; git rebase. Attention cependant lors du travail sur plusieurs branches.&lt;br /&gt;
&lt;br /&gt;
Ceci permet de transformer l'état suivant (les ''O'' sont les commits, ''A'' le moment où les deux versions ont commencé à diverger, ''B'' la version du dépôt, ''E'' la version locale, ''C'' et ''D'' des commits locaux&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /&lt;br /&gt;
 -O--A--O--B&lt;br /&gt;
&lt;br /&gt;
En l'état plus propre :&lt;br /&gt;
 -O--A--O--B--C'--D'--E'&lt;br /&gt;
&lt;br /&gt;
Avec C, D et E convertis en C', D' et E' : ils ont été modifiés pour être des modifications relatives à B au lieu de A.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi il ne faut JAMAIS utiliser git pull ===&lt;br /&gt;
Certains développeurs utilisent la commande ''git pull'' pour mettre à jour leur dépôt. Cette pratique est justifiée lorsque la copie de travail était propre (sans commit en attente de push entre autres), mais sinon, cela peut avoir des conséquences très graves et sales. En effet, ''git pull' est assimilé à la succession de commandes suivantes :&lt;br /&gt;
 git fetch origin &amp;amp;&amp;amp; git merge origin/master&lt;br /&gt;
Le problème est le merge. En reprenant les schémas précédents, cela transforme l'état suivant :&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /&lt;br /&gt;
 -O--A--O--B&lt;br /&gt;
&lt;br /&gt;
en :&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /        \&lt;br /&gt;
 -O--A--O--B----M&lt;br /&gt;
&lt;br /&gt;
où M est le commit ''de fusion de branches''. '''Cela est très moche et à éviter absolument'''. Si vous vous retrouvez dans cette suituation (pour vérifier : ''git log''), vous pouvez toujours tenter un ''git rebase origin/master'' qui peut fonctionner si le ''merge'' était trivial (sans conflit). Sinon, un ''git reset --hard origin/master'' s'impose pour assurer votre salut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sauvegarder des modifications locales (git stash) ===&lt;br /&gt;
Avant de faire un merge particulièrement délicat, ou si l'on doit résoudre un bug alors que l'on a pas mal de modifications non commitées en cours, il est parfois utile de sauvegarder l'état courant de la copie de travail.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut utiliser '''avant''' un changement (avec ''git rebase'' par exemple) :&lt;br /&gt;
 git stash&lt;br /&gt;
Une fois les modifications effectuées, on peut restorer la copie locale à l'état sauvegardé avec :&lt;br /&gt;
 git stash pop&lt;br /&gt;
&lt;br /&gt;
== Effectuer un commit ==&lt;br /&gt;
Un '''commit''' est un ensemble de fichiers modifiés. Cela permet plus de cohérence dans le suivi des versions. Par exemple, si l'ajout d'une fonctionnalité sur Frankiz modifie les fichiers ''blah'', ''blih'' et ''bloh'', le ''commit'' regroupe les modifications de ces trois fichiers, et associe à cette modification une date et un auteur.&lt;br /&gt;
&lt;br /&gt;
Pour effectuer un commit, il faut :&lt;br /&gt;
* Vérifier l'état de la copie de travail, pour ne commiter que ce qui est nécessaire&lt;br /&gt;
 git status&lt;br /&gt;
 git diff&lt;br /&gt;
* Indiquer à Git quels fichiers feront partie du commit ; ceci permet de ne committer que les modifications de quelques fichiers&lt;br /&gt;
 git add path/to/blih path/to/blah path/to/bloh&lt;br /&gt;
* Vérifier que l'on a ajouté les fichiers que l'on voulait :&lt;br /&gt;
 git status&lt;br /&gt;
* Faire le commit (le ''-s'' ajoute une ligne ''Signed of by'' dans le message, pour pouvoir retrouver plus efficacement l'auteur réel du commit)&lt;br /&gt;
 git commit -s&lt;br /&gt;
* Cette commande ouvre un éditeur (vi, nano ou emacs selon la configuration de la variable EDITOR). Il faut alors entrer un bref descriptif du commit. '''Pour certains projets (dont Frankiz), les conventions de codage obligent les développeurs à écrire les descriptions en anglais.''' Il est un bon usage de s'adapter en conséquence, car un commit peut être refusé en production s'il est mal fait.&lt;br /&gt;
* Mettre à jour la copie locale avec le dépôt distant (cela décale le nouveau commit à la fin). '''IL NE FAUT SURTOUT PAS FAIRE DE git pull OU DE git merge ICI'''&lt;br /&gt;
 git fetch&lt;br /&gt;
 git rebase origin/master&lt;br /&gt;
* Transmettre les commits au dépôt d'origine&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
La dernière commande provient du fait que git n'est pas centralisé : il n'envoie pas les modifications locales au dépôt parent spontanément.&lt;br /&gt;
&lt;br /&gt;
Ceci permet de faire quelques modifications locales puis de n'envoyer cela au reste des développeurs que lorsque les modifications sont stables et complètes, par exemple.&lt;br /&gt;
&lt;br /&gt;
== Gérer les branches ==&lt;br /&gt;
On peut voir la liste des branches accessibles avec :&lt;br /&gt;
 git branch -a&lt;br /&gt;
* La ligne avec une étoile est la branche courante&lt;br /&gt;
* Les lignes blanches sont les branches ''locales'' (elles suivent généralement une branche distante)&lt;br /&gt;
* Les lignes rouges (si les couleurs sont activées) sont les branches distantes.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer une autre branche, il faut d'abord l'ajouter localement :&lt;br /&gt;
 git checkout -b NomLocal origin/NomDistant&lt;br /&gt;
&lt;br /&gt;
Cela aura également pour effet de basculer sur la branche NomLocal.&lt;br /&gt;
Les modifications que l'on avait effectuées sont bien entendu conservées.&lt;br /&gt;
&lt;br /&gt;
Une fois la branche ajoutée, on peut basculer de branche en branche à l'aide de :&lt;br /&gt;
 git checkout NomLocal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Créer un dépôt ==&lt;br /&gt;
Contrairement à [[SVN]] où il faut installer un serveur subversion, créer un dépôt Git est très rapide : dans le dossier que l'on souhaite versionner, il suffit de taper&lt;br /&gt;
 git init&lt;br /&gt;
Et voilà, le dossier est versionné : on peut donc commencer à faire des modifications, des commits, etc. (bien entendu, on ne peut pas ''pusher'' ses commits, puisqu'il n'y a pas de serveur distant).&lt;br /&gt;
&lt;br /&gt;
Cette particularité rend Git très efficace pour versionner un petit projet, un exercice de TD, etc.&lt;br /&gt;
&lt;br /&gt;
Pour créer un dépôt qui peut être cloné, il faut exécuter les commandes suivantes :&lt;br /&gt;
 git init --bare mon_projet&lt;br /&gt;
 cd mon_projet &amp;amp;&amp;amp; git update-server-info&lt;br /&gt;
&lt;br /&gt;
Enfin, pour configurer un serveur HTTP (gitweb), il ne faut pas oublier de créer un fichier vide '''git-daemon-export-ok''' dans le dossier, afin de permettre le clonage.&lt;br /&gt;
&lt;br /&gt;
== Structure interne ==&lt;br /&gt;
&lt;br /&gt;
Git stocke les commits de manière très particulière : un commit correspond à peu près à une sauvegarde de l'état des fichiers, à un message, et à une référence vers le commit parent.&lt;br /&gt;
Contrairemant à [[SVN]], il n'y a donc pas de notion de numéro de révision : chaque commit est identifié par une chaîne hexadécimale de 40 caractères (par exemple : ''04fd02e59b1bdc430c7a7dcc1ca9f4cbc2b04037'' )&lt;br /&gt;
&lt;br /&gt;
Un ''tag'' est en fait un nom «lisible» donné à un ''commit'' ; une ''branche'' indique également le ''commit'' principal d'une branche.&lt;br /&gt;
&lt;br /&gt;
== Du bon usage de gitignore ==&lt;br /&gt;
Dans un projet, il est inutile de versionner les fichiers temporaires et les fichiers compilés (qu'ils soient binaires ou non). On utilise généralement un Makefile pour créer ces fichiers. Pour éviter de les versionner, il suffit d'utiliser un fichier ''.gitignore'' bien placé. Généralement, chaque projet a un tel fichier dans son dossier principal. Voici par exemple un extrait du gitignore de Frankiz :&lt;br /&gt;
 configs/frankiz.conf&lt;br /&gt;
 htdocs/.htaccess&lt;br /&gt;
 htdocs/data/*&lt;br /&gt;
 htdocs/css/*&lt;br /&gt;
 spool/*&lt;br /&gt;
 upgrade/2.0.0_to_3.0.0/unversionned&lt;br /&gt;
&lt;br /&gt;
== Configuration globale ==&lt;br /&gt;
Si vous avez déjà commitez, vous aurez certainement remarqué qu'il faut utiliser ''git config'' pour configurer vos informations personnelles. Ainsi, les deux premières commandes que tout utilisateur doit taper avant de faire un commit sont :&lt;br /&gt;
 git config --global user.name &amp;quot;Prénom Nom de famille&amp;quot;&lt;br /&gt;
 git config --global user.email &amp;quot;prenom.nom.promo@polytechnique.org&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ensuite, si vous aimez les couleurs, vous avez envie de taper cette commande :&lt;br /&gt;
 git config --global color.ui auto&lt;br /&gt;
&lt;br /&gt;
Enfin, si vous en avez assez des projets qui ne mettent pas les fichiers temporaires dans le gitignore, vous pouvez configurer un fichier gitignore global. Si votre ''/home/user/.gitignore_global'' ressemble à&lt;br /&gt;
 *~&lt;br /&gt;
 *.swp&lt;br /&gt;
 *.tmp&lt;br /&gt;
il suffit de taper :&lt;br /&gt;
 git config --global core.excludesfile /home/user/.gitignore_global&lt;br /&gt;
&lt;br /&gt;
Tout cela permet de gérer la configuration globale, visible par&lt;br /&gt;
 git config --global -l&lt;br /&gt;
En enlevant ''--global'' dans toutes les commandes précédentes, on configure la copie locale.&lt;br /&gt;
&lt;br /&gt;
=== Exemple de configuration ===&lt;br /&gt;
Voici un exemple de fichier ~/.gitconfig (qui stocke la configuration ''--global'', le même format peut être utilisé dans les fichier ''$REPO/.git/config'' de chaque dépot) :&lt;br /&gt;
 [gc]&lt;br /&gt;
    auto = 1&lt;br /&gt;
 [color]&lt;br /&gt;
    ui = true&lt;br /&gt;
 [color &amp;quot;diff&amp;quot;]&lt;br /&gt;
    whitespace = red reverse&lt;br /&gt;
 [core]&lt;br /&gt;
    whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eol&lt;br /&gt;
 [alias]&lt;br /&gt;
    st = status&lt;br /&gt;
    ci = commit&lt;br /&gt;
    br = branch&lt;br /&gt;
    co = checkout&lt;br /&gt;
    df = diff&lt;br /&gt;
    dc = diff --cached&lt;br /&gt;
    lg = log -p&lt;br /&gt;
    lo = log --graph --decorate --pretty=oneline --abbrev-commit -n 10&lt;br /&gt;
    lol = log --graph --decorate --pretty=oneline --abbrev-commit&lt;br /&gt;
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all&lt;br /&gt;
    ls = ls-files&lt;br /&gt;
    # Show files ignored by git:&lt;br /&gt;
    ign = ls-files -o -i --exclude-standard&lt;br /&gt;
    amend = commit --amend -C HEAD&lt;br /&gt;
 [branch]&lt;br /&gt;
    autosetuprebase = always&lt;br /&gt;
&lt;br /&gt;
== Utiliser le proxy de l'X avec Git ==&lt;br /&gt;
Si vous hébergez un projet sur [http://www.github.com GitHub], vous avez envie de dire à Git de se connecter à GitHub en SSH en passant par le proxy de l'X (qui est [http://kuzh.polytechnique.fr:8080 kuzh:8080]). Pour cela, il suffit de configurer le client SSH pour utiliser le proxy à chaque connexion vers github.com. Cela s'effecute par le fichier de configuration suivant dans /home/user/.ssh/config (adaptez avec votre dossier personnel)&lt;br /&gt;
 Host github.com&lt;br /&gt;
     ProxyCommand socat - PROXY:kuzh.polytechnique.fr:%h:%p,proxyport=8080&lt;br /&gt;
&lt;br /&gt;
'''Si vous souhaitez uniquement cloner un dépôt GitHub''' dont vous n'êtes pas contributeur, il suffit d'utiliser le lien HTTPS en ligne de commande, en précisant le proxy.&lt;br /&gt;
 export https_proxy=http://kuzh.polytechnique.fr:8080&lt;br /&gt;
 git clone https://github.com/BinetReseau/frankiz.git&lt;br /&gt;
&lt;br /&gt;
= Pour Windows =&lt;br /&gt;
&lt;br /&gt;
Pour utiliser Git sur Windows, on peut par exemple télécharger MSys Git : [http://msysgit.github.com/ http://msysgit.github.com/].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Root]]&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Diagnostiquer_une_panne_r%C3%A9seau&amp;diff=7714</id>
		<title>Diagnostiquer une panne réseau</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Diagnostiquer_une_panne_r%C3%A9seau&amp;diff=7714"/>
		<updated>2013-02-14T16:22:21Z</updated>

		<summary type="html">&lt;p&gt;Arthur : /* Proxy */  ortho&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tu as une panne réseau à l'X ? Un problème se pose ? Voici quelques tests usuels qui permettent de déterminer tout seul précisément d'où vient le problème. Cela est utile '''avant''' de spammer les équipes de support du Binet Réseau ou de la DSI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Connexion au réseau du bâtiment ==&lt;br /&gt;
&lt;br /&gt;
=== Est-ce que votre ordinateur arrive à se connecter au réseau du bâtiment ? ===&lt;br /&gt;
&lt;br /&gt;
Le test usuel pour cela est le ''ping de la passerelle'' ou le ''ping du voisin''. La passerelle est un composant du réseau qui permet de relayer des communications internet avec autre chose. Par exemple, si votre adresse IP est 129.104.13.37 et que la passerelle est 129.104.13.254, la commande suivante teste la connectivité entre votre ordinateur et la passerelle du bâtiment :&lt;br /&gt;
 ping 129.104.13.254&lt;br /&gt;
&lt;br /&gt;
En cas de succès, ceci s'affiche :&lt;br /&gt;
 PING 129.104.13.254 (129.104.13.254) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from 129.104.13.254: icmp_seq=1 ttl=60 time=1.94 ms&lt;br /&gt;
 64 bytes from 129.104.13.254: icmp_seq=2 ttl=60 time=1.56 ms&lt;br /&gt;
 64 bytes from 129.104.13.254: icmp_seq=3 ttl=60 time=2.01 ms&lt;br /&gt;
 64 bytes from 129.104.13.254: icmp_seq=4 ttl=60 time=1.65 ms&lt;br /&gt;
 64 bytes from 129.104.13.254: icmp_seq=5 ttl=60 time=4.82 ms&lt;br /&gt;
 --- 129.104.13.254 ping statistics ---&lt;br /&gt;
 5 packets transmitted, 5 received, 0% packet loss, time 4005ms&lt;br /&gt;
 rtt min/avg/max/mdev = 1.565/2.400/4.821/1.222 ms&lt;br /&gt;
&lt;br /&gt;
En cas d'échec, c'est cela qu'il se passe :&lt;br /&gt;
 PING 129.104.13.254 (129.104.13.254) 56(84) bytes of data.&lt;br /&gt;
 --- 129.104.13.254 ping statistics ---&lt;br /&gt;
 5 packets transmitted, 0 received, 100% packet loss, time 4008ms&lt;br /&gt;
&lt;br /&gt;
Parfois, il se peut que la passerelle ne réponde jamais au ping alors qu'elle est accessible. Dans ce cas, il faut essayer avec l'adresse IP de son voisin (et en profiter pour faire sa connaissance si ce n'est pas déjà fait). Par exemple, si mon voisin a un ordinateur connecté avec l'adresse IP 129.104.13.42, la commande '''ping 129.104.13.42''' permet de tester la connectivité.&lt;br /&gt;
&lt;br /&gt;
=== Que faire si la passerelle est inaccessible ? ===&lt;br /&gt;
* Regarde si le câble est bien branché.&lt;br /&gt;
* Vérifie ton adresse IP et le masque de sous-réseau.&lt;br /&gt;
* Vérifie qu'il n'y a pas actuellement une coupure de courant.&lt;br /&gt;
* Connecte-toi directement à la prise ethernet si tu passais par le téléphone.&lt;br /&gt;
&lt;br /&gt;
== Connexion au réseau de l'école ==&lt;br /&gt;
&lt;br /&gt;
=== Est-ce que le réseau de l'X est accessible ? ===&lt;br /&gt;
Pour savoir, il suffit d'exécuter un ping sur une machine toujours accessible, par exemple kuzh (129.104.247.2) ou deiz (129.104.30.90). La ligne de commande est '''ping 129.104.247.2''' et son résultat se lit comme précédemment.&lt;br /&gt;
&lt;br /&gt;
=== Que faire si la machine testée ne répond pas ? ===&lt;br /&gt;
Il peut y avoir une panne temporaire sur le réseau, regarde si ton voisin arrive à communiquer avec la machine concernée. Vérifie les paramétrages de la passerelle.&lt;br /&gt;
&lt;br /&gt;
== Noms de domaine (DNS) de l'internet ==&lt;br /&gt;
&lt;br /&gt;
Est-ce que les noms de domaine d'internet sont correctement résolus par des adresses IP ? Pour le savoir, comme précédemment, une commande universelle : ping. Par exemple '''ping kuzh.polytechnique.fr''' doit afficher quelque chose qui ressemble à :&lt;br /&gt;
 PING kuzh.polytechnique.fr (129.104.247.2) 56(84) bytes of data.&lt;br /&gt;
 64 bytes from kuzh.polytechnique.fr (129.104.247.2): icmp_seq=1 ttl=62 time=13.1 ms&lt;br /&gt;
&lt;br /&gt;
et ne pas répondre :&lt;br /&gt;
 ping: unknown host kuzh.polytechnique.fr&lt;br /&gt;
&lt;br /&gt;
En cas de problème, vérifie la configuration des serveurs DNS.&lt;br /&gt;
&lt;br /&gt;
== Noms de domaine (DNS) du BR ==&lt;br /&gt;
&lt;br /&gt;
Le BR fournit deux serveurs DNS (129.104.201.53 et 129.104.201.51) qui fournissent, en plus des DNS globales, des noms privés en eleves.polytechnique.fr. Le BR conseille de configurer ce domaine ainsi que polytechnique.fr en tant que suffixe DNS afin d'éviter de le retaper.&lt;br /&gt;
&lt;br /&gt;
En configuration BR, la commande '''ping frankiz''' doit renvoyer un résultat qui commence par :&lt;br /&gt;
 PING frankiz.eleves.polytechnique.fr (129.104.201.51) 56(84) bytes of data.&lt;br /&gt;
&lt;br /&gt;
Si ce n'est pas le cas, vérifie la configuration des serveurs DNS.&lt;br /&gt;
&lt;br /&gt;
== Proxy ==&lt;br /&gt;
&lt;br /&gt;
Après avoir testé le réseau de l'X et les DNS, il y a des tests en navigateur qui permettent de diagnostiquer rapidement les problèmes liés au proxy. Le BR a mis en place la page http://config/test.html afin de tester si un navigateur web (Internet Explorer, Safari, Opera, Firefox, Chrome, Konqueror, Links, ...) peut accéder aux serveurs du BR. Si cette page est inaccessible, essaie directement http://config.eleves.polytechnique.fr/test.html ou http://129.104.201.51/test.html.&lt;br /&gt;
&lt;br /&gt;
Si cela donne une page d'erreur &amp;quot;L'URL demandée n'a pu être chargée (...) L'erreur suivante a été rencontrée : Impossible d'associer une adresse IP à la machine (Name Error: The domain name does not exist.)&amp;quot;, c'est que le navigateur est configuré sur un proxy forcé et il faut le modifier en proxy automatique pour accéder à la zone BR (cf [[Configuration du proxy]]).&lt;br /&gt;
&lt;br /&gt;
Ensuite, si une requête vers http://www.google.fr/ n'aboutit pas (expiration du délai de réponse), c'est peut-être que le proxy n'est pas du tout configuré. Si Google est accessible mais GMail ne l'est pas (ou d'autres sites en HTTPS), il faut bien faire attention à configurer le proxy pour tous les protocoles et pas uniquement pour HTTP. La configuration du proxy est détaillée sur la page appropriée, [[Configuration du proxy]].&lt;br /&gt;
&lt;br /&gt;
== Toujours un problème ? ==&lt;br /&gt;
&lt;br /&gt;
Cette page est trop synthétique pour être exhaustive. Si malgré les tests proposés des problèmes réseaux persistent, n'hésite pas à contacter le support du BR à [mailto:support@eleves.polytechnique.fr support@eleves.polytechnique.fr], en détaillant ce qui fonctionne et ce qui est cassé, en citant les paragraphes de cette page.&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=SSH&amp;diff=7217</id>
		<title>SSH</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=SSH&amp;diff=7217"/>
		<updated>2012-12-18T13:06:18Z</updated>

		<summary type="html">&lt;p&gt;Arthur : /* Mémorisation de configuration SSH */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SSH est un protocole permettant d'obtenir un accès Shell sur une machine distante en toute sécurité.&lt;br /&gt;
Il permet, via SCP, de transférer des fichiers entre diverses machines.&lt;br /&gt;
&lt;br /&gt;
Nous allons voir ici quelques options intéressantes.&lt;br /&gt;
&lt;br /&gt;
== Clé publique ==&lt;br /&gt;
Il est possible de se connecter en SSH à une machine sans avoir à taper son mot de passe !&lt;br /&gt;
&lt;br /&gt;
C'est parfois la seule manière, par exemple dans le cas des machines visibles à l'extérieur, depuis l'extérieur de l'X.&lt;br /&gt;
&lt;br /&gt;
=== Création de la clé ===&lt;br /&gt;
En local, sur une machine où l'on est le seul administrateur (machine perso) :&lt;br /&gt;
 ssh-keygen&lt;br /&gt;
Laisser la valeur par défaut pour le nom du fichier (~/.ssh/id_rsa) et taper une passphrase (longue et complexe). Ceci va générer en local un couple clé privée / clé publique, chiffrée en RSA.&lt;br /&gt;
&lt;br /&gt;
=== Export vers les autres machines ===&lt;br /&gt;
Il faut ensuite envoyer le fichier contenant la clé publique (~/.ssh/id_rsa.pub) sur les machines auxquelles on veut se connecter :&lt;br /&gt;
==== Avec ssh-copy-id ====&lt;br /&gt;
 ssh-copy-id login_distant@machine_distante&lt;br /&gt;
==== Manuellement ====&lt;br /&gt;
Sur les mac, par exemple, ssh-copy-id n'est pas disponible. Il faut donc rajouter manuellement la clé publique à liste des clés autorisées sur la machine distante en copiant le contenu de ~/.ssh/id_rsa.pub (en local) dans .ssh/authorized_keys (sur la machine distante) :&lt;br /&gt;
* sur la machine locale :&lt;br /&gt;
 scp ~/.ssh/id_rsa.pub login_distant@machine_distante:~&lt;br /&gt;
* sur la machine distante :&lt;br /&gt;
 cat ~/id_rsa.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== ssh-agent ===&lt;br /&gt;
Il s'agit d'un programme qui vient faciliter l'utilisation des clés privées : en le lançant au début de ta session graphique, il suffit de taper dans un shell&lt;br /&gt;
 ssh-add&lt;br /&gt;
pour qu'il demande la passphrase de la clé privée, puis la charger en mémoire : plus besoin de taper cette passphrase lors d'un SSH !&lt;br /&gt;
Tu peux indiquer par l'option ''-A'' dans ton ssh que tu souhaites ''forwarder'' l'agent : si tu as exporté ta clé publique sur les machines hostA et hostB, alors en faisant&lt;br /&gt;
 ssh -A hostA&lt;br /&gt;
puis, sur hostA&lt;br /&gt;
 ssh hostB&lt;br /&gt;
&lt;br /&gt;
le second ssh utilisera le ssh-agent qui tourne localement sur ton ordinateur pour récupérer la clé privée et s'authentifier auprès de hostB. Il devient alors intéressant d'utiliser l'option ForwardAgent (cf plus bas) pour pouvoir se balader librement entre les différentes machines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Connection ===&lt;br /&gt;
Pour se connecter, on tape&lt;br /&gt;
 ssh login_distant@machine_distante&lt;br /&gt;
&lt;br /&gt;
Si on a lancé le ssh-agent avant (ssh-add), le client ssh va demander la passphrase de la clé, puis établir la connexion.&lt;br /&gt;
&lt;br /&gt;
=== Fonctionnement===&lt;br /&gt;
Lors d'un SSH par clé privée / clé publique&lt;br /&gt;
# le serveur ssh va indiquer au client &amp;quot;j'accepte les clés publiques suivantes&amp;quot; en lisant le fichier authorized_keys&lt;br /&gt;
# mon client va voir qu'il a la clé privée correspondant&lt;br /&gt;
# mon client me demander ma passphrase&lt;br /&gt;
# si la passphrase est bonn, mon client va établir le ssh sans me demander mon mot de passe user&lt;br /&gt;
&lt;br /&gt;
== Mémorisation de configuration SSH ==&lt;br /&gt;
&lt;br /&gt;
Il est possible de configurer SSH pour ne pas avoir à préciser le login ou le nom complet de la machine.&lt;br /&gt;
&lt;br /&gt;
Il faut éditer le fichier ''.ssh/config'' :&lt;br /&gt;
&lt;br /&gt;
 Host alias&lt;br /&gt;
 Hostname nom.complet.de.la.machine&lt;br /&gt;
 User login_distant&lt;br /&gt;
&lt;br /&gt;
On peut également y rajouter les options relatives au Proxy :&lt;br /&gt;
 ProxyCommand - PROXY:kuzh.polytechnique.fr:%h:%p,proxyport=8080&lt;br /&gt;
ou&lt;br /&gt;
 ProxyCommand connect -H kuzh.polytechnique.fr:8080 %h %p&lt;br /&gt;
ou celles relatives au transfert d'agent ssh :&lt;br /&gt;
 ForwardAgent yes&lt;br /&gt;
&lt;br /&gt;
Ainsi, &lt;br /&gt;
 ssh alias&lt;br /&gt;
sera traduit automatiquement en&lt;br /&gt;
 ssh -A -o ProxyCommand=&amp;quot;socat - PROXY:kuzh.polytechnique.fr:%h:%p,proxyport=8080&amp;quot; login_distant@nom.complet.de.la.machine&lt;br /&gt;
ou&lt;br /&gt;
 ssh -A -o ProxyCommand=&amp;quot;connect -H kuzh.polytechnique.fr:8080 %h %p&amp;quot; login_distant@nom.complet.de.la.machine&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Git&amp;diff=7156</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Git&amp;diff=7156"/>
		<updated>2012-10-11T22:34:42Z</updated>

		<summary type="html">&lt;p&gt;Arthur : /* Configuration globale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git est un [[VCS|système de contrôle de version]]. Assez proche de [[SVN]] par certains côtés, il présente néanmoins un grand nombre de différences.&lt;br /&gt;
&lt;br /&gt;
Avant de découvrir les spécificités de Git, il est nécessaire de connaître les concepts généraux des [[VCS|systèmes de contrôle de version]].&lt;br /&gt;
&lt;br /&gt;
Cette page donne un bref aperçu des fonctionnalités de Git. Un autre bon aperçu est disponible [http://giudoku.sourceforge.net/media/GitHandbook.pdf ici] (lien non BR)&lt;br /&gt;
&lt;br /&gt;
== Dépôts ==&lt;br /&gt;
&lt;br /&gt;
Alors que [[CVS]] et [[SVN]] sont des systèmes de versionnement centralisés (i.e un serveur contient le dépôt, et chaque utilisateur effectue un ''checkout'' depuis ce dépôt), Git est complètement décentralisé. Cela signifie que chaque contributeur a sa propre copie locale de tout l'historique d'un projet. Si aujourd'hui vous considérez que l'espace disque sur votre ordinateur est un problème, allez faire un tour, partez admirer les merveilles de la technologies qui nous entoure, et revenez demain. Sur cette page, tous les examples sont tirés du Git de [[Frankiz]], mais voici d'autres dépôts bien utiles :&lt;br /&gt;
* [http://www.github.com/ GitHub]&lt;br /&gt;
* [http://git.frankiz.net/ Frankiz]&lt;br /&gt;
* [http://git.polytechnique.org/ Polytechnique.org]&lt;br /&gt;
&lt;br /&gt;
== Récupérer le code d'un projet existant ==&lt;br /&gt;
&lt;br /&gt;
Pour télécharger un projet existant, il y a deux possibilités : avec un compte de développeur ou sans compte. Avec un compte SSH simple, il suffit d'exécuter la commande suivante :&lt;br /&gt;
 git clone mybeautifulname@git.frankiz.net:/hosting/git/frankiz&lt;br /&gt;
Sans compte, certains projets sont téléchargeables avec le protocole HTTP, mais vous ne pourrez pas uploader vos modifications.&lt;br /&gt;
 git clone http://git.frankiz.net/frankiz&lt;br /&gt;
&lt;br /&gt;
Cela crée un '''clone''' du dépôt d'origine (i.e une copie conforme), qui peut d'ailleurs servir de backup si le dépôt d'origine était perdu. Notre clone contient tout l'historique du dépôt depuis sa création, toutes les branches, etc. Cette première opération est très souple. On peut cloner des dépôt via SSH, HTTP, GIT, ou même en local le dépôt d'un autre utilisateur...&lt;br /&gt;
&lt;br /&gt;
Par exemple la commande suivante clone dans le dossier ''platal'' la branche ''core/master'' d'une version de Plat/al potientiellement modifiée par le vice-prez 2010 :&lt;br /&gt;
 git clone /home/2010/fishilico/dev/platal/.git platal -b core/master&lt;br /&gt;
&lt;br /&gt;
== Accéder à l'aide ==&lt;br /&gt;
Avant toute chose, il est essentiel de savoir où trouver de l'aide, d'autant plus que l'aide de Git est très bien faite.&lt;br /&gt;
* Sur internet, il y a le wikiBR, les pages de manuel ([http://linux.die.net/man/1/git sur Linux Die] par exemple) et le [http://book.git-scm.com/ Git Book]&lt;br /&gt;
* En terminal, ''git help'' pour une liste des commandes, ''git help cmd'' ou ''git cmd --help'' pour l'aide complète de la commande ''cmd'', ou encore simplement ''git cmd -h'' pour une aide courte sur la commande ''cmd''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quel est l'état de ma copie de travail ? ==&lt;br /&gt;
Ceci est la question que vous devez vous posez avant de reprendre après une pause votre travail sur un projet versionné. Il peut y avoir eu des changements sur le projet entre temps, des patchs mal faits en production, ... Pour cela, il y a trois commandes essentielles :&lt;br /&gt;
* Pour vérifier que le dépôt est correct, ''git status'' doit dire cela :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 nothing to commit (working directory clean)&lt;br /&gt;
* En cours de travail, la réponse ressemble plus à :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 # Changes not staged for commit:&lt;br /&gt;
 #   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)&lt;br /&gt;
 #   (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)&lt;br /&gt;
 #&lt;br /&gt;
 #	modified:   un-fichier-random.blah&lt;br /&gt;
 #&lt;br /&gt;
 # Untracked files:&lt;br /&gt;
 #   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to include in what will be committed)&lt;br /&gt;
 #&lt;br /&gt;
 #	un-fichier-chombier-ajouté.42&lt;br /&gt;
 no changes added to commit (use &amp;quot;git add&amp;quot; and/or &amp;quot;git commit -a&amp;quot;)&lt;br /&gt;
* Lire l'historique est bien pour savoir quel est le dernier commit&lt;br /&gt;
 git log&lt;br /&gt;
 commit 2a424aae1e746fb5f33de3b3bc3e8a31ee25c684&lt;br /&gt;
 Author: Nicolas Iooss &amp;lt;fishilico@eleves.polytechnique.fr&amp;gt;&lt;br /&gt;
 Date:   Fri Mar 9 00:27:35 2012 +0100&lt;br /&gt;
* Voir les différences entre la version sur le dépôt distant et celle de travail&lt;br /&gt;
 git diff&lt;br /&gt;
&lt;br /&gt;
De plus, après avoir téléchargé les derniers commits avec ''git fetch'', il est possible d'obtenir le message suivant :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 # Your branch is behind 'origin/master' by 42 commits, and can be fast-forwarded.&lt;br /&gt;
Cela signifie que la copie locale a 42 commits de retard sur le dépôt distant, mais qu'un ''git rebase origin/master'' suffit pour mettre à jour la copie locale.&lt;br /&gt;
&lt;br /&gt;
== Réinitialiser le dépôt ==&lt;br /&gt;
Pour restaurer un fichier, il suffit de le ''checkout'' à partir de l'index. En français, cela signifie que lorsque vous faites une modification sur un fichier, vous pouvez effacer les modifications et revenir la dernière version enregistrée dans l'index Git avec la commande :&lt;br /&gt;
 git checkout -- chemin/vers/mon/fichier.blih&lt;br /&gt;
Pour réinitialiser l'index dans l'état indiqué par une branche (comme ''master'' par exemple) sans modifier les fichier, il suffit d'écrire :&lt;br /&gt;
 git reset master&lt;br /&gt;
Si cela ne marche pas car des fichiers seront modifiés ou effacés, on peut forcer la main à Git, mais alors il faut être prêt à subir les conséqences que cela implique (perte des modifications non commitées)&lt;br /&gt;
 git reset --hard master&lt;br /&gt;
&lt;br /&gt;
== Mettre à jour la copie de travail ==&lt;br /&gt;
=== git fetch &amp;amp;&amp;amp; git rebase origin/master ===&lt;br /&gt;
Dans le cas général, vous travaillez sur la branche ''master'' et vous synchronisez votre projet sur un seul serveur. Si votre cas est plus compliqué, vous devez être suffisamment compétent pour vous débrouillez par vous-même. On disait donc... dans le cas simple, Git stocke en interne deux branches : ''master'' et ''origin/master''. Sur Frankiz, c'est un peu plus compliqué car il y a une branche de production, mais les développeurs n'utilisent que master.&lt;br /&gt;
 git branch -a&lt;br /&gt;
 * master&lt;br /&gt;
   remotes/origin/HEAD -&amp;gt; origin/master&lt;br /&gt;
   remotes/origin/f579e1971a66623b2948bf0e20c2e23481022b41&lt;br /&gt;
   remotes/origin/fkz2&lt;br /&gt;
   remotes/origin/kangz-h4ck3s&lt;br /&gt;
   remotes/origin/master&lt;br /&gt;
   remotes/origin/prod&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour sa copie de travail, il faut donc commencer par mettre à jour les branches distantes, avec '''au choix''' l'une des commandes suivantes&lt;br /&gt;
 git fetch&lt;br /&gt;
 git fetch origin&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut appliquer les éventuelles modifications locales à la suite de celles effectuées sur le dépôt, c'est le '''rebase'''.&lt;br /&gt;
 git rebase origin/master&lt;br /&gt;
Git essaiera alors d'appliquer les commits locaux successivement, en indiquant chaque fois qu'il y a un problème (conflit ou fichier supprimé). En cas de problème, il faut&lt;br /&gt;
# Résoudre le problème (les fichiers avec des conflits apparaîssent comme ''Changed but not updated'' dans ''git status'')&lt;br /&gt;
# Ajouter les fichiers (''git add'')&lt;br /&gt;
# Indiquer à git de continuer : ''git rebase --continue''&lt;br /&gt;
&lt;br /&gt;
Ceci permet de transformer l'état suivant (les ''O'' sont les commits, ''A'' le moment où les deux versions ont commencé à diverger, ''B'' la version du dépôt, ''E'' la version locale, ''C'' et ''D'' des commits locaux)&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /&lt;br /&gt;
 -O--A--O--B&lt;br /&gt;
&lt;br /&gt;
En l'état plus propre :&lt;br /&gt;
 -O--A--O--B--C'--D'--E'&lt;br /&gt;
&lt;br /&gt;
Avec C, D et E convertis en C', D' et E' : ils ont été modifiés pour être des modifications relatives à B au lieu de A.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi il ne faut JAMAIS utiliser git pull ===&lt;br /&gt;
Certains développeurs utilisent la commande ''git pull'' pour mettre à jour leur dépôt. Cette pratique est justifiée lorsque la copie de travail était propre (sans commit en attente de push entre autres), mais sinon, cela peut avoir des conséquences très graves et sales. En effet, ''git pull' est assimilé à la succession de commandes suivantes :&lt;br /&gt;
 git fetch origin &amp;amp;&amp;amp; git merge origin/master&lt;br /&gt;
Le problème est le merge. En reprenant les schémas précédents, cela transforme l'état suivant :&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /&lt;br /&gt;
 -O--A--O--B&lt;br /&gt;
&lt;br /&gt;
en :&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /        \&lt;br /&gt;
 -O--A--O--B----M&lt;br /&gt;
&lt;br /&gt;
où M est le commit ''de fusion de branches''. '''Cela est très moche et à éviter absolument'''. Si vous vous retrouvez dans cette suituation (pour vérifier : ''git log''), vous pouvez toujours tenter un ''git rebase origin/master'' qui peut fonctionner si le ''merge'' était trivial (sans conflit). Sinon, un ''git reset --hard origin/master'' s'impose pour assurer votre salut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sauvegarder des modifications locales (git stash) ===&lt;br /&gt;
Avant de faire un merge particulièrement délicat, ou si l'on doit résoudre un bug alors que l'on a pas mal de modifications non commitées en cours, il est parfois utile de sauvegarder l'état courant de la copie de travail.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut utiliser '''avant''' un changement (avec ''git rebase'' par exemple) :&lt;br /&gt;
 git stash&lt;br /&gt;
Une fois les modifications effectuées, on peut restorer la copie locale à l'état sauvegardé avec :&lt;br /&gt;
 git stash pop&lt;br /&gt;
&lt;br /&gt;
== Effectuer un commit ==&lt;br /&gt;
Un '''commit''' est un ensemble de fichiers modifiés. Cela permet plus de cohérence dans le suivi des versions. Par exemple, si l'ajout d'une fonctionnalité sur Frankiz modifie les fichiers ''blah'', ''blih'' et ''bloh'', le ''commit'' regroupe les modifications de ces trois fichiers, et associe à cette modification une date et un auteur.&lt;br /&gt;
&lt;br /&gt;
Pour effectuer un commit, il faut :&lt;br /&gt;
* Vérifier l'état de la copie de travail, pour ne commiter que ce qui est nécessaire&lt;br /&gt;
 git status&lt;br /&gt;
 git diff&lt;br /&gt;
* Indiquer à Git quels fichiers feront partie du commit ; ceci permet de ne committer que les modifications de quelques fichiers&lt;br /&gt;
 git add path/to/blih path/to/blah path/to/bloh&lt;br /&gt;
* Vérifier que l'on a ajouté les fichiers que l'on voulait :&lt;br /&gt;
 git status&lt;br /&gt;
* Faire le commit (le ''-s'' ajoute une ligne ''Signed of by'' dans le message, pour pouvoir retrouver plus efficacement l'auteur réel du commit)&lt;br /&gt;
 git commit -s&lt;br /&gt;
* Cette commande ouvre un éditeur (vi, nano ou emacs selon la configuration de la variable EDITOR). Il faut alors entrer un bref descriptif du commit. '''Pour certains projets (dont Frankiz), les conventions de codage obligent les développeurs à écrire les descriptions en anglais.''' Il est un bon usage de s'adapter en conséquence, car un commit peut être refusé en production s'il est mal fait.&lt;br /&gt;
* Mettre à jour la copie locale avec le dépôt distant (cela décale le nouveau commit à la fin). '''IL NE FAUT SURTOUT PAS FAIRE DE git pull OU DE git merge ICI'''&lt;br /&gt;
 git fetch&lt;br /&gt;
 git rebase origin/master&lt;br /&gt;
* Transmettre les commits au dépôt d'origine&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
La dernière commande provient du fait que git n'est pas centralisé : il n'envoie pas les modifications locales au dépôt parent spontanément.&lt;br /&gt;
&lt;br /&gt;
Ceci permet de faire quelques modifications locales puis de n'envoyer cela au reste des développeurs que lorsque les modifications sont stables et complètes, par exemple.&lt;br /&gt;
&lt;br /&gt;
== Gérer les branches ==&lt;br /&gt;
On peut voir la liste des branches accessibles avec :&lt;br /&gt;
 git branch -a&lt;br /&gt;
* La ligne avec une étoile est la branche courante&lt;br /&gt;
* Les lignes blanches sont les branches ''locales'' (elles suivent généralement une branche distante)&lt;br /&gt;
* Les lignes rouges (si les couleurs sont activées) sont les branches distantes.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer une autre branche, il faut d'abord l'ajouter localement :&lt;br /&gt;
 git checkout -b NomLocal origin/NomDistant&lt;br /&gt;
&lt;br /&gt;
Cela aura également pour effet de basculer sur la branche NomLocal.&lt;br /&gt;
Les modifications que l'on avait effectuées sont bien entendu conservées.&lt;br /&gt;
&lt;br /&gt;
Une fois la branche ajoutée, on peut basculer de branche en branche à l'aide de :&lt;br /&gt;
 git checkout NomLocal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Créer un dépôt ==&lt;br /&gt;
Contrairement à [[SVN]] où il faut installer un serveur subversion, créer un dépôt Git est très rapide : dans le dossier que l'on souhaite versionner, il suffit de taper&lt;br /&gt;
 git init&lt;br /&gt;
Et voilà, le dossier est versionné : on peut donc commencer à faire des modifications, des commits, etc. (bien entendu, on ne peut pas ''pusher'' ses commits, puisqu'il n'y a pas de serveur distant).&lt;br /&gt;
&lt;br /&gt;
Cette particularité rend Git très efficace pour versionner un petit projet, un exercice de TD, etc.&lt;br /&gt;
&lt;br /&gt;
Pour créer un dépôt qui peut être cloné, il faut exécuter les commandes suivantes :&lt;br /&gt;
 git init --bare mon_projet&lt;br /&gt;
 cd mon_projet &amp;amp;&amp;amp; git update-server-info&lt;br /&gt;
&lt;br /&gt;
Enfin, pour configurer un serveur HTTP (gitweb), il ne faut pas oublier de créer un fichier vide '''git-daemon-export-ok''' dans le dossier, afin de permettre le clonage.&lt;br /&gt;
&lt;br /&gt;
== Structure interne ==&lt;br /&gt;
&lt;br /&gt;
Git stocke les commits de manière très particulière : un commit correspond à peu près à une sauvegarde de l'état des fichiers, à un message, et à une référence vers le commit parent.&lt;br /&gt;
Contrairemant à [[SVN]], il n'y a donc pas de notion de numéro de révision : chaque commit est identifié par une chaîne hexadécimale de 40 caractères (par exemple : ''04fd02e59b1bdc430c7a7dcc1ca9f4cbc2b04037'' )&lt;br /&gt;
&lt;br /&gt;
Un ''tag'' est en fait un nom «lisible» donné à un ''commit'' ; une ''branche'' indique également le ''commit'' principal d'une branche.&lt;br /&gt;
&lt;br /&gt;
== Du bon usage de gitignore ==&lt;br /&gt;
Dans un projet, il est inutile de versionner les fichiers temporaires et les fichiers compilés (qu'ils soient binaires ou non). On utilise généralement un Makefile pour créer ces fichiers. Pour éviter de les versionner, il suffit d'utiliser un fichier ''.gitignore'' bien placé. Généralement, chaque projet a un tel fichier dans son dossier principal. Voici par exemple un extrait du gitignore de Frankiz :&lt;br /&gt;
 configs/frankiz.conf&lt;br /&gt;
 htdocs/.htaccess&lt;br /&gt;
 htdocs/data/*&lt;br /&gt;
 htdocs/css/*&lt;br /&gt;
 spool/*&lt;br /&gt;
 upgrade/2.0.0_to_3.0.0/unversionned&lt;br /&gt;
&lt;br /&gt;
== Configuration globale ==&lt;br /&gt;
Si vous avez déjà commitez, vous aurez certainement remarqué qu'il faut utiliser ''git config'' pour configurer vos informations personnelles. Ainsi, les deux premières commandes que tout utilisateur doit taper avant de faire un commit sont :&lt;br /&gt;
 git config --global user.name &amp;quot;Prénom Nom de famille&amp;quot;&lt;br /&gt;
 git config --global user.email &amp;quot;prenom.nom.promo@polytechnique.org&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ensuite, si vous aimez les couleurs, vous avez envie de taper cette commande :&lt;br /&gt;
 git config --global color.ui auto&lt;br /&gt;
&lt;br /&gt;
Enfin, si vous en avez assez des projets qui ne mettent pas les fichiers temporaires dans le gitignore, vous pouvez configurer un fichier gitignore global. Si votre ''/home/user/.gitignore_global'' ressemble à&lt;br /&gt;
 *~&lt;br /&gt;
 *.swp&lt;br /&gt;
 *.tmp&lt;br /&gt;
il suffit de taper :&lt;br /&gt;
 git config --global core.excludesfile /home/user/.gitignore_global&lt;br /&gt;
&lt;br /&gt;
Tout cela permet de gérer la configuration globale, visible par&lt;br /&gt;
 git config --global -l&lt;br /&gt;
En enlevant ''--global'' dans toutes les commandes précédentes, on configure la copie locale.&lt;br /&gt;
&lt;br /&gt;
=== Exemple de configuration ===&lt;br /&gt;
Voici un exemple de fichier ~/.gitconfig (qui stocke la configuration ''--global'', le même format peut être utilisé dans les fichier ''$REPO/.git/config'' de chaque dépot) :&lt;br /&gt;
 [gc]&lt;br /&gt;
    auto = 1&lt;br /&gt;
 [color]&lt;br /&gt;
    ui = true&lt;br /&gt;
 [color &amp;quot;diff&amp;quot;]&lt;br /&gt;
    whitespace = red reverse&lt;br /&gt;
 [core]&lt;br /&gt;
    whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eol&lt;br /&gt;
 [alias]&lt;br /&gt;
    st = status&lt;br /&gt;
    ci = commit&lt;br /&gt;
    br = branch&lt;br /&gt;
    co = checkout&lt;br /&gt;
    df = diff&lt;br /&gt;
    dc = diff --cached&lt;br /&gt;
    lg = log -p&lt;br /&gt;
    lo = log --graph --decorate --pretty=oneline --abbrev-commit -n 10&lt;br /&gt;
    lol = log --graph --decorate --pretty=oneline --abbrev-commit&lt;br /&gt;
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all&lt;br /&gt;
    ls = ls-files&lt;br /&gt;
    # Show files ignored by git:&lt;br /&gt;
    ign = ls-files -o -i --exclude-standard&lt;br /&gt;
    amend = commit --amend -C HEAD&lt;br /&gt;
 [branch]&lt;br /&gt;
    autosetuprebase = always&lt;br /&gt;
&lt;br /&gt;
== Utiliser le proxy de l'X avec Git ==&lt;br /&gt;
Si vous hébergez un projet sur [http://www.github.com GitHub], vous avez envie de dire à Git de se connecter à GitHub en SSH en passant par le proxy de l'X (qui est [http://kuzh.polytechnique.fr:8080 kuzh:8080]). Pour cela, il suffit de configurer le client SSH pour utiliser le proxy à chaque connexion vers github.com. Cela s'effecute par le fichier de configuration suivant dans /home/user/.ssh/config (adaptez avec votre dossier personnel)&lt;br /&gt;
 Host github.com&lt;br /&gt;
     ProxyCommand socat - PROXY:kuzh.polytechnique.fr:%h:%p,proxyport=8080&lt;br /&gt;
&lt;br /&gt;
'''Si vous souhaitez uniquement cloner un dépôt GitHub''' dont vous n'êtes pas contributeur, il suffit d'utiliser le lien HTTPS en ligne de commande, en précisant le proxy.&lt;br /&gt;
 export https_proxy=http://kuzh.polytechnique.fr:8080&lt;br /&gt;
 git clone https://github.com/BinetReseau/frankiz.git&lt;br /&gt;
&lt;br /&gt;
= Pour Windows =&lt;br /&gt;
&lt;br /&gt;
Pour utiliser Git sur Windows, on peut par exemple télécharger MSys Git : [http://msysgit.github.com/ http://msysgit.github.com/].&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Git&amp;diff=7155</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Git&amp;diff=7155"/>
		<updated>2012-10-11T22:31:03Z</updated>

		<summary type="html">&lt;p&gt;Arthur : /* Du bon usage de gitignore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git est un [[VCS|système de contrôle de version]]. Assez proche de [[SVN]] par certains côtés, il présente néanmoins un grand nombre de différences.&lt;br /&gt;
&lt;br /&gt;
Avant de découvrir les spécificités de Git, il est nécessaire de connaître les concepts généraux des [[VCS|systèmes de contrôle de version]].&lt;br /&gt;
&lt;br /&gt;
Cette page donne un bref aperçu des fonctionnalités de Git. Un autre bon aperçu est disponible [http://giudoku.sourceforge.net/media/GitHandbook.pdf ici] (lien non BR)&lt;br /&gt;
&lt;br /&gt;
== Dépôts ==&lt;br /&gt;
&lt;br /&gt;
Alors que [[CVS]] et [[SVN]] sont des systèmes de versionnement centralisés (i.e un serveur contient le dépôt, et chaque utilisateur effectue un ''checkout'' depuis ce dépôt), Git est complètement décentralisé. Cela signifie que chaque contributeur a sa propre copie locale de tout l'historique d'un projet. Si aujourd'hui vous considérez que l'espace disque sur votre ordinateur est un problème, allez faire un tour, partez admirer les merveilles de la technologies qui nous entoure, et revenez demain. Sur cette page, tous les examples sont tirés du Git de [[Frankiz]], mais voici d'autres dépôts bien utiles :&lt;br /&gt;
* [http://www.github.com/ GitHub]&lt;br /&gt;
* [http://git.frankiz.net/ Frankiz]&lt;br /&gt;
* [http://git.polytechnique.org/ Polytechnique.org]&lt;br /&gt;
&lt;br /&gt;
== Récupérer le code d'un projet existant ==&lt;br /&gt;
&lt;br /&gt;
Pour télécharger un projet existant, il y a deux possibilités : avec un compte de développeur ou sans compte. Avec un compte SSH simple, il suffit d'exécuter la commande suivante :&lt;br /&gt;
 git clone mybeautifulname@git.frankiz.net:/hosting/git/frankiz&lt;br /&gt;
Sans compte, certains projets sont téléchargeables avec le protocole HTTP, mais vous ne pourrez pas uploader vos modifications.&lt;br /&gt;
 git clone http://git.frankiz.net/frankiz&lt;br /&gt;
&lt;br /&gt;
Cela crée un '''clone''' du dépôt d'origine (i.e une copie conforme), qui peut d'ailleurs servir de backup si le dépôt d'origine était perdu. Notre clone contient tout l'historique du dépôt depuis sa création, toutes les branches, etc. Cette première opération est très souple. On peut cloner des dépôt via SSH, HTTP, GIT, ou même en local le dépôt d'un autre utilisateur...&lt;br /&gt;
&lt;br /&gt;
Par exemple la commande suivante clone dans le dossier ''platal'' la branche ''core/master'' d'une version de Plat/al potientiellement modifiée par le vice-prez 2010 :&lt;br /&gt;
 git clone /home/2010/fishilico/dev/platal/.git platal -b core/master&lt;br /&gt;
&lt;br /&gt;
== Accéder à l'aide ==&lt;br /&gt;
Avant toute chose, il est essentiel de savoir où trouver de l'aide, d'autant plus que l'aide de Git est très bien faite.&lt;br /&gt;
* Sur internet, il y a le wikiBR, les pages de manuel ([http://linux.die.net/man/1/git sur Linux Die] par exemple) et le [http://book.git-scm.com/ Git Book]&lt;br /&gt;
* En terminal, ''git help'' pour une liste des commandes, ''git help cmd'' ou ''git cmd --help'' pour l'aide complète de la commande ''cmd'', ou encore simplement ''git cmd -h'' pour une aide courte sur la commande ''cmd''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quel est l'état de ma copie de travail ? ==&lt;br /&gt;
Ceci est la question que vous devez vous posez avant de reprendre après une pause votre travail sur un projet versionné. Il peut y avoir eu des changements sur le projet entre temps, des patchs mal faits en production, ... Pour cela, il y a trois commandes essentielles :&lt;br /&gt;
* Pour vérifier que le dépôt est correct, ''git status'' doit dire cela :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 nothing to commit (working directory clean)&lt;br /&gt;
* En cours de travail, la réponse ressemble plus à :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 # Changes not staged for commit:&lt;br /&gt;
 #   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)&lt;br /&gt;
 #   (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)&lt;br /&gt;
 #&lt;br /&gt;
 #	modified:   un-fichier-random.blah&lt;br /&gt;
 #&lt;br /&gt;
 # Untracked files:&lt;br /&gt;
 #   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to include in what will be committed)&lt;br /&gt;
 #&lt;br /&gt;
 #	un-fichier-chombier-ajouté.42&lt;br /&gt;
 no changes added to commit (use &amp;quot;git add&amp;quot; and/or &amp;quot;git commit -a&amp;quot;)&lt;br /&gt;
* Lire l'historique est bien pour savoir quel est le dernier commit&lt;br /&gt;
 git log&lt;br /&gt;
 commit 2a424aae1e746fb5f33de3b3bc3e8a31ee25c684&lt;br /&gt;
 Author: Nicolas Iooss &amp;lt;fishilico@eleves.polytechnique.fr&amp;gt;&lt;br /&gt;
 Date:   Fri Mar 9 00:27:35 2012 +0100&lt;br /&gt;
* Voir les différences entre la version sur le dépôt distant et celle de travail&lt;br /&gt;
 git diff&lt;br /&gt;
&lt;br /&gt;
De plus, après avoir téléchargé les derniers commits avec ''git fetch'', il est possible d'obtenir le message suivant :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 # Your branch is behind 'origin/master' by 42 commits, and can be fast-forwarded.&lt;br /&gt;
Cela signifie que la copie locale a 42 commits de retard sur le dépôt distant, mais qu'un ''git rebase origin/master'' suffit pour mettre à jour la copie locale.&lt;br /&gt;
&lt;br /&gt;
== Réinitialiser le dépôt ==&lt;br /&gt;
Pour restaurer un fichier, il suffit de le ''checkout'' à partir de l'index. En français, cela signifie que lorsque vous faites une modification sur un fichier, vous pouvez effacer les modifications et revenir la dernière version enregistrée dans l'index Git avec la commande :&lt;br /&gt;
 git checkout -- chemin/vers/mon/fichier.blih&lt;br /&gt;
Pour réinitialiser l'index dans l'état indiqué par une branche (comme ''master'' par exemple) sans modifier les fichier, il suffit d'écrire :&lt;br /&gt;
 git reset master&lt;br /&gt;
Si cela ne marche pas car des fichiers seront modifiés ou effacés, on peut forcer la main à Git, mais alors il faut être prêt à subir les conséqences que cela implique (perte des modifications non commitées)&lt;br /&gt;
 git reset --hard master&lt;br /&gt;
&lt;br /&gt;
== Mettre à jour la copie de travail ==&lt;br /&gt;
=== git fetch &amp;amp;&amp;amp; git rebase origin/master ===&lt;br /&gt;
Dans le cas général, vous travaillez sur la branche ''master'' et vous synchronisez votre projet sur un seul serveur. Si votre cas est plus compliqué, vous devez être suffisamment compétent pour vous débrouillez par vous-même. On disait donc... dans le cas simple, Git stocke en interne deux branches : ''master'' et ''origin/master''. Sur Frankiz, c'est un peu plus compliqué car il y a une branche de production, mais les développeurs n'utilisent que master.&lt;br /&gt;
 git branch -a&lt;br /&gt;
 * master&lt;br /&gt;
   remotes/origin/HEAD -&amp;gt; origin/master&lt;br /&gt;
   remotes/origin/f579e1971a66623b2948bf0e20c2e23481022b41&lt;br /&gt;
   remotes/origin/fkz2&lt;br /&gt;
   remotes/origin/kangz-h4ck3s&lt;br /&gt;
   remotes/origin/master&lt;br /&gt;
   remotes/origin/prod&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour sa copie de travail, il faut donc commencer par mettre à jour les branches distantes, avec '''au choix''' l'une des commandes suivantes&lt;br /&gt;
 git fetch&lt;br /&gt;
 git fetch origin&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut appliquer les éventuelles modifications locales à la suite de celles effectuées sur le dépôt, c'est le '''rebase'''.&lt;br /&gt;
 git rebase origin/master&lt;br /&gt;
Git essaiera alors d'appliquer les commits locaux successivement, en indiquant chaque fois qu'il y a un problème (conflit ou fichier supprimé). En cas de problème, il faut&lt;br /&gt;
# Résoudre le problème (les fichiers avec des conflits apparaîssent comme ''Changed but not updated'' dans ''git status'')&lt;br /&gt;
# Ajouter les fichiers (''git add'')&lt;br /&gt;
# Indiquer à git de continuer : ''git rebase --continue''&lt;br /&gt;
&lt;br /&gt;
Ceci permet de transformer l'état suivant (les ''O'' sont les commits, ''A'' le moment où les deux versions ont commencé à diverger, ''B'' la version du dépôt, ''E'' la version locale, ''C'' et ''D'' des commits locaux)&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /&lt;br /&gt;
 -O--A--O--B&lt;br /&gt;
&lt;br /&gt;
En l'état plus propre :&lt;br /&gt;
 -O--A--O--B--C'--D'--E'&lt;br /&gt;
&lt;br /&gt;
Avec C, D et E convertis en C', D' et E' : ils ont été modifiés pour être des modifications relatives à B au lieu de A.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi il ne faut JAMAIS utiliser git pull ===&lt;br /&gt;
Certains développeurs utilisent la commande ''git pull'' pour mettre à jour leur dépôt. Cette pratique est justifiée lorsque la copie de travail était propre (sans commit en attente de push entre autres), mais sinon, cela peut avoir des conséquences très graves et sales. En effet, ''git pull' est assimilé à la succession de commandes suivantes :&lt;br /&gt;
 git fetch origin &amp;amp;&amp;amp; git merge origin/master&lt;br /&gt;
Le problème est le merge. En reprenant les schémas précédents, cela transforme l'état suivant :&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /&lt;br /&gt;
 -O--A--O--B&lt;br /&gt;
&lt;br /&gt;
en :&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /        \&lt;br /&gt;
 -O--A--O--B----M&lt;br /&gt;
&lt;br /&gt;
où M est le commit ''de fusion de branches''. '''Cela est très moche et à éviter absolument'''. Si vous vous retrouvez dans cette suituation (pour vérifier : ''git log''), vous pouvez toujours tenter un ''git rebase origin/master'' qui peut fonctionner si le ''merge'' était trivial (sans conflit). Sinon, un ''git reset --hard origin/master'' s'impose pour assurer votre salut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sauvegarder des modifications locales (git stash) ===&lt;br /&gt;
Avant de faire un merge particulièrement délicat, ou si l'on doit résoudre un bug alors que l'on a pas mal de modifications non commitées en cours, il est parfois utile de sauvegarder l'état courant de la copie de travail.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut utiliser '''avant''' un changement (avec ''git rebase'' par exemple) :&lt;br /&gt;
 git stash&lt;br /&gt;
Une fois les modifications effectuées, on peut restorer la copie locale à l'état sauvegardé avec :&lt;br /&gt;
 git stash pop&lt;br /&gt;
&lt;br /&gt;
== Effectuer un commit ==&lt;br /&gt;
Un '''commit''' est un ensemble de fichiers modifiés. Cela permet plus de cohérence dans le suivi des versions. Par exemple, si l'ajout d'une fonctionnalité sur Frankiz modifie les fichiers ''blah'', ''blih'' et ''bloh'', le ''commit'' regroupe les modifications de ces trois fichiers, et associe à cette modification une date et un auteur.&lt;br /&gt;
&lt;br /&gt;
Pour effectuer un commit, il faut :&lt;br /&gt;
* Vérifier l'état de la copie de travail, pour ne commiter que ce qui est nécessaire&lt;br /&gt;
 git status&lt;br /&gt;
 git diff&lt;br /&gt;
* Indiquer à Git quels fichiers feront partie du commit ; ceci permet de ne committer que les modifications de quelques fichiers&lt;br /&gt;
 git add path/to/blih path/to/blah path/to/bloh&lt;br /&gt;
* Vérifier que l'on a ajouté les fichiers que l'on voulait :&lt;br /&gt;
 git status&lt;br /&gt;
* Faire le commit (le ''-s'' ajoute une ligne ''Signed of by'' dans le message, pour pouvoir retrouver plus efficacement l'auteur réel du commit)&lt;br /&gt;
 git commit -s&lt;br /&gt;
* Cette commande ouvre un éditeur (vi, nano ou emacs selon la configuration de la variable EDITOR). Il faut alors entrer un bref descriptif du commit. '''Pour certains projets (dont Frankiz), les conventions de codage obligent les développeurs à écrire les descriptions en anglais.''' Il est un bon usage de s'adapter en conséquence, car un commit peut être refusé en production s'il est mal fait.&lt;br /&gt;
* Mettre à jour la copie locale avec le dépôt distant (cela décale le nouveau commit à la fin). '''IL NE FAUT SURTOUT PAS FAIRE DE git pull OU DE git merge ICI'''&lt;br /&gt;
 git fetch&lt;br /&gt;
 git rebase origin/master&lt;br /&gt;
* Transmettre les commits au dépôt d'origine&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
La dernière commande provient du fait que git n'est pas centralisé : il n'envoie pas les modifications locales au dépôt parent spontanément.&lt;br /&gt;
&lt;br /&gt;
Ceci permet de faire quelques modifications locales puis de n'envoyer cela au reste des développeurs que lorsque les modifications sont stables et complètes, par exemple.&lt;br /&gt;
&lt;br /&gt;
== Gérer les branches ==&lt;br /&gt;
On peut voir la liste des branches accessibles avec :&lt;br /&gt;
 git branch -a&lt;br /&gt;
* La ligne avec une étoile est la branche courante&lt;br /&gt;
* Les lignes blanches sont les branches ''locales'' (elles suivent généralement une branche distante)&lt;br /&gt;
* Les lignes rouges (si les couleurs sont activées) sont les branches distantes.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer une autre branche, il faut d'abord l'ajouter localement :&lt;br /&gt;
 git checkout -b NomLocal origin/NomDistant&lt;br /&gt;
&lt;br /&gt;
Cela aura également pour effet de basculer sur la branche NomLocal.&lt;br /&gt;
Les modifications que l'on avait effectuées sont bien entendu conservées.&lt;br /&gt;
&lt;br /&gt;
Une fois la branche ajoutée, on peut basculer de branche en branche à l'aide de :&lt;br /&gt;
 git checkout NomLocal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Créer un dépôt ==&lt;br /&gt;
Contrairement à [[SVN]] où il faut installer un serveur subversion, créer un dépôt Git est très rapide : dans le dossier que l'on souhaite versionner, il suffit de taper&lt;br /&gt;
 git init&lt;br /&gt;
Et voilà, le dossier est versionné : on peut donc commencer à faire des modifications, des commits, etc. (bien entendu, on ne peut pas ''pusher'' ses commits, puisqu'il n'y a pas de serveur distant).&lt;br /&gt;
&lt;br /&gt;
Cette particularité rend Git très efficace pour versionner un petit projet, un exercice de TD, etc.&lt;br /&gt;
&lt;br /&gt;
Pour créer un dépôt qui peut être cloné, il faut exécuter les commandes suivantes :&lt;br /&gt;
 git init --bare mon_projet&lt;br /&gt;
 cd mon_projet &amp;amp;&amp;amp; git update-server-info&lt;br /&gt;
&lt;br /&gt;
Enfin, pour configurer un serveur HTTP (gitweb), il ne faut pas oublier de créer un fichier vide '''git-daemon-export-ok''' dans le dossier, afin de permettre le clonage.&lt;br /&gt;
&lt;br /&gt;
== Structure interne ==&lt;br /&gt;
&lt;br /&gt;
Git stocke les commits de manière très particulière : un commit correspond à peu près à une sauvegarde de l'état des fichiers, à un message, et à une référence vers le commit parent.&lt;br /&gt;
Contrairemant à [[SVN]], il n'y a donc pas de notion de numéro de révision : chaque commit est identifié par une chaîne hexadécimale de 40 caractères (par exemple : ''04fd02e59b1bdc430c7a7dcc1ca9f4cbc2b04037'' )&lt;br /&gt;
&lt;br /&gt;
Un ''tag'' est en fait un nom «lisible» donné à un ''commit'' ; une ''branche'' indique également le ''commit'' principal d'une branche.&lt;br /&gt;
&lt;br /&gt;
== Du bon usage de gitignore ==&lt;br /&gt;
Dans un projet, il est inutile de versionner les fichiers temporaires et les fichiers compilés (qu'ils soient binaires ou non). On utilise généralement un Makefile pour créer ces fichiers. Pour éviter de les versionner, il suffit d'utiliser un fichier ''.gitignore'' bien placé. Généralement, chaque projet a un tel fichier dans son dossier principal. Voici par exemple un extrait du gitignore de Frankiz :&lt;br /&gt;
 configs/frankiz.conf&lt;br /&gt;
 htdocs/.htaccess&lt;br /&gt;
 htdocs/data/*&lt;br /&gt;
 htdocs/css/*&lt;br /&gt;
 spool/*&lt;br /&gt;
 upgrade/2.0.0_to_3.0.0/unversionned&lt;br /&gt;
&lt;br /&gt;
== Configuration globale ==&lt;br /&gt;
Si vous avez déjà commitez, vous aurez certainement remarqué qu'il faut utiliser ''git config'' pour configurer vos informations personnelles. Ainsi, les deux premières commandes que tout utilisateur doit taper avant de faire un commit sont :&lt;br /&gt;
 git config --global user.name &amp;quot;Prénom Nom de famille&amp;quot;&lt;br /&gt;
 git config --global user.email &amp;quot;prenom.nom.promo@polytechnique.org&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ensuite, si vous aimez les couleurs, vous avez envie de taper cette commande :&lt;br /&gt;
 git config --global color.ui auto&lt;br /&gt;
&lt;br /&gt;
Enfin, si vous en avez assez des projets qui ne mettent pas les fichiers temporaires dans le gitignore, vous pouvez configurer un fichier gitignore global. Si votre ''/home/user/.gitignore_global'' ressemble à&lt;br /&gt;
 *~&lt;br /&gt;
 *.swp&lt;br /&gt;
 *.tmp&lt;br /&gt;
il suffit de taper :&lt;br /&gt;
 git config --global core.excludesfile /home/user/.gitignore_global&lt;br /&gt;
&lt;br /&gt;
Tout cela permet de gérer la configuration globale, visible par&lt;br /&gt;
 git config --global -l&lt;br /&gt;
En enlevant ''--global'' dans toutes les commandes précédentes, on configure la copie locale.&lt;br /&gt;
&lt;br /&gt;
== Utiliser le proxy de l'X avec Git ==&lt;br /&gt;
Si vous hébergez un projet sur [http://www.github.com GitHub], vous avez envie de dire à Git de se connecter à GitHub en SSH en passant par le proxy de l'X (qui est [http://kuzh.polytechnique.fr:8080 kuzh:8080]). Pour cela, il suffit de configurer le client SSH pour utiliser le proxy à chaque connexion vers github.com. Cela s'effecute par le fichier de configuration suivant dans /home/user/.ssh/config (adaptez avec votre dossier personnel)&lt;br /&gt;
 Host github.com&lt;br /&gt;
     ProxyCommand socat - PROXY:kuzh.polytechnique.fr:%h:%p,proxyport=8080&lt;br /&gt;
&lt;br /&gt;
'''Si vous souhaitez uniquement cloner un dépôt GitHub''' dont vous n'êtes pas contributeur, il suffit d'utiliser le lien HTTPS en ligne de commande, en précisant le proxy.&lt;br /&gt;
 export https_proxy=http://kuzh.polytechnique.fr:8080&lt;br /&gt;
 git clone https://github.com/BinetReseau/frankiz.git&lt;br /&gt;
&lt;br /&gt;
= Pour Windows =&lt;br /&gt;
&lt;br /&gt;
Pour utiliser Git sur Windows, on peut par exemple télécharger MSys Git : [http://msysgit.github.com/ http://msysgit.github.com/].&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Git&amp;diff=7154</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Git&amp;diff=7154"/>
		<updated>2012-10-11T22:28:53Z</updated>

		<summary type="html">&lt;p&gt;Arthur : /* Du bon usage de gitignore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git est un [[VCS|système de contrôle de version]]. Assez proche de [[SVN]] par certains côtés, il présente néanmoins un grand nombre de différences.&lt;br /&gt;
&lt;br /&gt;
Avant de découvrir les spécificités de Git, il est nécessaire de connaître les concepts généraux des [[VCS|systèmes de contrôle de version]].&lt;br /&gt;
&lt;br /&gt;
Cette page donne un bref aperçu des fonctionnalités de Git. Un autre bon aperçu est disponible [http://giudoku.sourceforge.net/media/GitHandbook.pdf ici] (lien non BR)&lt;br /&gt;
&lt;br /&gt;
== Dépôts ==&lt;br /&gt;
&lt;br /&gt;
Alors que [[CVS]] et [[SVN]] sont des systèmes de versionnement centralisés (i.e un serveur contient le dépôt, et chaque utilisateur effectue un ''checkout'' depuis ce dépôt), Git est complètement décentralisé. Cela signifie que chaque contributeur a sa propre copie locale de tout l'historique d'un projet. Si aujourd'hui vous considérez que l'espace disque sur votre ordinateur est un problème, allez faire un tour, partez admirer les merveilles de la technologies qui nous entoure, et revenez demain. Sur cette page, tous les examples sont tirés du Git de [[Frankiz]], mais voici d'autres dépôts bien utiles :&lt;br /&gt;
* [http://www.github.com/ GitHub]&lt;br /&gt;
* [http://git.frankiz.net/ Frankiz]&lt;br /&gt;
* [http://git.polytechnique.org/ Polytechnique.org]&lt;br /&gt;
&lt;br /&gt;
== Récupérer le code d'un projet existant ==&lt;br /&gt;
&lt;br /&gt;
Pour télécharger un projet existant, il y a deux possibilités : avec un compte de développeur ou sans compte. Avec un compte SSH simple, il suffit d'exécuter la commande suivante :&lt;br /&gt;
 git clone mybeautifulname@git.frankiz.net:/hosting/git/frankiz&lt;br /&gt;
Sans compte, certains projets sont téléchargeables avec le protocole HTTP, mais vous ne pourrez pas uploader vos modifications.&lt;br /&gt;
 git clone http://git.frankiz.net/frankiz&lt;br /&gt;
&lt;br /&gt;
Cela crée un '''clone''' du dépôt d'origine (i.e une copie conforme), qui peut d'ailleurs servir de backup si le dépôt d'origine était perdu. Notre clone contient tout l'historique du dépôt depuis sa création, toutes les branches, etc. Cette première opération est très souple. On peut cloner des dépôt via SSH, HTTP, GIT, ou même en local le dépôt d'un autre utilisateur...&lt;br /&gt;
&lt;br /&gt;
Par exemple la commande suivante clone dans le dossier ''platal'' la branche ''core/master'' d'une version de Plat/al potientiellement modifiée par le vice-prez 2010 :&lt;br /&gt;
 git clone /home/2010/fishilico/dev/platal/.git platal -b core/master&lt;br /&gt;
&lt;br /&gt;
== Accéder à l'aide ==&lt;br /&gt;
Avant toute chose, il est essentiel de savoir où trouver de l'aide, d'autant plus que l'aide de Git est très bien faite.&lt;br /&gt;
* Sur internet, il y a le wikiBR, les pages de manuel ([http://linux.die.net/man/1/git sur Linux Die] par exemple) et le [http://book.git-scm.com/ Git Book]&lt;br /&gt;
* En terminal, ''git help'' pour une liste des commandes, ''git help cmd'' ou ''git cmd --help'' pour l'aide complète de la commande ''cmd'', ou encore simplement ''git cmd -h'' pour une aide courte sur la commande ''cmd''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quel est l'état de ma copie de travail ? ==&lt;br /&gt;
Ceci est la question que vous devez vous posez avant de reprendre après une pause votre travail sur un projet versionné. Il peut y avoir eu des changements sur le projet entre temps, des patchs mal faits en production, ... Pour cela, il y a trois commandes essentielles :&lt;br /&gt;
* Pour vérifier que le dépôt est correct, ''git status'' doit dire cela :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 nothing to commit (working directory clean)&lt;br /&gt;
* En cours de travail, la réponse ressemble plus à :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 # Changes not staged for commit:&lt;br /&gt;
 #   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)&lt;br /&gt;
 #   (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)&lt;br /&gt;
 #&lt;br /&gt;
 #	modified:   un-fichier-random.blah&lt;br /&gt;
 #&lt;br /&gt;
 # Untracked files:&lt;br /&gt;
 #   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to include in what will be committed)&lt;br /&gt;
 #&lt;br /&gt;
 #	un-fichier-chombier-ajouté.42&lt;br /&gt;
 no changes added to commit (use &amp;quot;git add&amp;quot; and/or &amp;quot;git commit -a&amp;quot;)&lt;br /&gt;
* Lire l'historique est bien pour savoir quel est le dernier commit&lt;br /&gt;
 git log&lt;br /&gt;
 commit 2a424aae1e746fb5f33de3b3bc3e8a31ee25c684&lt;br /&gt;
 Author: Nicolas Iooss &amp;lt;fishilico@eleves.polytechnique.fr&amp;gt;&lt;br /&gt;
 Date:   Fri Mar 9 00:27:35 2012 +0100&lt;br /&gt;
* Voir les différences entre la version sur le dépôt distant et celle de travail&lt;br /&gt;
 git diff&lt;br /&gt;
&lt;br /&gt;
De plus, après avoir téléchargé les derniers commits avec ''git fetch'', il est possible d'obtenir le message suivant :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 # Your branch is behind 'origin/master' by 42 commits, and can be fast-forwarded.&lt;br /&gt;
Cela signifie que la copie locale a 42 commits de retard sur le dépôt distant, mais qu'un ''git rebase origin/master'' suffit pour mettre à jour la copie locale.&lt;br /&gt;
&lt;br /&gt;
== Réinitialiser le dépôt ==&lt;br /&gt;
Pour restaurer un fichier, il suffit de le ''checkout'' à partir de l'index. En français, cela signifie que lorsque vous faites une modification sur un fichier, vous pouvez effacer les modifications et revenir la dernière version enregistrée dans l'index Git avec la commande :&lt;br /&gt;
 git checkout -- chemin/vers/mon/fichier.blih&lt;br /&gt;
Pour réinitialiser l'index dans l'état indiqué par une branche (comme ''master'' par exemple) sans modifier les fichier, il suffit d'écrire :&lt;br /&gt;
 git reset master&lt;br /&gt;
Si cela ne marche pas car des fichiers seront modifiés ou effacés, on peut forcer la main à Git, mais alors il faut être prêt à subir les conséqences que cela implique (perte des modifications non commitées)&lt;br /&gt;
 git reset --hard master&lt;br /&gt;
&lt;br /&gt;
== Mettre à jour la copie de travail ==&lt;br /&gt;
=== git fetch &amp;amp;&amp;amp; git rebase origin/master ===&lt;br /&gt;
Dans le cas général, vous travaillez sur la branche ''master'' et vous synchronisez votre projet sur un seul serveur. Si votre cas est plus compliqué, vous devez être suffisamment compétent pour vous débrouillez par vous-même. On disait donc... dans le cas simple, Git stocke en interne deux branches : ''master'' et ''origin/master''. Sur Frankiz, c'est un peu plus compliqué car il y a une branche de production, mais les développeurs n'utilisent que master.&lt;br /&gt;
 git branch -a&lt;br /&gt;
 * master&lt;br /&gt;
   remotes/origin/HEAD -&amp;gt; origin/master&lt;br /&gt;
   remotes/origin/f579e1971a66623b2948bf0e20c2e23481022b41&lt;br /&gt;
   remotes/origin/fkz2&lt;br /&gt;
   remotes/origin/kangz-h4ck3s&lt;br /&gt;
   remotes/origin/master&lt;br /&gt;
   remotes/origin/prod&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour sa copie de travail, il faut donc commencer par mettre à jour les branches distantes, avec '''au choix''' l'une des commandes suivantes&lt;br /&gt;
 git fetch&lt;br /&gt;
 git fetch origin&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut appliquer les éventuelles modifications locales à la suite de celles effectuées sur le dépôt, c'est le '''rebase'''.&lt;br /&gt;
 git rebase origin/master&lt;br /&gt;
Git essaiera alors d'appliquer les commits locaux successivement, en indiquant chaque fois qu'il y a un problème (conflit ou fichier supprimé). En cas de problème, il faut&lt;br /&gt;
# Résoudre le problème (les fichiers avec des conflits apparaîssent comme ''Changed but not updated'' dans ''git status'')&lt;br /&gt;
# Ajouter les fichiers (''git add'')&lt;br /&gt;
# Indiquer à git de continuer : ''git rebase --continue''&lt;br /&gt;
&lt;br /&gt;
Ceci permet de transformer l'état suivant (les ''O'' sont les commits, ''A'' le moment où les deux versions ont commencé à diverger, ''B'' la version du dépôt, ''E'' la version locale, ''C'' et ''D'' des commits locaux)&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /&lt;br /&gt;
 -O--A--O--B&lt;br /&gt;
&lt;br /&gt;
En l'état plus propre :&lt;br /&gt;
 -O--A--O--B--C'--D'--E'&lt;br /&gt;
&lt;br /&gt;
Avec C, D et E convertis en C', D' et E' : ils ont été modifiés pour être des modifications relatives à B au lieu de A.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi il ne faut JAMAIS utiliser git pull ===&lt;br /&gt;
Certains développeurs utilisent la commande ''git pull'' pour mettre à jour leur dépôt. Cette pratique est justifiée lorsque la copie de travail était propre (sans commit en attente de push entre autres), mais sinon, cela peut avoir des conséquences très graves et sales. En effet, ''git pull' est assimilé à la succession de commandes suivantes :&lt;br /&gt;
 git fetch origin &amp;amp;&amp;amp; git merge origin/master&lt;br /&gt;
Le problème est le merge. En reprenant les schémas précédents, cela transforme l'état suivant :&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /&lt;br /&gt;
 -O--A--O--B&lt;br /&gt;
&lt;br /&gt;
en :&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /        \&lt;br /&gt;
 -O--A--O--B----M&lt;br /&gt;
&lt;br /&gt;
où M est le commit ''de fusion de branches''. '''Cela est très moche et à éviter absolument'''. Si vous vous retrouvez dans cette suituation (pour vérifier : ''git log''), vous pouvez toujours tenter un ''git rebase origin/master'' qui peut fonctionner si le ''merge'' était trivial (sans conflit). Sinon, un ''git reset --hard origin/master'' s'impose pour assurer votre salut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sauvegarder des modifications locales (git stash) ===&lt;br /&gt;
Avant de faire un merge particulièrement délicat, ou si l'on doit résoudre un bug alors que l'on a pas mal de modifications non commitées en cours, il est parfois utile de sauvegarder l'état courant de la copie de travail.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut utiliser '''avant''' un changement (avec ''git rebase'' par exemple) :&lt;br /&gt;
 git stash&lt;br /&gt;
Une fois les modifications effectuées, on peut restorer la copie locale à l'état sauvegardé avec :&lt;br /&gt;
 git stash pop&lt;br /&gt;
&lt;br /&gt;
== Effectuer un commit ==&lt;br /&gt;
Un '''commit''' est un ensemble de fichiers modifiés. Cela permet plus de cohérence dans le suivi des versions. Par exemple, si l'ajout d'une fonctionnalité sur Frankiz modifie les fichiers ''blah'', ''blih'' et ''bloh'', le ''commit'' regroupe les modifications de ces trois fichiers, et associe à cette modification une date et un auteur.&lt;br /&gt;
&lt;br /&gt;
Pour effectuer un commit, il faut :&lt;br /&gt;
* Vérifier l'état de la copie de travail, pour ne commiter que ce qui est nécessaire&lt;br /&gt;
 git status&lt;br /&gt;
 git diff&lt;br /&gt;
* Indiquer à Git quels fichiers feront partie du commit ; ceci permet de ne committer que les modifications de quelques fichiers&lt;br /&gt;
 git add path/to/blih path/to/blah path/to/bloh&lt;br /&gt;
* Vérifier que l'on a ajouté les fichiers que l'on voulait :&lt;br /&gt;
 git status&lt;br /&gt;
* Faire le commit (le ''-s'' ajoute une ligne ''Signed of by'' dans le message, pour pouvoir retrouver plus efficacement l'auteur réel du commit)&lt;br /&gt;
 git commit -s&lt;br /&gt;
* Cette commande ouvre un éditeur (vi, nano ou emacs selon la configuration de la variable EDITOR). Il faut alors entrer un bref descriptif du commit. '''Pour certains projets (dont Frankiz), les conventions de codage obligent les développeurs à écrire les descriptions en anglais.''' Il est un bon usage de s'adapter en conséquence, car un commit peut être refusé en production s'il est mal fait.&lt;br /&gt;
* Mettre à jour la copie locale avec le dépôt distant (cela décale le nouveau commit à la fin). '''IL NE FAUT SURTOUT PAS FAIRE DE git pull OU DE git merge ICI'''&lt;br /&gt;
 git fetch&lt;br /&gt;
 git rebase origin/master&lt;br /&gt;
* Transmettre les commits au dépôt d'origine&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
La dernière commande provient du fait que git n'est pas centralisé : il n'envoie pas les modifications locales au dépôt parent spontanément.&lt;br /&gt;
&lt;br /&gt;
Ceci permet de faire quelques modifications locales puis de n'envoyer cela au reste des développeurs que lorsque les modifications sont stables et complètes, par exemple.&lt;br /&gt;
&lt;br /&gt;
== Gérer les branches ==&lt;br /&gt;
On peut voir la liste des branches accessibles avec :&lt;br /&gt;
 git branch -a&lt;br /&gt;
* La ligne avec une étoile est la branche courante&lt;br /&gt;
* Les lignes blanches sont les branches ''locales'' (elles suivent généralement une branche distante)&lt;br /&gt;
* Les lignes rouges (si les couleurs sont activées) sont les branches distantes.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer une autre branche, il faut d'abord l'ajouter localement :&lt;br /&gt;
 git checkout -b NomLocal origin/NomDistant&lt;br /&gt;
&lt;br /&gt;
Cela aura également pour effet de basculer sur la branche NomLocal.&lt;br /&gt;
Les modifications que l'on avait effectuées sont bien entendu conservées.&lt;br /&gt;
&lt;br /&gt;
Une fois la branche ajoutée, on peut basculer de branche en branche à l'aide de :&lt;br /&gt;
 git checkout NomLocal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Créer un dépôt ==&lt;br /&gt;
Contrairement à [[SVN]] où il faut installer un serveur subversion, créer un dépôt Git est très rapide : dans le dossier que l'on souhaite versionner, il suffit de taper&lt;br /&gt;
 git init&lt;br /&gt;
Et voilà, le dossier est versionné : on peut donc commencer à faire des modifications, des commits, etc. (bien entendu, on ne peut pas ''pusher'' ses commits, puisqu'il n'y a pas de serveur distant).&lt;br /&gt;
&lt;br /&gt;
Cette particularité rend Git très efficace pour versionner un petit projet, un exercice de TD, etc.&lt;br /&gt;
&lt;br /&gt;
Pour créer un dépôt qui peut être cloné, il faut exécuter les commandes suivantes :&lt;br /&gt;
 git init --bare mon_projet&lt;br /&gt;
 cd mon_projet &amp;amp;&amp;amp; git update-server-info&lt;br /&gt;
&lt;br /&gt;
Enfin, pour configurer un serveur HTTP (gitweb), il ne faut pas oublier de créer un fichier vide '''git-daemon-export-ok''' dans le dossier, afin de permettre le clonage.&lt;br /&gt;
&lt;br /&gt;
== Structure interne ==&lt;br /&gt;
&lt;br /&gt;
Git stocke les commits de manière très particulière : un commit correspond à peu près à une sauvegarde de l'état des fichiers, à un message, et à une référence vers le commit parent.&lt;br /&gt;
Contrairemant à [[SVN]], il n'y a donc pas de notion de numéro de révision : chaque commit est identifié par une chaîne hexadécimale de 40 caractères (par exemple : ''04fd02e59b1bdc430c7a7dcc1ca9f4cbc2b04037'' )&lt;br /&gt;
&lt;br /&gt;
Un ''tag'' est en fait un nom «lisible» donné à un ''commit'' ; une ''branche'' indique également le ''commit'' principal d'une branche.&lt;br /&gt;
&lt;br /&gt;
== Du bon usage de gitignore ==&lt;br /&gt;
Dans un projet, il est inutile de versionner les fichiers temporaires et les fichiers compilés (qu'ils soient binaires ou non). Ces projets utilisent généralement un Makefile pour créer ces fichiers. Pour éviter de les versionner, il suffit d'utiliser un fichier ''.gitignore'' bien placé. Généralement, chaque projet a un tel fichier dans son dossier princicial. Voici par exemple un extrait du gitignore de Frnakiz :&lt;br /&gt;
 configs/frankiz.conf&lt;br /&gt;
 htdocs/.htaccess&lt;br /&gt;
 htdocs/data/*&lt;br /&gt;
 htdocs/css/*&lt;br /&gt;
 spool/*&lt;br /&gt;
 upgrade/2.0.0_to_3.0.0/unversionned&lt;br /&gt;
&lt;br /&gt;
== Configuration globale ==&lt;br /&gt;
Si vous avez déjà commitez, vous aurez certainement remarqué qu'il faut utiliser ''git config'' pour configurer vos informations personnelles. Ainsi, les deux premières commandes que tout utilisateur doit taper avant de faire un commit sont :&lt;br /&gt;
 git config --global user.name &amp;quot;Prénom Nom de famille&amp;quot;&lt;br /&gt;
 git config --global user.email &amp;quot;prenom.nom.promo@polytechnique.org&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ensuite, si vous aimez les couleurs, vous avez envie de taper cette commande :&lt;br /&gt;
 git config --global color.ui auto&lt;br /&gt;
&lt;br /&gt;
Enfin, si vous en avez assez des projets qui ne mettent pas les fichiers temporaires dans le gitignore, vous pouvez configurer un fichier gitignore global. Si votre ''/home/user/.gitignore_global'' ressemble à&lt;br /&gt;
 *~&lt;br /&gt;
 *.swp&lt;br /&gt;
 *.tmp&lt;br /&gt;
il suffit de taper :&lt;br /&gt;
 git config --global core.excludesfile /home/user/.gitignore_global&lt;br /&gt;
&lt;br /&gt;
Tout cela permet de gérer la configuration globale, visible par&lt;br /&gt;
 git config --global -l&lt;br /&gt;
En enlevant ''--global'' dans toutes les commandes précédentes, on configure la copie locale.&lt;br /&gt;
&lt;br /&gt;
== Utiliser le proxy de l'X avec Git ==&lt;br /&gt;
Si vous hébergez un projet sur [http://www.github.com GitHub], vous avez envie de dire à Git de se connecter à GitHub en SSH en passant par le proxy de l'X (qui est [http://kuzh.polytechnique.fr:8080 kuzh:8080]). Pour cela, il suffit de configurer le client SSH pour utiliser le proxy à chaque connexion vers github.com. Cela s'effecute par le fichier de configuration suivant dans /home/user/.ssh/config (adaptez avec votre dossier personnel)&lt;br /&gt;
 Host github.com&lt;br /&gt;
     ProxyCommand socat - PROXY:kuzh.polytechnique.fr:%h:%p,proxyport=8080&lt;br /&gt;
&lt;br /&gt;
'''Si vous souhaitez uniquement cloner un dépôt GitHub''' dont vous n'êtes pas contributeur, il suffit d'utiliser le lien HTTPS en ligne de commande, en précisant le proxy.&lt;br /&gt;
 export https_proxy=http://kuzh.polytechnique.fr:8080&lt;br /&gt;
 git clone https://github.com/BinetReseau/frankiz.git&lt;br /&gt;
&lt;br /&gt;
= Pour Windows =&lt;br /&gt;
&lt;br /&gt;
Pour utiliser Git sur Windows, on peut par exemple télécharger MSys Git : [http://msysgit.github.com/ http://msysgit.github.com/].&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Git&amp;diff=7153</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Git&amp;diff=7153"/>
		<updated>2012-10-11T22:28:29Z</updated>

		<summary type="html">&lt;p&gt;Arthur : /* Du bon usage de gitignore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git est un [[VCS|système de contrôle de version]]. Assez proche de [[SVN]] par certains côtés, il présente néanmoins un grand nombre de différences.&lt;br /&gt;
&lt;br /&gt;
Avant de découvrir les spécificités de Git, il est nécessaire de connaître les concepts généraux des [[VCS|systèmes de contrôle de version]].&lt;br /&gt;
&lt;br /&gt;
Cette page donne un bref aperçu des fonctionnalités de Git. Un autre bon aperçu est disponible [http://giudoku.sourceforge.net/media/GitHandbook.pdf ici] (lien non BR)&lt;br /&gt;
&lt;br /&gt;
== Dépôts ==&lt;br /&gt;
&lt;br /&gt;
Alors que [[CVS]] et [[SVN]] sont des systèmes de versionnement centralisés (i.e un serveur contient le dépôt, et chaque utilisateur effectue un ''checkout'' depuis ce dépôt), Git est complètement décentralisé. Cela signifie que chaque contributeur a sa propre copie locale de tout l'historique d'un projet. Si aujourd'hui vous considérez que l'espace disque sur votre ordinateur est un problème, allez faire un tour, partez admirer les merveilles de la technologies qui nous entoure, et revenez demain. Sur cette page, tous les examples sont tirés du Git de [[Frankiz]], mais voici d'autres dépôts bien utiles :&lt;br /&gt;
* [http://www.github.com/ GitHub]&lt;br /&gt;
* [http://git.frankiz.net/ Frankiz]&lt;br /&gt;
* [http://git.polytechnique.org/ Polytechnique.org]&lt;br /&gt;
&lt;br /&gt;
== Récupérer le code d'un projet existant ==&lt;br /&gt;
&lt;br /&gt;
Pour télécharger un projet existant, il y a deux possibilités : avec un compte de développeur ou sans compte. Avec un compte SSH simple, il suffit d'exécuter la commande suivante :&lt;br /&gt;
 git clone mybeautifulname@git.frankiz.net:/hosting/git/frankiz&lt;br /&gt;
Sans compte, certains projets sont téléchargeables avec le protocole HTTP, mais vous ne pourrez pas uploader vos modifications.&lt;br /&gt;
 git clone http://git.frankiz.net/frankiz&lt;br /&gt;
&lt;br /&gt;
Cela crée un '''clone''' du dépôt d'origine (i.e une copie conforme), qui peut d'ailleurs servir de backup si le dépôt d'origine était perdu. Notre clone contient tout l'historique du dépôt depuis sa création, toutes les branches, etc. Cette première opération est très souple. On peut cloner des dépôt via SSH, HTTP, GIT, ou même en local le dépôt d'un autre utilisateur...&lt;br /&gt;
&lt;br /&gt;
Par exemple la commande suivante clone dans le dossier ''platal'' la branche ''core/master'' d'une version de Plat/al potientiellement modifiée par le vice-prez 2010 :&lt;br /&gt;
 git clone /home/2010/fishilico/dev/platal/.git platal -b core/master&lt;br /&gt;
&lt;br /&gt;
== Accéder à l'aide ==&lt;br /&gt;
Avant toute chose, il est essentiel de savoir où trouver de l'aide, d'autant plus que l'aide de Git est très bien faite.&lt;br /&gt;
* Sur internet, il y a le wikiBR, les pages de manuel ([http://linux.die.net/man/1/git sur Linux Die] par exemple) et le [http://book.git-scm.com/ Git Book]&lt;br /&gt;
* En terminal, ''git help'' pour une liste des commandes, ''git help cmd'' ou ''git cmd --help'' pour l'aide complète de la commande ''cmd'', ou encore simplement ''git cmd -h'' pour une aide courte sur la commande ''cmd''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quel est l'état de ma copie de travail ? ==&lt;br /&gt;
Ceci est la question que vous devez vous posez avant de reprendre après une pause votre travail sur un projet versionné. Il peut y avoir eu des changements sur le projet entre temps, des patchs mal faits en production, ... Pour cela, il y a trois commandes essentielles :&lt;br /&gt;
* Pour vérifier que le dépôt est correct, ''git status'' doit dire cela :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 nothing to commit (working directory clean)&lt;br /&gt;
* En cours de travail, la réponse ressemble plus à :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 # Changes not staged for commit:&lt;br /&gt;
 #   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)&lt;br /&gt;
 #   (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)&lt;br /&gt;
 #&lt;br /&gt;
 #	modified:   un-fichier-random.blah&lt;br /&gt;
 #&lt;br /&gt;
 # Untracked files:&lt;br /&gt;
 #   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to include in what will be committed)&lt;br /&gt;
 #&lt;br /&gt;
 #	un-fichier-chombier-ajouté.42&lt;br /&gt;
 no changes added to commit (use &amp;quot;git add&amp;quot; and/or &amp;quot;git commit -a&amp;quot;)&lt;br /&gt;
* Lire l'historique est bien pour savoir quel est le dernier commit&lt;br /&gt;
 git log&lt;br /&gt;
 commit 2a424aae1e746fb5f33de3b3bc3e8a31ee25c684&lt;br /&gt;
 Author: Nicolas Iooss &amp;lt;fishilico@eleves.polytechnique.fr&amp;gt;&lt;br /&gt;
 Date:   Fri Mar 9 00:27:35 2012 +0100&lt;br /&gt;
* Voir les différences entre la version sur le dépôt distant et celle de travail&lt;br /&gt;
 git diff&lt;br /&gt;
&lt;br /&gt;
De plus, après avoir téléchargé les derniers commits avec ''git fetch'', il est possible d'obtenir le message suivant :&lt;br /&gt;
 git status&lt;br /&gt;
 # On branch master&lt;br /&gt;
 # Your branch is behind 'origin/master' by 42 commits, and can be fast-forwarded.&lt;br /&gt;
Cela signifie que la copie locale a 42 commits de retard sur le dépôt distant, mais qu'un ''git rebase origin/master'' suffit pour mettre à jour la copie locale.&lt;br /&gt;
&lt;br /&gt;
== Réinitialiser le dépôt ==&lt;br /&gt;
Pour restaurer un fichier, il suffit de le ''checkout'' à partir de l'index. En français, cela signifie que lorsque vous faites une modification sur un fichier, vous pouvez effacer les modifications et revenir la dernière version enregistrée dans l'index Git avec la commande :&lt;br /&gt;
 git checkout -- chemin/vers/mon/fichier.blih&lt;br /&gt;
Pour réinitialiser l'index dans l'état indiqué par une branche (comme ''master'' par exemple) sans modifier les fichier, il suffit d'écrire :&lt;br /&gt;
 git reset master&lt;br /&gt;
Si cela ne marche pas car des fichiers seront modifiés ou effacés, on peut forcer la main à Git, mais alors il faut être prêt à subir les conséqences que cela implique (perte des modifications non commitées)&lt;br /&gt;
 git reset --hard master&lt;br /&gt;
&lt;br /&gt;
== Mettre à jour la copie de travail ==&lt;br /&gt;
=== git fetch &amp;amp;&amp;amp; git rebase origin/master ===&lt;br /&gt;
Dans le cas général, vous travaillez sur la branche ''master'' et vous synchronisez votre projet sur un seul serveur. Si votre cas est plus compliqué, vous devez être suffisamment compétent pour vous débrouillez par vous-même. On disait donc... dans le cas simple, Git stocke en interne deux branches : ''master'' et ''origin/master''. Sur Frankiz, c'est un peu plus compliqué car il y a une branche de production, mais les développeurs n'utilisent que master.&lt;br /&gt;
 git branch -a&lt;br /&gt;
 * master&lt;br /&gt;
   remotes/origin/HEAD -&amp;gt; origin/master&lt;br /&gt;
   remotes/origin/f579e1971a66623b2948bf0e20c2e23481022b41&lt;br /&gt;
   remotes/origin/fkz2&lt;br /&gt;
   remotes/origin/kangz-h4ck3s&lt;br /&gt;
   remotes/origin/master&lt;br /&gt;
   remotes/origin/prod&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour sa copie de travail, il faut donc commencer par mettre à jour les branches distantes, avec '''au choix''' l'une des commandes suivantes&lt;br /&gt;
 git fetch&lt;br /&gt;
 git fetch origin&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut appliquer les éventuelles modifications locales à la suite de celles effectuées sur le dépôt, c'est le '''rebase'''.&lt;br /&gt;
 git rebase origin/master&lt;br /&gt;
Git essaiera alors d'appliquer les commits locaux successivement, en indiquant chaque fois qu'il y a un problème (conflit ou fichier supprimé). En cas de problème, il faut&lt;br /&gt;
# Résoudre le problème (les fichiers avec des conflits apparaîssent comme ''Changed but not updated'' dans ''git status'')&lt;br /&gt;
# Ajouter les fichiers (''git add'')&lt;br /&gt;
# Indiquer à git de continuer : ''git rebase --continue''&lt;br /&gt;
&lt;br /&gt;
Ceci permet de transformer l'état suivant (les ''O'' sont les commits, ''A'' le moment où les deux versions ont commencé à diverger, ''B'' la version du dépôt, ''E'' la version locale, ''C'' et ''D'' des commits locaux)&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /&lt;br /&gt;
 -O--A--O--B&lt;br /&gt;
&lt;br /&gt;
En l'état plus propre :&lt;br /&gt;
 -O--A--O--B--C'--D'--E'&lt;br /&gt;
&lt;br /&gt;
Avec C, D et E convertis en C', D' et E' : ils ont été modifiés pour être des modifications relatives à B au lieu de A.&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi il ne faut JAMAIS utiliser git pull ===&lt;br /&gt;
Certains développeurs utilisent la commande ''git pull'' pour mettre à jour leur dépôt. Cette pratique est justifiée lorsque la copie de travail était propre (sans commit en attente de push entre autres), mais sinon, cela peut avoir des conséquences très graves et sales. En effet, ''git pull' est assimilé à la succession de commandes suivantes :&lt;br /&gt;
 git fetch origin &amp;amp;&amp;amp; git merge origin/master&lt;br /&gt;
Le problème est le merge. En reprenant les schémas précédents, cela transforme l'état suivant :&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /&lt;br /&gt;
 -O--A--O--B&lt;br /&gt;
&lt;br /&gt;
en :&lt;br /&gt;
&lt;br /&gt;
       -C--D--E&lt;br /&gt;
      /        \&lt;br /&gt;
 -O--A--O--B----M&lt;br /&gt;
&lt;br /&gt;
où M est le commit ''de fusion de branches''. '''Cela est très moche et à éviter absolument'''. Si vous vous retrouvez dans cette suituation (pour vérifier : ''git log''), vous pouvez toujours tenter un ''git rebase origin/master'' qui peut fonctionner si le ''merge'' était trivial (sans conflit). Sinon, un ''git reset --hard origin/master'' s'impose pour assurer votre salut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sauvegarder des modifications locales (git stash) ===&lt;br /&gt;
Avant de faire un merge particulièrement délicat, ou si l'on doit résoudre un bug alors que l'on a pas mal de modifications non commitées en cours, il est parfois utile de sauvegarder l'état courant de la copie de travail.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut utiliser '''avant''' un changement (avec ''git rebase'' par exemple) :&lt;br /&gt;
 git stash&lt;br /&gt;
Une fois les modifications effectuées, on peut restorer la copie locale à l'état sauvegardé avec :&lt;br /&gt;
 git stash pop&lt;br /&gt;
&lt;br /&gt;
== Effectuer un commit ==&lt;br /&gt;
Un '''commit''' est un ensemble de fichiers modifiés. Cela permet plus de cohérence dans le suivi des versions. Par exemple, si l'ajout d'une fonctionnalité sur Frankiz modifie les fichiers ''blah'', ''blih'' et ''bloh'', le ''commit'' regroupe les modifications de ces trois fichiers, et associe à cette modification une date et un auteur.&lt;br /&gt;
&lt;br /&gt;
Pour effectuer un commit, il faut :&lt;br /&gt;
* Vérifier l'état de la copie de travail, pour ne commiter que ce qui est nécessaire&lt;br /&gt;
 git status&lt;br /&gt;
 git diff&lt;br /&gt;
* Indiquer à Git quels fichiers feront partie du commit ; ceci permet de ne committer que les modifications de quelques fichiers&lt;br /&gt;
 git add path/to/blih path/to/blah path/to/bloh&lt;br /&gt;
* Vérifier que l'on a ajouté les fichiers que l'on voulait :&lt;br /&gt;
 git status&lt;br /&gt;
* Faire le commit (le ''-s'' ajoute une ligne ''Signed of by'' dans le message, pour pouvoir retrouver plus efficacement l'auteur réel du commit)&lt;br /&gt;
 git commit -s&lt;br /&gt;
* Cette commande ouvre un éditeur (vi, nano ou emacs selon la configuration de la variable EDITOR). Il faut alors entrer un bref descriptif du commit. '''Pour certains projets (dont Frankiz), les conventions de codage obligent les développeurs à écrire les descriptions en anglais.''' Il est un bon usage de s'adapter en conséquence, car un commit peut être refusé en production s'il est mal fait.&lt;br /&gt;
* Mettre à jour la copie locale avec le dépôt distant (cela décale le nouveau commit à la fin). '''IL NE FAUT SURTOUT PAS FAIRE DE git pull OU DE git merge ICI'''&lt;br /&gt;
 git fetch&lt;br /&gt;
 git rebase origin/master&lt;br /&gt;
* Transmettre les commits au dépôt d'origine&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
La dernière commande provient du fait que git n'est pas centralisé : il n'envoie pas les modifications locales au dépôt parent spontanément.&lt;br /&gt;
&lt;br /&gt;
Ceci permet de faire quelques modifications locales puis de n'envoyer cela au reste des développeurs que lorsque les modifications sont stables et complètes, par exemple.&lt;br /&gt;
&lt;br /&gt;
== Gérer les branches ==&lt;br /&gt;
On peut voir la liste des branches accessibles avec :&lt;br /&gt;
 git branch -a&lt;br /&gt;
* La ligne avec une étoile est la branche courante&lt;br /&gt;
* Les lignes blanches sont les branches ''locales'' (elles suivent généralement une branche distante)&lt;br /&gt;
* Les lignes rouges (si les couleurs sont activées) sont les branches distantes.&lt;br /&gt;
&lt;br /&gt;
Pour récupérer une autre branche, il faut d'abord l'ajouter localement :&lt;br /&gt;
 git checkout -b NomLocal origin/NomDistant&lt;br /&gt;
&lt;br /&gt;
Cela aura également pour effet de basculer sur la branche NomLocal.&lt;br /&gt;
Les modifications que l'on avait effectuées sont bien entendu conservées.&lt;br /&gt;
&lt;br /&gt;
Une fois la branche ajoutée, on peut basculer de branche en branche à l'aide de :&lt;br /&gt;
 git checkout NomLocal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Créer un dépôt ==&lt;br /&gt;
Contrairement à [[SVN]] où il faut installer un serveur subversion, créer un dépôt Git est très rapide : dans le dossier que l'on souhaite versionner, il suffit de taper&lt;br /&gt;
 git init&lt;br /&gt;
Et voilà, le dossier est versionné : on peut donc commencer à faire des modifications, des commits, etc. (bien entendu, on ne peut pas ''pusher'' ses commits, puisqu'il n'y a pas de serveur distant).&lt;br /&gt;
&lt;br /&gt;
Cette particularité rend Git très efficace pour versionner un petit projet, un exercice de TD, etc.&lt;br /&gt;
&lt;br /&gt;
Pour créer un dépôt qui peut être cloné, il faut exécuter les commandes suivantes :&lt;br /&gt;
 git init --bare mon_projet&lt;br /&gt;
 cd mon_projet &amp;amp;&amp;amp; git update-server-info&lt;br /&gt;
&lt;br /&gt;
Enfin, pour configurer un serveur HTTP (gitweb), il ne faut pas oublier de créer un fichier vide '''git-daemon-export-ok''' dans le dossier, afin de permettre le clonage.&lt;br /&gt;
&lt;br /&gt;
== Structure interne ==&lt;br /&gt;
&lt;br /&gt;
Git stocke les commits de manière très particulière : un commit correspond à peu près à une sauvegarde de l'état des fichiers, à un message, et à une référence vers le commit parent.&lt;br /&gt;
Contrairemant à [[SVN]], il n'y a donc pas de notion de numéro de révision : chaque commit est identifié par une chaîne hexadécimale de 40 caractères (par exemple : ''04fd02e59b1bdc430c7a7dcc1ca9f4cbc2b04037'' )&lt;br /&gt;
&lt;br /&gt;
Un ''tag'' est en fait un nom «lisible» donné à un ''commit'' ; une ''branche'' indique également le ''commit'' principal d'une branche.&lt;br /&gt;
&lt;br /&gt;
== Du bon usage de gitignore ==&lt;br /&gt;
Dans un projet, il est inutile de versionner les fichiers temporaires et les fichiers compilés (qu'ils soit binaires ou non). Ces projets utilisent généralement un Makefile pour créer ces fichiers. Pour éviter de les versionner, il suffit d'utiliser un fichier ''.gitignore'' bien placé. Généralement, chaque projet a un tel fichier dans son dossier princicial. Voici par exemple un extrait du gitignore de Frnakiz :&lt;br /&gt;
 configs/frankiz.conf&lt;br /&gt;
 htdocs/.htaccess&lt;br /&gt;
 htdocs/data/*&lt;br /&gt;
 htdocs/css/*&lt;br /&gt;
 spool/*&lt;br /&gt;
 upgrade/2.0.0_to_3.0.0/unversionned&lt;br /&gt;
&lt;br /&gt;
== Configuration globale ==&lt;br /&gt;
Si vous avez déjà commitez, vous aurez certainement remarqué qu'il faut utiliser ''git config'' pour configurer vos informations personnelles. Ainsi, les deux premières commandes que tout utilisateur doit taper avant de faire un commit sont :&lt;br /&gt;
 git config --global user.name &amp;quot;Prénom Nom de famille&amp;quot;&lt;br /&gt;
 git config --global user.email &amp;quot;prenom.nom.promo@polytechnique.org&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ensuite, si vous aimez les couleurs, vous avez envie de taper cette commande :&lt;br /&gt;
 git config --global color.ui auto&lt;br /&gt;
&lt;br /&gt;
Enfin, si vous en avez assez des projets qui ne mettent pas les fichiers temporaires dans le gitignore, vous pouvez configurer un fichier gitignore global. Si votre ''/home/user/.gitignore_global'' ressemble à&lt;br /&gt;
 *~&lt;br /&gt;
 *.swp&lt;br /&gt;
 *.tmp&lt;br /&gt;
il suffit de taper :&lt;br /&gt;
 git config --global core.excludesfile /home/user/.gitignore_global&lt;br /&gt;
&lt;br /&gt;
Tout cela permet de gérer la configuration globale, visible par&lt;br /&gt;
 git config --global -l&lt;br /&gt;
En enlevant ''--global'' dans toutes les commandes précédentes, on configure la copie locale.&lt;br /&gt;
&lt;br /&gt;
== Utiliser le proxy de l'X avec Git ==&lt;br /&gt;
Si vous hébergez un projet sur [http://www.github.com GitHub], vous avez envie de dire à Git de se connecter à GitHub en SSH en passant par le proxy de l'X (qui est [http://kuzh.polytechnique.fr:8080 kuzh:8080]). Pour cela, il suffit de configurer le client SSH pour utiliser le proxy à chaque connexion vers github.com. Cela s'effecute par le fichier de configuration suivant dans /home/user/.ssh/config (adaptez avec votre dossier personnel)&lt;br /&gt;
 Host github.com&lt;br /&gt;
     ProxyCommand socat - PROXY:kuzh.polytechnique.fr:%h:%p,proxyport=8080&lt;br /&gt;
&lt;br /&gt;
'''Si vous souhaitez uniquement cloner un dépôt GitHub''' dont vous n'êtes pas contributeur, il suffit d'utiliser le lien HTTPS en ligne de commande, en précisant le proxy.&lt;br /&gt;
 export https_proxy=http://kuzh.polytechnique.fr:8080&lt;br /&gt;
 git clone https://github.com/BinetReseau/frankiz.git&lt;br /&gt;
&lt;br /&gt;
= Pour Windows =&lt;br /&gt;
&lt;br /&gt;
Pour utiliser Git sur Windows, on peut par exemple télécharger MSys Git : [http://msysgit.github.com/ http://msysgit.github.com/].&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Contact&amp;diff=6796</id>
		<title>Contact</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Contact&amp;diff=6796"/>
		<updated>2012-01-22T18:22:45Z</updated>

		<summary type="html">&lt;p&gt;Arthur : /* Contact */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu BR}}&lt;br /&gt;
&lt;br /&gt;
=== Contact ===&lt;br /&gt;
Vous pouvez contacter le BR :&lt;br /&gt;
* Par courrier electronique&lt;br /&gt;
** Pour des modifications de fiches TOL : tol *AT* eleves&lt;br /&gt;
** Pour les annonces Frankiz : web *AT* eleves&lt;br /&gt;
** Pour les brs : news *AT* eleves&lt;br /&gt;
** Pour les sites binets et les questions techniques : root *AT* eleves&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Par courrier postal&lt;br /&gt;
 Binet Réseau - Kes des élèves&lt;br /&gt;
 Ecole Polytechnique&lt;br /&gt;
 91128 Palaiseau Cedex&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Accueil&amp;diff=6745</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Accueil&amp;diff=6745"/>
		<updated>2011-11-02T15:06:19Z</updated>

		<summary type="html">&lt;p&gt;Arthur : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC____NOEDITSECTION__&lt;br /&gt;
=== Bienvenue sur le site du BR ! ===&lt;br /&gt;
&lt;br /&gt;
Le Binet Réseau est l'association d'étudiants de l'[http://www.polytechnique.fr Ecole Polytechnique] qui s'occupent du réseau élève : maintenance des serveurs, mise en place de nouveaux services et développement (applications réseau et sites).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left; width: 46%; margin: 0 1% 0 0;&amp;quot;&amp;gt;&lt;br /&gt;
=Les ressources en ligne=&lt;br /&gt;
==Utilisation de nos services==&lt;br /&gt;
* [[Miroir_FTP|Comment utiliser les miroirs FTP du BR?]]&lt;br /&gt;
* [[Configuration des clients pour le WiFi|Comment se connecter au WiFi?]]&lt;br /&gt;
* [[LDAP|Comment utiliser l'annuaire en ligne ?]] (permet de ne plus avoir à taper les adresses email!)&lt;br /&gt;
* [[Comptes Frankiz|Demander la création d'un compte Frankiz]]&lt;br /&gt;
&lt;br /&gt;
==Fiches techniques==&lt;br /&gt;
* [[Pocket pc|Comment utiliser mon Pocket PC sur le réseau?]]&lt;br /&gt;
* [[Recuperation de donnees perdues|Comment récupérer mes données que j'ai effacées sur mon disque dur?]]&lt;br /&gt;
* [[Sauvegarde (ordinateur)|Comment faire une sauvegarde complète de mon système (sous Windows)?]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; width: 46%; margin: 0 1%;-moz-box-shadow: 1px 1px 12px #AAA; -webkit-box-shadow: 1px 1px 12px #AAA; padding: 1em; margin-top: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
===Le BR recrute===&lt;br /&gt;
Les membres du Binet Réseau ne sont pas pour autant tous des férus d'informatique et se partagent les taches en fonction de leurs capacités et de leurs envies : relations avec nos partenaires, communication avec les élèves constituent aussi des postes essentiels.&lt;br /&gt;
&lt;br /&gt;
Ainsi, le Binet Reseau offre une chance unique d'approfondir ses connaissances en informatique, au service des autres et en se faisant plaisir &lt;br /&gt;
----&lt;br /&gt;
=== Deviens un membre actif du BR ! ===&lt;br /&gt;
À n'importe quelle époque de l'année, viens nous voir et nous t'accueillerons à bras ouverts. Il y a toujours des choses à faire pour améliorer les services ou faire de nouveaux services.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==En savoir plus sur...==&lt;br /&gt;
* [[News|Les brs]] (newsgroups) : quels brs existent ? comment ça marche ?&lt;br /&gt;
* [[Serveur IRC|IRC]] comme moyen de communication.&lt;br /&gt;
* [[MSDNAA|Les licenses MSDNAA]] : ce qui te permet d'avoir gratuitement '''et''' légalement Windows7 ou Visual Studio.&lt;br /&gt;
&lt;br /&gt;
=N'hésite pas à nous contacter=&lt;br /&gt;
{| class=&amp;quot;tableau-support&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |{{block|Au téléphone|support téléphone|Phone.png}}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |{{block|Par mail|support mail|Edit.png}}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |{{block|Sur les brs|support brs|News.png}}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |{{block|Sur IRC|support irc|Serveur.png}}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |{{block|En vrai|support vrai|People.png}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Comptes_Sigma&amp;diff=6744</id>
		<title>Comptes Sigma</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Comptes_Sigma&amp;diff=6744"/>
		<updated>2011-11-02T15:04:41Z</updated>

		<summary type="html">&lt;p&gt;Arthur : Page créée avec « Contacter [mailto:frankiz@eleves.polytechnique.fr frankiz@eleves.polytechnique.fr] »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contacter [mailto:frankiz@eleves.polytechnique.fr frankiz@eleves.polytechnique.fr]&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Magouilleuse&amp;diff=6734</id>
		<title>Magouilleuse</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Magouilleuse&amp;diff=6734"/>
		<updated>2011-10-13T21:13:47Z</updated>

		<summary type="html">&lt;p&gt;Arthur : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cette page a pour but de faciliter le travail du magouilleur qui passera une ou deux semaines à La Courtine l'an prochain. &lt;br /&gt;
&lt;br /&gt;
Une bonne connaissance de PHP, MYSQL et un peu de shell sont nécessaires pour ne pas se louper. Un root correct fait l'affaire.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier d'activer le javascript dans la conf d'apache.&lt;br /&gt;
&lt;br /&gt;
'''Me contacter à l'adresse qdm@melix.net pour récupérer les fichiers.'''&lt;br /&gt;
&lt;br /&gt;
Le système est bien rôdé, il se compose de trois parties.&lt;br /&gt;
&lt;br /&gt;
== L'interface web de choix des stages ==&lt;br /&gt;
&lt;br /&gt;
Il s'agit d'un site web simple, en HTML / PHP / Javascript / MySQL. Ça tourne bien et c'est assez sécu. &lt;br /&gt;
&lt;br /&gt;
Il n'accepte pas des choix qui ne répondent pas à des règles prédéfinies, et c'est pas insurmontable d'en rajouter...&lt;br /&gt;
&lt;br /&gt;
Attention à les rajouter dans le javascript ainsi que dans le PHP, pour éviter de se faire niquer par des hackers en herbe...&lt;br /&gt;
&lt;br /&gt;
== La Magouilleuse ==&lt;br /&gt;
&lt;br /&gt;
Il s'agit d'une boîte noire programmée en python. Il faut avoir python 2.7 ainsi que quelques bibliothèques sur son ordinateur. &lt;br /&gt;
Un fichier README se trouve dans l'archive. &lt;br /&gt;
&lt;br /&gt;
Sur un portable récent (core i7, 4Go de RAM) l'algorithme tourne en moins de deux minutes pour une groupe de 250 personnes. &lt;br /&gt;
&lt;br /&gt;
== Une collection de scripts php / bash ==&lt;br /&gt;
&lt;br /&gt;
Ces scripts sont très utiles pour&lt;br /&gt;
* importer un ficher excel dans la base des utilisateurs (il faut l'enregistrer en .csv avant),&lt;br /&gt;
* initaliser la table des choix/aptitudes&lt;br /&gt;
* importer les aptitudes / inaptitudes de chacun&lt;br /&gt;
* créer le fichier qu'on passe en entrée de la magouilleuse&lt;br /&gt;
* traiter le fichier de sortie de la magouilleuse, produire des statistiques ou un joli .csv&lt;br /&gt;
&lt;br /&gt;
== Points importants ==&lt;br /&gt;
Voir avec l'infirmerie longtemps à l'avance pour récupérer les aptitudes de chacun. La nouvelle médecin-chef est souple et compréhensive.&lt;br /&gt;
&lt;br /&gt;
Il faudrait lui donner à l'avance la liste des stages, pour qu'elle sorte un fichier adapté.&lt;br /&gt;
&lt;br /&gt;
Penser à faire souvent des sauvegardes de la base de données, une mauvaise manip et tout fout le camp! Ça m'a servi plus qu'une fois!&lt;br /&gt;
&lt;br /&gt;
Il faut s'y prendre longtemps à l'avance (mois de mai) pour s'assurer que tout tourne bien sur la machine perso du magouilleur.&lt;br /&gt;
&lt;br /&gt;
== Organisation physique ==&lt;br /&gt;
Spammer [mailto:quentin.demetz@m4x.org QdM] ou [mailto:arthur.darcet@m4x.org Arthur] pour avoir des infos.&lt;br /&gt;
&lt;br /&gt;
* Trois clients (Dell &amp;quot;fin&amp;quot;, étiquetés &amp;quot;magouilleuse Client {1|2|3}&amp;quot;), IP = 129.104.201.6{1|2|3}) : Installation d'Archlinux normale. La seule config particulière est deux lignes dans &amp;lt;code&amp;gt;/etc/hosts&amp;lt;/code&amp;gt; : &amp;lt;code&amp;gt;{magouilleuse|memorix} 129.104.201.60&amp;lt;/code&amp;gt;&lt;br /&gt;
* Deux serveurs (Dell épais, étiquetés &amp;quot;magouilleuse Serveur {master|slave}&amp;quot;, IP = 129.104.201.6{0|5}) : En dehors de l'IP et de la réplication mysql (qui n'est configurée que dans le sens master vers slave), les deux installations sont identiques.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les serveurs ont Apache, mysql, php, phpmyadmin. Les mots de passe sont les habituels (root et mysql). Le site décrit au dessus est installé, ainsi qu'une version spéciale de memorix (pour retirer la possibilité de se connecter et d'ajouter des informations dans la  base : c'est un site read-only). Un cron de backup SQL tourne normalement toutes les heures sur les deux serveurs pour faire un dump complet de la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
À la courtine il suffit de brancher les cinq PC en RJ45 sur un switch (un de ceux du BJR qui sont au local) et tout tourne. Sur le platal il suffit de brancher les PC sur une prise dans le bataclan et ils ont internet (ils sont config pour utiliser la passerelle du bataclan). &amp;quot;Éventuellement&amp;quot; mettre à jour les PC avant de les embarquer l'année prochaine (ce n'est pas forcément une bonne idée : ça marche comme ça, un an de maj Archlinux c'est '''beaucoup''').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Si le serveur master meure : ne pas se poser trop de questions pour réparer, la base de donnée du slave est normalement parfaitement à jour. Donc éteindre le master et changer le &amp;lt;code&amp;gt;/etc/hosts&amp;lt;/code&amp;gt; des trois clients pour mettre &amp;lt;code&amp;gt;{magouilleuse|memorix} 129.104.201.65&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
itunnel est installé sur le serveur master : si le BRman a un pb à la courtine il peut brancher son iPhone sur le serveur et donner la main à quelqu'un d'autre.&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Screen_et_IRC&amp;diff=6718</id>
		<title>Screen et IRC</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Screen_et_IRC&amp;diff=6718"/>
		<updated>2011-07-10T21:42:56Z</updated>

		<summary type="html">&lt;p&gt;Arthur : /* Articles connexes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
C'est important de venir sur IRC chatter avec les membres du BR. Cela permet de discuter avec les autres BRmen, ce qui en plus d'être sympathique, est quand même quelque chose de parfois fondamental dans le travail de BRmen (quel qu'il soit), et donc dans le bon fonctionnement du BR de manière plus générale. Par ailleurs, on peut y trouver des anciens souvent disponibles, qui sont assez pratiques lorsqu'on a des questions. Le but de cet article est d'expliquer comment utiliser IRC comme un vrai BRman (ou une vraie BRwoman).&lt;br /&gt;
&lt;br /&gt;
=== screen ? moaz ? IRC ? Petit tour d'horizon pour ceux qui sont déjà perdus ===&lt;br /&gt;
&lt;br /&gt;
Tu peux trouver plus d'infos sur l'utilisation d'IRC à l'X [http://wikix.polytechnique.org/eleves/wikix/IRC sur le WikiX] ; voici juste un résumé de ce qui est utile à savoir : pour utiliser IRC, il faut se connecter à un serveur (ici, le serveur IRC du BR) par un logiciel que l'on appelle un client IRC. Les gens normaux utilisent un client IRC directement sur leur ordinateur pour se connecter à un serveur IRC (''cf'' la page du WikiX) ; mais au BR, on fait ça de façon un peu plus contournée mais beaucoup plus pratique - comme tu le verras par la suite. D'où cette page qui sert à expliquer cette méthode, dont je te conseille l'utilisation, quel que soit ton degré d'affinité avec les ordinateurs - elle n'est pas plus compliquée que la méthode normale et le gain est énorme.&lt;br /&gt;
&lt;br /&gt;
Continuons notre tour d'horizon : screen est un logiciel qui permet de laisser fonctionner une session sur une machine distante, même lorsqu'on n'est plus en train d'utiliser cette machine (entre autres et en un peu simplifié, mais c'est cette fonctionnalité précise qui nous intéressera ici). L'idée, en l'occurrence, c'est de pouvoir laisser tourner un client IRC sur une machine du BR (et pas sur son ordinateur !), de façon à ne pas se déconnecter d'IRC lorsqu'on éteint son ordi (puisque le client IRC est sur la machine du BR, et pas sur son ordi personnel). On se connecte alors à la machine du BR pour utiliser le client IRC qui y tourne ; donc en gros, tout se déroule comme si on utilisait un client IRC sur son ordinateur, sauf qu'on utilise à la place un logiciel pour se connecter à une machine du BR et utiliser le client IRC qui fonctionne déjà sur cette machine, avec l'avantage que cette machine là ne s'éteint jamais (en principe). Cet avantage te parait peut-être minime, mais il est en fait assez fondamental : comme tout le monde n'est pas devant son ordinateur en même temps, il permet de pouvoir tenir des discussions sur IRC sans avoir à se déconnecter en plein milieu de la discussion parce qu'on va en cours ou parce que son ordi ne marche plus ; par ailleurs, de façon équivalente, il permet de garder l'historique des conversations à disposition sans passer par les logs. Enfin, de plus, il permet aussi de pouvoir accéder au client IRC par n'importe quel ordinateur qui peut se connecter à la machine du BR (donc n'importe quel ordinateur qui se trouve sur le platâl, ou même un smartphone qui se connecte via le wi-fi de la DSI... c'est une façon comme une autre de s'occuper en conf DFHM), et retrouver ainsi ses discussions sur IRC même si on utilise pas son propre ordinateur (enfin, il faut quand même faire attention lorsqu'on utilise un ordinateur public).&lt;br /&gt;
&lt;br /&gt;
Et pour finir, moaz, c'est le petit nom de la machine du BR qui va héberger ton screen et ton client IRC persistant, et à laquelle tu vas se connecter pour les retrouver. Ainsi, pour résumer ce tour d'horizon, créer un screen sur moaz, cela te permet de laisser tourner ton client IRC (en l'occurrence irssi) tout le temps, et y accéder quand tu veux (voire d'où tu veux).&lt;br /&gt;
&lt;br /&gt;
== Se connecter sur moaz ==&lt;br /&gt;
&lt;br /&gt;
La connexion à moaz est la première étape à suivre. Pour se connecter à moaz, il y faut un compte ; en principe, on te l'a déjà créé, et si ce n'est pas le cas (ou si tu n'en sais rien), contacte un root (genre ton prez, il aime ça). Maintenant, la procédure pour se connecter à moaz est très simple et tu l'as peut-être même déjà suivie dans un autre cadre : il s'agit rigoureusement de la même que celle expliquée [http://wikix.polytechnique.org/eleves/wikix/Acc%C3%A8s_%C3%A0_distance_aux_ordinateurs_des_salles_info ici] pour accéder en ssh (''id est'' juste ouvrir une console) à un ordi des salles infos, sauf qu'à la place du nom de l'ordinateur de la salle info tu mets &amp;quot;moaz&amp;quot;. Donc avec windows cela revient juste à lancer PuTTY, taper &amp;quot;moaz&amp;quot; pour le nom d'hôte, vérifier que le mode de connexion &amp;quot;SSH&amp;quot; est bien sélectionné, et cliquer sur &amp;quot;Open&amp;quot; ; sous Linux, cela revient à taper &amp;lt;code&amp;gt;ssh nom_d_utilisateur_sur_moaz@moaz&amp;lt;/code&amp;gt; ; sous mac, je te laisse deviner.&lt;br /&gt;
&lt;br /&gt;
== Utilisation de screen avec irssi == &lt;br /&gt;
&lt;br /&gt;
Une fois connecté sur moaz, lance screen. On arrive à une petite subtilité. Comme tu le sais maintenant, screen permet de lancer une session qui continue d'exister sur moaz une fois qu'on soit parti ; donc si tu as déjà lancé screen avant, et que tu te connectes sur moaz plus tard, il ne faut pas le lancer une seconde fois, il faut rejoindre la session déjà lancée. Par contre si tu n'as jamais lancé screen avant, il faut bien créer une session...&lt;br /&gt;
&lt;br /&gt;
La commande suivante fait ce qu'il faut : si le screen &amp;lt;nowiki&amp;gt;irc&amp;lt;/nowiki&amp;gt; (on pourrait choisir d'appeler son screen n'importe comment, ou de ne pas le nommer) n'existe pas, il est crée ; si le screen existe on le ré-attache (on le rejoint).&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ screen -RD irc&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ceci étant fait, tu es maintenant dans ta session screen ; partant de là, soit tu vois déjà IRC (si tu as rejoins une session qui existait déjà, et où irssi était déjà lancé, ce qui devrait généralement être le cas), soit tu ne vois pas IRC (si tu viens de lancer screen pour la première fois) et pour le lancer il te suffit de taper&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ irssi&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et hop, maintenant tu es connecté à IRC ! Bienvenue !&lt;br /&gt;
&lt;br /&gt;
== Déconnexion ==&lt;br /&gt;
&lt;br /&gt;
Lorsqu'on souhaite se déconnecter de moaz (pour redémarrer son ordi perso par exemple), il faut &amp;quot;détacher&amp;quot; le screen, avec C-a d (ça veut dire appuyer sur Ctrl et a en même temps, relâcher, puis appuyer sur d), ce qui ramène à la console de moaz depuis laquelle on peut fermer la session sur moaz (avec C-d sous linux, plus prosaïquement en fermant PuTTY sous Windows). La session screen et donc le client IRC irssi continuent alors à tourner sur moaz alors qu'on est déconnecté. Pour revenir, il suffit de se reconnecter à moaz puis de rejoindre le screen (mais tu sais déjà faire tout cela, non ?).&lt;br /&gt;
&lt;br /&gt;
== Résumé ==&lt;br /&gt;
&lt;br /&gt;
Si tu as déjà compris le principe d'utiliser screen et de te connecter à IRC et tout, ou si tu t'en fous et que tu veux juste aller vite, voici un résumé des actions à faire pour se connecter à IRC :&lt;br /&gt;
# Se connecter à moaz (PuTTY / &amp;lt;code&amp;gt;$ssh login@moaz&amp;lt;/code&amp;gt; / ...)&lt;br /&gt;
# Rattacher ( = rejoindre) ta session screen avec &amp;lt;code&amp;gt;$ screen -RD irc&amp;lt;/code&amp;gt;&lt;br /&gt;
# Éventuellement, lancer irssi avec &amp;lt;code&amp;gt;$ irssi&amp;lt;/code&amp;gt; s'il n'est pas déjà en train de tourner&lt;br /&gt;
# Enjoy chatting&lt;br /&gt;
&lt;br /&gt;
== Articles connexes ==&lt;br /&gt;
&lt;br /&gt;
La page [[:screen]] contient des informations plus détaillées sur screen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fichiers de config ==&lt;br /&gt;
Voilà des fichiers de config pour irssi et screen :&lt;br /&gt;
===~/.screenrc===&lt;br /&gt;
 bell_msg &amp;quot;^G Bell in window %n&amp;quot;&lt;br /&gt;
 autodetach on&lt;br /&gt;
 startup_message off&lt;br /&gt;
 nonblock on&lt;br /&gt;
 vbell on&lt;br /&gt;
 defutf8 on&lt;br /&gt;
 defscrollback 1000&lt;br /&gt;
 &lt;br /&gt;
 caption always&lt;br /&gt;
 hardstatus string &amp;quot;%?%F%{= kG}%:%{= Wk}%? [$USER@%H] %n : %t&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 # Always show lastline&lt;br /&gt;
 caption string &amp;quot;%{= g}[ %{G}${USER}@%H%{g} ][%= %{= w}%?%-Lw%?%{r}(%{W}%n*%f %t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %d/%m %{W}%c:%s %{g}][%{Y}%l%{g}]%{=b C}%{W}&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Allow scrollback in xterm&lt;br /&gt;
 termcap xterm* LP&lt;br /&gt;
 termcapinfo xterm ti@:te@&lt;br /&gt;
&lt;br /&gt;
===~/.irssi/config===&lt;br /&gt;
 servers = (&lt;br /&gt;
  {&lt;br /&gt;
    address = &amp;quot;ircserver&amp;quot;;&lt;br /&gt;
    chatnet = &amp;quot;RezoSup&amp;quot;;&lt;br /&gt;
    port = &amp;quot;6767&amp;quot;;&lt;br /&gt;
    use_ssl = &amp;quot;yes&amp;quot;;&lt;br /&gt;
    ssl_verify = &amp;quot;no&amp;quot;;&lt;br /&gt;
    autoconnect = &amp;quot;yes&amp;quot;;&lt;br /&gt;
    no_proxy = &amp;quot;yes&amp;quot;;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    address = &amp;quot;irc.freenode.net&amp;quot;;&lt;br /&gt;
    chatnet = &amp;quot;FreeNode&amp;quot;;&lt;br /&gt;
    port = &amp;quot;6667&amp;quot;;&lt;br /&gt;
    autoconnect = &amp;quot;yes&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
 );&lt;br /&gt;
 &lt;br /&gt;
 chatnets = {&lt;br /&gt;
  RezoSup = {&lt;br /&gt;
    type = &amp;quot;IRC&amp;quot;;&lt;br /&gt;
    nick = &amp;quot;Arthur&amp;quot;;&lt;br /&gt;
    autosendcmd = &amp;quot;/^msg nickserv IDENTIFY ******;&amp;quot;;&lt;br /&gt;
  };&lt;br /&gt;
  FreeNode = {&lt;br /&gt;
    type = &amp;quot;IRC&amp;quot;;&lt;br /&gt;
    nick = &amp;quot;ArthurD&amp;quot;;&lt;br /&gt;
    autosendcmd = &amp;quot;/^msg nickserv identify ******;&amp;quot;;&lt;br /&gt;
  };&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 channels = (&lt;br /&gt;
  { name = &amp;quot;#root-br&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { name = &amp;quot;#br-actif&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { name = &amp;quot;#br2k9&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { name = &amp;quot;#frankiz&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { name = &amp;quot;#news-br&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { name = &amp;quot;#web-br&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { name = &amp;quot;#br&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { name = &amp;quot;#irc-br&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { name = &amp;quot;#opers&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { name = &amp;quot;#x&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { name = &amp;quot;#federez&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #  { name = &amp;quot;#ascii&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #  { name = &amp;quot;#admin-windows&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #  { name = &amp;quot;#infobr&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #  { name = &amp;quot;#xnet&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #  { name = &amp;quot;#ailleurs&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #TODO:Check if wanted# &lt;br /&gt;
&lt;br /&gt;
  #  { name = &amp;quot;#poly.org&amp;quot;; chatnet = &amp;quot;Freenode&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { name = &amp;quot;#archlinux&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { name = &amp;quot;#archlinux-fr&amp;quot;; chatnet = &amp;quot;Freenode&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #  { name = &amp;quot;#gentoo&amp;quot;; chatnet = &amp;quot;Freenode&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; }&lt;br /&gt;
  #  { name = &amp;quot;#physique&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #  { name = &amp;quot;#bural-br&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #  { name = &amp;quot;#resel&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #  { name = &amp;quot;#boulets&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #  { name = &amp;quot;#pi_perceptron&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #  { name = &amp;quot;#pendaison&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #  { name = &amp;quot;#br-vieux&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #  { name = &amp;quot;#br-private&amp;quot;; chatnet = &amp;quot;RezoSup&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  #  { name = &amp;quot;#channel&amp;quot;; chatnet = &amp;quot;freenode&amp;quot;; autojoin = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
 );&lt;br /&gt;
 &lt;br /&gt;
 aliases = {&lt;br /&gt;
  J = &amp;quot;join&amp;quot;;&lt;br /&gt;
  WJOIN = &amp;quot;join -window&amp;quot;;&lt;br /&gt;
  WQUERY = &amp;quot;query -window&amp;quot;;&lt;br /&gt;
  LEAVE = &amp;quot;part&amp;quot;;&lt;br /&gt;
  BYE = &amp;quot;quit&amp;quot;;&lt;br /&gt;
  EXIT = &amp;quot;quit&amp;quot;;&lt;br /&gt;
  SIGNOFF = &amp;quot;quit&amp;quot;;&lt;br /&gt;
  DESCRIBE = &amp;quot;action&amp;quot;;&lt;br /&gt;
  DATE = &amp;quot;time&amp;quot;;&lt;br /&gt;
  HOST = &amp;quot;userhost&amp;quot;;&lt;br /&gt;
  LAST = &amp;quot;lastlog&amp;quot;;&lt;br /&gt;
  SAY = &amp;quot;msg *&amp;quot;;&lt;br /&gt;
  WI = &amp;quot;whois&amp;quot;;&lt;br /&gt;
  WII = &amp;quot;whois $0 $0&amp;quot;;&lt;br /&gt;
  WW = &amp;quot;whowas&amp;quot;;&lt;br /&gt;
  W = &amp;quot;who&amp;quot;;&lt;br /&gt;
  N = &amp;quot;names&amp;quot;;&lt;br /&gt;
  M = &amp;quot;msg&amp;quot;;&lt;br /&gt;
  T = &amp;quot;topic&amp;quot;;&lt;br /&gt;
  C = &amp;quot;clear&amp;quot;;&lt;br /&gt;
  CL = &amp;quot;clear&amp;quot;;&lt;br /&gt;
  K = &amp;quot;kick&amp;quot;;&lt;br /&gt;
  KB = &amp;quot;kickban&amp;quot;;&lt;br /&gt;
  KN = &amp;quot;knockout&amp;quot;;&lt;br /&gt;
  BANS = &amp;quot;ban&amp;quot;;&lt;br /&gt;
  B = &amp;quot;ban&amp;quot;;&lt;br /&gt;
  MUB = &amp;quot;unban *&amp;quot;;&lt;br /&gt;
  UB = &amp;quot;unban&amp;quot;;&lt;br /&gt;
  IG = &amp;quot;ignore&amp;quot;;&lt;br /&gt;
  UNIG = &amp;quot;unignore&amp;quot;;&lt;br /&gt;
  SB = &amp;quot;scrollback&amp;quot;;&lt;br /&gt;
  UMODE = &amp;quot;mode $N&amp;quot;;&lt;br /&gt;
  WC = &amp;quot;window close&amp;quot;;&lt;br /&gt;
  WN = &amp;quot;window new hide&amp;quot;;&lt;br /&gt;
  SV = &amp;quot;say Irssi $J ($V) - http://irssi.org/&amp;quot;;&lt;br /&gt;
  GOTO = &amp;quot;sb goto&amp;quot;;&lt;br /&gt;
  CHAT = &amp;quot;dcc chat&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  RUN = &amp;quot;SCRIPT LOAD&amp;quot;;&lt;br /&gt;
  UPTIME = &amp;quot;eval exec - expr `date +%s` - \\$F | awk '{print \&amp;quot;Irssi uptime: \&amp;quot;int(\\\\\\$1/3600/24)\&amp;quot;d \&amp;quot;int(\\\\\\$1/3600%24)\&amp;quot;h \&amp;quot;int(\\\\\\$1/60%60)\&amp;quot;m \&amp;quot;int(\\\\\\$1%60)\&amp;quot;s\&amp;quot; }'&amp;quot;;&lt;br /&gt;
  CALC = &amp;quot;exec - if which bc &amp;amp;&amp;gt;/dev/null\\; then echo '$*' | bc | awk '{print \&amp;quot;$*=\&amp;quot;$$1}'\\; else echo bc was not found\\; fi&amp;quot;;&lt;br /&gt;
  SBAR = &amp;quot;STATUSBAR&amp;quot;;&lt;br /&gt;
  INVITELIST = &amp;quot;mode $C +I&amp;quot;;&lt;br /&gt;
  Q = &amp;quot;QUERY&amp;quot;;&lt;br /&gt;
  &amp;quot;MANUAL-WINDOWS&amp;quot; = &amp;quot;set use_status_window off;set autocreate_windows off;set autocreate_query_level none;set autoclose_windows off;set reuse_unused_windows on;save&amp;quot;;&lt;br /&gt;
  EXEMPTLIST = &amp;quot;mode $C +e&amp;quot;;&lt;br /&gt;
  ATAG = &amp;quot;WINDOW SERVER&amp;quot;;&lt;br /&gt;
  ADDALLCHANNELS = &amp;quot;script exec foreach my \\$channel (Irssi::channels()) { Irssi::command(\&amp;quot;channel add -auto \\$channel-&amp;gt;{name} \\$channel-&amp;gt;{server}-&amp;gt;{tag} \\$channel-&amp;gt;{key}\&amp;quot;)\\;}&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 statusbar = {&lt;br /&gt;
  # formats:&lt;br /&gt;
  # when using {templates}, the template is shown only if it's argument isn't&lt;br /&gt;
  # empty unless no argument is given. for example {sb} is printed always,&lt;br /&gt;
  # but {sb $T} is printed only if $T isn't empty.&lt;br /&gt;
  items = {&lt;br /&gt;
    # start/end text in statusbars&lt;br /&gt;
    barstart = &amp;quot;{sbstart}&amp;quot;;&lt;br /&gt;
    barend = &amp;quot;{sbend}&amp;quot;;&lt;br /&gt;
    topicbarstart = &amp;quot;{topicsbstart}&amp;quot;;&lt;br /&gt;
    topicbarend = &amp;quot;{topicsbend}&amp;quot;;&lt;br /&gt;
    # treated &amp;quot;normally&amp;quot;, you could change the time/user name to whatever&lt;br /&gt;
    time = &amp;quot;{sb $Z}&amp;quot;;&lt;br /&gt;
    user = &amp;quot;{sb {sbnickmode $cumode}$N{sbmode $usermode}{sbaway $A}}&amp;quot;;&lt;br /&gt;
    # treated specially .. window is printed with non-empty windows,&lt;br /&gt;
    # window_empty is printed with empty windows&lt;br /&gt;
    window = &amp;quot;{sb $winref:$itemname{sbmode $M}}&amp;quot;;&lt;br /&gt;
    window_empty = &amp;quot;{sb $winref{sbservertag $tag}}&amp;quot;;&lt;br /&gt;
    prompt = &amp;quot;{prompt $[.15]itemname}&amp;quot;;&lt;br /&gt;
    prompt_empty = &amp;quot;{prompt $winname}&amp;quot;;&lt;br /&gt;
    topic = &amp;quot; $topic&amp;quot;;&lt;br /&gt;
    topic_empty = &amp;quot; Irssi v$J - http://irssi.org/help/&amp;quot;;&lt;br /&gt;
    # all of these treated specially, they're only displayed when needed&lt;br /&gt;
    lag = &amp;quot;{sb Lag: $0-}&amp;quot;;&lt;br /&gt;
    act = &amp;quot;{sb Act: $0-}&amp;quot;;&lt;br /&gt;
    more = &amp;quot;-- more --&amp;quot;;&lt;br /&gt;
  };&lt;br /&gt;
  # there's two type of statusbars. root statusbars are either at the top&lt;br /&gt;
  # of the screen or at the bottom of the screen. window statusbars are at&lt;br /&gt;
  # the top/bottom of each split window in screen.&lt;br /&gt;
 &lt;br /&gt;
  default = {&lt;br /&gt;
    # the &amp;quot;default statusbar&amp;quot; to be displayed at the bottom of the window.&lt;br /&gt;
    # contains all the normal items.&lt;br /&gt;
    window = {&lt;br /&gt;
      disabled = &amp;quot;no&amp;quot;;&lt;br /&gt;
      # window, root&lt;br /&gt;
      type = &amp;quot;window&amp;quot;;&lt;br /&gt;
      # top, bottom&lt;br /&gt;
      placement = &amp;quot;bottom&amp;quot;;&lt;br /&gt;
      # number&lt;br /&gt;
      position = &amp;quot;1&amp;quot;;&lt;br /&gt;
      # active, inactive, always&lt;br /&gt;
      visible = &amp;quot;active&amp;quot;;&lt;br /&gt;
      # list of items in statusbar in the display order&lt;br /&gt;
      items = {&lt;br /&gt;
        barstart = { priority = &amp;quot;100&amp;quot;; };&lt;br /&gt;
        time = { };&lt;br /&gt;
        user = { };&lt;br /&gt;
        window = { };&lt;br /&gt;
        window_empty = { };&lt;br /&gt;
        lag = { priority = &amp;quot;-1&amp;quot;; };&lt;br /&gt;
        more = { priority = &amp;quot;-1&amp;quot;; alignment = &amp;quot;right&amp;quot;; };&lt;br /&gt;
        barend = { priority = &amp;quot;100&amp;quot;; alignment = &amp;quot;right&amp;quot;; };&lt;br /&gt;
        usercount = { };&lt;br /&gt;
      };&lt;br /&gt;
    };&lt;br /&gt;
    # statusbar to use in inactive split windows&lt;br /&gt;
    window_inact = {&lt;br /&gt;
      type = &amp;quot;window&amp;quot;;&lt;br /&gt;
      placement = &amp;quot;bottom&amp;quot;;&lt;br /&gt;
      position = &amp;quot;1&amp;quot;;&lt;br /&gt;
      visible = &amp;quot;inactive&amp;quot;;&lt;br /&gt;
      items = {&lt;br /&gt;
        barstart = { priority = &amp;quot;100&amp;quot;; };&lt;br /&gt;
        window = { };&lt;br /&gt;
        window_empty = { };&lt;br /&gt;
        more = { priority = &amp;quot;-1&amp;quot;; alignment = &amp;quot;right&amp;quot;; };&lt;br /&gt;
        barend = { priority = &amp;quot;100&amp;quot;; alignment = &amp;quot;right&amp;quot;; };&lt;br /&gt;
      };&lt;br /&gt;
    };&lt;br /&gt;
    # we treat input line as yet another statusbar :) It's possible to&lt;br /&gt;
    # add other items before or after the input line item.&lt;br /&gt;
    prompt = {&lt;br /&gt;
      type = &amp;quot;root&amp;quot;;&lt;br /&gt;
      placement = &amp;quot;bottom&amp;quot;;&lt;br /&gt;
      # we want to be at the bottom always&lt;br /&gt;
      position = &amp;quot;100&amp;quot;;&lt;br /&gt;
      visible = &amp;quot;always&amp;quot;;&lt;br /&gt;
      items = {&lt;br /&gt;
        prompt = { priority = &amp;quot;-1&amp;quot;; };&lt;br /&gt;
        prompt_empty = { priority = &amp;quot;-1&amp;quot;; };&lt;br /&gt;
        # treated specially, this is the real input line.&lt;br /&gt;
        input = { priority = &amp;quot;10&amp;quot;; };&lt;br /&gt;
      };&lt;br /&gt;
    };&lt;br /&gt;
    # topicbar&lt;br /&gt;
    topic = {&lt;br /&gt;
      type = &amp;quot;root&amp;quot;;&lt;br /&gt;
      placement = &amp;quot;top&amp;quot;;&lt;br /&gt;
      position = &amp;quot;1&amp;quot;;&lt;br /&gt;
      visible = &amp;quot;always&amp;quot;;&lt;br /&gt;
      items = {&lt;br /&gt;
        topicbarstart = { priority = &amp;quot;100&amp;quot;; };&lt;br /&gt;
        topic = { };&lt;br /&gt;
        topic_empty = { };&lt;br /&gt;
        topicbarend = { priority = &amp;quot;100&amp;quot;; alignment = &amp;quot;right&amp;quot;; };&lt;br /&gt;
      };&lt;br /&gt;
    };&lt;br /&gt;
    awl_0 = {&lt;br /&gt;
      items = {&lt;br /&gt;
        barstart = { priority = &amp;quot;100&amp;quot;; };&lt;br /&gt;
        awl_0 = { };&lt;br /&gt;
        barend = { priority = &amp;quot;100&amp;quot;; alignment = &amp;quot;right&amp;quot;; };&lt;br /&gt;
      };&lt;br /&gt;
    };&lt;br /&gt;
  };&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 settings = {&lt;br /&gt;
  core = {&lt;br /&gt;
    real_name = &amp;quot;Arthur Darcet&amp;quot;;&lt;br /&gt;
    user_name = &amp;quot;Arthur&amp;quot;;&lt;br /&gt;
    nick = &amp;quot;Arthur&amp;quot;;&lt;br /&gt;
    recode = &amp;quot;yes&amp;quot;;&lt;br /&gt;
    recode_autodetect_utf8 = &amp;quot;yes&amp;quot;;&lt;br /&gt;
    recode_out_default_charset = &amp;quot;UTF-8&amp;quot;;&lt;br /&gt;
    recode_fallback = &amp;quot;CP1252&amp;quot;;&lt;br /&gt;
    server_reconnect_time = &amp;quot;10&amp;quot;;&lt;br /&gt;
    quit_message = &amp;quot;&amp;quot;;&lt;br /&gt;
    timestamp_format = &amp;quot;%d|%H:%M:%S&amp;quot;;&lt;br /&gt;
    #    use_proxy = &amp;quot;yes&amp;quot;;&lt;br /&gt;
    #    proxy_address = &amp;quot;129.104.247.2&amp;quot;;&lt;br /&gt;
    #    proxy_port = &amp;quot;8080&amp;quot;;&lt;br /&gt;
    #    proxy_string = &amp;quot;CONNECT %s:%d HTTP/1.0\012\012&amp;quot;;&lt;br /&gt;
  };&lt;br /&gt;
  &amp;quot;fe-common/core&amp;quot; = {&lt;br /&gt;
    autolog = &amp;quot;yes&amp;quot;;&lt;br /&gt;
    autolog_path = &amp;quot;~/irclogs/%Y/$tag-$0-%m-%d.log&amp;quot;;&lt;br /&gt;
    term_charset = &amp;quot;utf-8&amp;quot;;&lt;br /&gt;
    timestamps = &amp;quot;yes&amp;quot;;&lt;br /&gt;
    show_nickmode = &amp;quot;yes&amp;quot;;&lt;br /&gt;
    show_nickmode_empty = &amp;quot;yes&amp;quot;;&lt;br /&gt;
    theme = &amp;quot;mytheme&amp;quot;;&lt;br /&gt;
    bell_beeps = &amp;quot;yes&amp;quot;;&lt;br /&gt;
    beep_msg_level = &amp;quot;HILIGHT&amp;quot;;&lt;br /&gt;
    beep_when_window_active = &amp;quot;yes&amp;quot;;&lt;br /&gt;
    beep_when_away = &amp;quot;yes&amp;quot;;&lt;br /&gt;
    completion_char = &amp;quot; :&amp;quot;;&lt;br /&gt;
  };&lt;br /&gt;
  &amp;quot;irc/core&amp;quot; = { lag_max_before_disconnect = &amp;quot;300&amp;quot;; knockout_time = &amp;quot;5&amp;quot;; };&lt;br /&gt;
  &amp;quot;fe-text&amp;quot; = { indent = &amp;quot;8&amp;quot;; actlist_sort = &amp;quot;refnum&amp;quot;; };&lt;br /&gt;
  &amp;quot;perl/core/scripts&amp;quot; = {&lt;br /&gt;
    autorejoin_channels = &amp;quot;#root-br #br2k9 #br #x #news-br #frankiz #web-br #br-actif #federez #ascii #archlinux #archlinux-fr&amp;quot;;&lt;br /&gt;
    nicklist_automode = &amp;quot;screen&amp;quot;;&lt;br /&gt;
    awl_display_nokey_active = &amp;quot;$Q:$H$C$S&amp;quot;;&lt;br /&gt;
    awl_display_key = &amp;quot;$Q|$H$C$S&amp;quot;;&lt;br /&gt;
    awl_display_key_active = &amp;quot;$Q:$H$C$S&amp;quot;;&lt;br /&gt;
    awl_display_nokey = &amp;quot;$Q|$H$C$S&amp;quot;;&lt;br /&gt;
  };&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 hilights = (&lt;br /&gt;
  #  { text = &amp;quot;root&amp;quot;; nick = &amp;quot;yes&amp;quot;; word = &amp;quot;yes&amp;quot;; fullword = &amp;quot;no&amp;quot;; },&lt;br /&gt;
  #  {&lt;br /&gt;
  #    text = &amp;quot;CRIT&amp;quot;;&lt;br /&gt;
  #    color = &amp;quot;%Y&amp;quot;;&lt;br /&gt;
  #    nick = &amp;quot;no&amp;quot;;&lt;br /&gt;
  #    word = &amp;quot;yes&amp;quot;;&lt;br /&gt;
  #    fullword = &amp;quot;yes&amp;quot;;&lt;br /&gt;
  #    channels = ( &amp;quot;#root-br&amp;quot; );&lt;br /&gt;
  #  },&lt;br /&gt;
  #  { text = &amp;quot;magnan&amp;quot;; nick = &amp;quot;yes&amp;quot;; word = &amp;quot;yes&amp;quot;; fullword = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { text = &amp;quot;root&amp;quot;; nick = &amp;quot;yes&amp;quot;; word = &amp;quot;yes&amp;quot;; fullword = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { text = &amp;quot;2k9&amp;quot;; nick = &amp;quot;yes&amp;quot;; word = &amp;quot;yes&amp;quot;; fullword = &amp;quot;yes&amp;quot;; },&lt;br /&gt;
  { text = &amp;quot;2009&amp;quot;; nick = &amp;quot;yes&amp;quot;; word = &amp;quot;yes&amp;quot;; fullword = &amp;quot;yes&amp;quot;; }&lt;br /&gt;
 );&lt;br /&gt;
 &lt;br /&gt;
 keyboard = (&lt;br /&gt;
  { key = &amp;quot;meta-a&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;2&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-z&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;3&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-e&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;4&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-r&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;5&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-t&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;6&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-y&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;7&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-u&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;8&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-i&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;9&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-o&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;10&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-p&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;11&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-q&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;12&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-s&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;13&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-d&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;14&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-f&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;15&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-g&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;16&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-h&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;17&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-j&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;18&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-k&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;19&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-l&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;20&amp;quot;; },&lt;br /&gt;
  { key = &amp;quot;meta-m&amp;quot;; id = &amp;quot;change_window&amp;quot;; data = &amp;quot;21&amp;quot;; }&lt;br /&gt;
 );&lt;br /&gt;
 &lt;br /&gt;
 logs = { };&lt;br /&gt;
 ignores = ( );&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Screen_et_IRC&amp;diff=6717</id>
		<title>Screen et IRC</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Screen_et_IRC&amp;diff=6717"/>
		<updated>2011-07-10T21:31:18Z</updated>

		<summary type="html">&lt;p&gt;Arthur : /* Résumé */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
C'est important de venir sur IRC chatter avec les membres du BR. Cela permet de discuter avec les autres BRmen, ce qui en plus d'être sympathique, est quand même quelque chose de parfois fondamental dans le travail de BRmen (quel qu'il soit), et donc dans le bon fonctionnement du BR de manière plus générale. Par ailleurs, on peut y trouver des anciens souvent disponibles, qui sont assez pratiques lorsqu'on a des questions. Le but de cet article est d'expliquer comment utiliser IRC comme un vrai BRman (ou une vraie BRwoman).&lt;br /&gt;
&lt;br /&gt;
=== screen ? moaz ? IRC ? Petit tour d'horizon pour ceux qui sont déjà perdus ===&lt;br /&gt;
&lt;br /&gt;
Tu peux trouver plus d'infos sur l'utilisation d'IRC à l'X [http://wikix.polytechnique.org/eleves/wikix/IRC sur le WikiX] ; voici juste un résumé de ce qui est utile à savoir : pour utiliser IRC, il faut se connecter à un serveur (ici, le serveur IRC du BR) par un logiciel que l'on appelle un client IRC. Les gens normaux utilisent un client IRC directement sur leur ordinateur pour se connecter à un serveur IRC (''cf'' la page du WikiX) ; mais au BR, on fait ça de façon un peu plus contournée mais beaucoup plus pratique - comme tu le verras par la suite. D'où cette page qui sert à expliquer cette méthode, dont je te conseille l'utilisation, quel que soit ton degré d'affinité avec les ordinateurs - elle n'est pas plus compliquée que la méthode normale et le gain est énorme.&lt;br /&gt;
&lt;br /&gt;
Continuons notre tour d'horizon : screen est un logiciel qui permet de laisser fonctionner une session sur une machine distante, même lorsqu'on n'est plus en train d'utiliser cette machine (entre autres et en un peu simplifié, mais c'est cette fonctionnalité précise qui nous intéressera ici). L'idée, en l'occurrence, c'est de pouvoir laisser tourner un client IRC sur une machine du BR (et pas sur son ordinateur !), de façon à ne pas se déconnecter d'IRC lorsqu'on éteint son ordi (puisque le client IRC est sur la machine du BR, et pas sur son ordi personnel). On se connecte alors à la machine du BR pour utiliser le client IRC qui y tourne ; donc en gros, tout se déroule comme si on utilisait un client IRC sur son ordinateur, sauf qu'on utilise à la place un logiciel pour se connecter à une machine du BR et utiliser le client IRC qui fonctionne déjà sur cette machine, avec l'avantage que cette machine là ne s'éteint jamais (en principe). Cet avantage te parait peut-être minime, mais il est en fait assez fondamental : comme tout le monde n'est pas devant son ordinateur en même temps, il permet de pouvoir tenir des discussions sur IRC sans avoir à se déconnecter en plein milieu de la discussion parce qu'on va en cours ou parce que son ordi ne marche plus ; par ailleurs, de façon équivalente, il permet de garder l'historique des conversations à disposition sans passer par les logs. Enfin, de plus, il permet aussi de pouvoir accéder au client IRC par n'importe quel ordinateur qui peut se connecter à la machine du BR (donc n'importe quel ordinateur qui se trouve sur le platâl, ou même un smartphone qui se connecte via le wi-fi de la DSI... c'est une façon comme une autre de s'occuper en conf DFHM), et retrouver ainsi ses discussions sur IRC même si on utilise pas son propre ordinateur (enfin, il faut quand même faire attention lorsqu'on utilise un ordinateur public).&lt;br /&gt;
&lt;br /&gt;
Et pour finir, moaz, c'est le petit nom de la machine du BR qui va héberger ton screen et ton client IRC persistant, et à laquelle tu vas se connecter pour les retrouver. Ainsi, pour résumer ce tour d'horizon, créer un screen sur moaz, cela te permet de laisser tourner ton client IRC (en l'occurrence irssi) tout le temps, et y accéder quand tu veux (voire d'où tu veux).&lt;br /&gt;
&lt;br /&gt;
== Se connecter sur moaz ==&lt;br /&gt;
&lt;br /&gt;
La connexion à moaz est la première étape à suivre. Pour se connecter à moaz, il y faut un compte ; en principe, on te l'a déjà créé, et si ce n'est pas le cas (ou si tu n'en sais rien), contacte un root (genre ton prez, il aime ça). Maintenant, la procédure pour se connecter à moaz est très simple et tu l'as peut-être même déjà suivie dans un autre cadre : il s'agit rigoureusement de la même que celle expliquée [http://wikix.polytechnique.org/eleves/wikix/Acc%C3%A8s_%C3%A0_distance_aux_ordinateurs_des_salles_info ici] pour accéder en ssh (''id est'' juste ouvrir une console) à un ordi des salles infos, sauf qu'à la place du nom de l'ordinateur de la salle info tu mets &amp;quot;moaz&amp;quot;. Donc avec windows cela revient juste à lancer PuTTY, taper &amp;quot;moaz&amp;quot; pour le nom d'hôte, vérifier que le mode de connexion &amp;quot;SSH&amp;quot; est bien sélectionné, et cliquer sur &amp;quot;Open&amp;quot; ; sous Linux, cela revient à taper &amp;lt;code&amp;gt;ssh nom_d_utilisateur_sur_moaz@moaz&amp;lt;/code&amp;gt; ; sous mac, je te laisse deviner.&lt;br /&gt;
&lt;br /&gt;
== Utilisation de screen avec irssi == &lt;br /&gt;
&lt;br /&gt;
Une fois connecté sur moaz, lance screen. On arrive à une petite subtilité. Comme tu le sais maintenant, screen permet de lancer une session qui continue d'exister sur moaz une fois qu'on soit parti ; donc si tu as déjà lancé screen avant, et que tu te connectes sur moaz plus tard, il ne faut pas le lancer une seconde fois, il faut rejoindre la session déjà lancée. Par contre si tu n'as jamais lancé screen avant, il faut bien créer une session...&lt;br /&gt;
&lt;br /&gt;
La commande suivante fait ce qu'il faut : si le screen &amp;lt;nowiki&amp;gt;irc&amp;lt;/nowiki&amp;gt; (on pourrait choisir d'appeler son screen n'importe comment, ou de ne pas le nommer) n'existe pas, il est crée ; si le screen existe on le ré-attache (on le rejoint).&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ screen -RD irc&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ceci étant fait, tu es maintenant dans ta session screen ; partant de là, soit tu vois déjà IRC (si tu as rejoins une session qui existait déjà, et où irssi était déjà lancé, ce qui devrait généralement être le cas), soit tu ne vois pas IRC (si tu viens de lancer screen pour la première fois) et pour le lancer il te suffit de taper&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ irssi&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et hop, maintenant tu es connecté à IRC ! Bienvenue !&lt;br /&gt;
&lt;br /&gt;
== Déconnexion ==&lt;br /&gt;
&lt;br /&gt;
Lorsqu'on souhaite se déconnecter de moaz (pour redémarrer son ordi perso par exemple), il faut &amp;quot;détacher&amp;quot; le screen, avec C-a d (ça veut dire appuyer sur Ctrl et a en même temps, relâcher, puis appuyer sur d), ce qui ramène à la console de moaz depuis laquelle on peut fermer la session sur moaz (avec C-d sous linux, plus prosaïquement en fermant PuTTY sous Windows). La session screen et donc le client IRC irssi continuent alors à tourner sur moaz alors qu'on est déconnecté. Pour revenir, il suffit de se reconnecter à moaz puis de rejoindre le screen (mais tu sais déjà faire tout cela, non ?).&lt;br /&gt;
&lt;br /&gt;
== Résumé ==&lt;br /&gt;
&lt;br /&gt;
Si tu as déjà compris le principe d'utiliser screen et de te connecter à IRC et tout, ou si tu t'en fous et que tu veux juste aller vite, voici un résumé des actions à faire pour se connecter à IRC :&lt;br /&gt;
# Se connecter à moaz (PuTTY / &amp;lt;code&amp;gt;$ssh login@moaz&amp;lt;/code&amp;gt; / ...)&lt;br /&gt;
# Rattacher ( = rejoindre) ta session screen avec &amp;lt;code&amp;gt;$ screen -RD irc&amp;lt;/code&amp;gt;&lt;br /&gt;
# Éventuellement, lancer irssi avec &amp;lt;code&amp;gt;$ irssi&amp;lt;/code&amp;gt; s'il n'est pas déjà en train de tourner&lt;br /&gt;
# Enjoy chatting&lt;br /&gt;
&lt;br /&gt;
== Articles connexes ==&lt;br /&gt;
&lt;br /&gt;
La page [[:screen]] contient des informations plus détaillées sur screen.&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Screen_et_IRC&amp;diff=6716</id>
		<title>Screen et IRC</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Screen_et_IRC&amp;diff=6716"/>
		<updated>2011-07-10T21:30:32Z</updated>

		<summary type="html">&lt;p&gt;Arthur : /* Utilisation de screen avec irssi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
C'est important de venir sur IRC chatter avec les membres du BR. Cela permet de discuter avec les autres BRmen, ce qui en plus d'être sympathique, est quand même quelque chose de parfois fondamental dans le travail de BRmen (quel qu'il soit), et donc dans le bon fonctionnement du BR de manière plus générale. Par ailleurs, on peut y trouver des anciens souvent disponibles, qui sont assez pratiques lorsqu'on a des questions. Le but de cet article est d'expliquer comment utiliser IRC comme un vrai BRman (ou une vraie BRwoman).&lt;br /&gt;
&lt;br /&gt;
=== screen ? moaz ? IRC ? Petit tour d'horizon pour ceux qui sont déjà perdus ===&lt;br /&gt;
&lt;br /&gt;
Tu peux trouver plus d'infos sur l'utilisation d'IRC à l'X [http://wikix.polytechnique.org/eleves/wikix/IRC sur le WikiX] ; voici juste un résumé de ce qui est utile à savoir : pour utiliser IRC, il faut se connecter à un serveur (ici, le serveur IRC du BR) par un logiciel que l'on appelle un client IRC. Les gens normaux utilisent un client IRC directement sur leur ordinateur pour se connecter à un serveur IRC (''cf'' la page du WikiX) ; mais au BR, on fait ça de façon un peu plus contournée mais beaucoup plus pratique - comme tu le verras par la suite. D'où cette page qui sert à expliquer cette méthode, dont je te conseille l'utilisation, quel que soit ton degré d'affinité avec les ordinateurs - elle n'est pas plus compliquée que la méthode normale et le gain est énorme.&lt;br /&gt;
&lt;br /&gt;
Continuons notre tour d'horizon : screen est un logiciel qui permet de laisser fonctionner une session sur une machine distante, même lorsqu'on n'est plus en train d'utiliser cette machine (entre autres et en un peu simplifié, mais c'est cette fonctionnalité précise qui nous intéressera ici). L'idée, en l'occurrence, c'est de pouvoir laisser tourner un client IRC sur une machine du BR (et pas sur son ordinateur !), de façon à ne pas se déconnecter d'IRC lorsqu'on éteint son ordi (puisque le client IRC est sur la machine du BR, et pas sur son ordi personnel). On se connecte alors à la machine du BR pour utiliser le client IRC qui y tourne ; donc en gros, tout se déroule comme si on utilisait un client IRC sur son ordinateur, sauf qu'on utilise à la place un logiciel pour se connecter à une machine du BR et utiliser le client IRC qui fonctionne déjà sur cette machine, avec l'avantage que cette machine là ne s'éteint jamais (en principe). Cet avantage te parait peut-être minime, mais il est en fait assez fondamental : comme tout le monde n'est pas devant son ordinateur en même temps, il permet de pouvoir tenir des discussions sur IRC sans avoir à se déconnecter en plein milieu de la discussion parce qu'on va en cours ou parce que son ordi ne marche plus ; par ailleurs, de façon équivalente, il permet de garder l'historique des conversations à disposition sans passer par les logs. Enfin, de plus, il permet aussi de pouvoir accéder au client IRC par n'importe quel ordinateur qui peut se connecter à la machine du BR (donc n'importe quel ordinateur qui se trouve sur le platâl, ou même un smartphone qui se connecte via le wi-fi de la DSI... c'est une façon comme une autre de s'occuper en conf DFHM), et retrouver ainsi ses discussions sur IRC même si on utilise pas son propre ordinateur (enfin, il faut quand même faire attention lorsqu'on utilise un ordinateur public).&lt;br /&gt;
&lt;br /&gt;
Et pour finir, moaz, c'est le petit nom de la machine du BR qui va héberger ton screen et ton client IRC persistant, et à laquelle tu vas se connecter pour les retrouver. Ainsi, pour résumer ce tour d'horizon, créer un screen sur moaz, cela te permet de laisser tourner ton client IRC (en l'occurrence irssi) tout le temps, et y accéder quand tu veux (voire d'où tu veux).&lt;br /&gt;
&lt;br /&gt;
== Se connecter sur moaz ==&lt;br /&gt;
&lt;br /&gt;
La connexion à moaz est la première étape à suivre. Pour se connecter à moaz, il y faut un compte ; en principe, on te l'a déjà créé, et si ce n'est pas le cas (ou si tu n'en sais rien), contacte un root (genre ton prez, il aime ça). Maintenant, la procédure pour se connecter à moaz est très simple et tu l'as peut-être même déjà suivie dans un autre cadre : il s'agit rigoureusement de la même que celle expliquée [http://wikix.polytechnique.org/eleves/wikix/Acc%C3%A8s_%C3%A0_distance_aux_ordinateurs_des_salles_info ici] pour accéder en ssh (''id est'' juste ouvrir une console) à un ordi des salles infos, sauf qu'à la place du nom de l'ordinateur de la salle info tu mets &amp;quot;moaz&amp;quot;. Donc avec windows cela revient juste à lancer PuTTY, taper &amp;quot;moaz&amp;quot; pour le nom d'hôte, vérifier que le mode de connexion &amp;quot;SSH&amp;quot; est bien sélectionné, et cliquer sur &amp;quot;Open&amp;quot; ; sous Linux, cela revient à taper &amp;lt;code&amp;gt;ssh nom_d_utilisateur_sur_moaz@moaz&amp;lt;/code&amp;gt; ; sous mac, je te laisse deviner.&lt;br /&gt;
&lt;br /&gt;
== Utilisation de screen avec irssi == &lt;br /&gt;
&lt;br /&gt;
Une fois connecté sur moaz, lance screen. On arrive à une petite subtilité. Comme tu le sais maintenant, screen permet de lancer une session qui continue d'exister sur moaz une fois qu'on soit parti ; donc si tu as déjà lancé screen avant, et que tu te connectes sur moaz plus tard, il ne faut pas le lancer une seconde fois, il faut rejoindre la session déjà lancée. Par contre si tu n'as jamais lancé screen avant, il faut bien créer une session...&lt;br /&gt;
&lt;br /&gt;
La commande suivante fait ce qu'il faut : si le screen &amp;lt;nowiki&amp;gt;irc&amp;lt;/nowiki&amp;gt; (on pourrait choisir d'appeler son screen n'importe comment, ou de ne pas le nommer) n'existe pas, il est crée ; si le screen existe on le ré-attache (on le rejoint).&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ screen -RD irc&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ceci étant fait, tu es maintenant dans ta session screen ; partant de là, soit tu vois déjà IRC (si tu as rejoins une session qui existait déjà, et où irssi était déjà lancé, ce qui devrait généralement être le cas), soit tu ne vois pas IRC (si tu viens de lancer screen pour la première fois) et pour le lancer il te suffit de taper&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ irssi&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et hop, maintenant tu es connecté à IRC ! Bienvenue !&lt;br /&gt;
&lt;br /&gt;
== Déconnexion ==&lt;br /&gt;
&lt;br /&gt;
Lorsqu'on souhaite se déconnecter de moaz (pour redémarrer son ordi perso par exemple), il faut &amp;quot;détacher&amp;quot; le screen, avec C-a d (ça veut dire appuyer sur Ctrl et a en même temps, relâcher, puis appuyer sur d), ce qui ramène à la console de moaz depuis laquelle on peut fermer la session sur moaz (avec C-d sous linux, plus prosaïquement en fermant PuTTY sous Windows). La session screen et donc le client IRC irssi continuent alors à tourner sur moaz alors qu'on est déconnecté. Pour revenir, il suffit de se reconnecter à moaz puis de rejoindre le screen (mais tu sais déjà faire tout cela, non ?).&lt;br /&gt;
&lt;br /&gt;
== Résumé ==&lt;br /&gt;
&lt;br /&gt;
Si tu as déjà compris le principe d'utiliser screen et de te connecter à IRC et tout, ou si tu t'en fous et que tu veux juste aller vite, voici un résumé des actions à faire pour se connecter à IRC :&lt;br /&gt;
# Se connecter à moaz (PuTTY / &amp;lt;code&amp;gt;$ssh login@moaz&amp;lt;/code&amp;gt; / ...)&lt;br /&gt;
# Rattacher ( = rejoindre) ta session screen avec &amp;lt;code&amp;gt;$ screen -D -RR&amp;lt;/code&amp;gt;, ou en créer une (si tu n'en as pas encore créé) avec &amp;lt;code&amp;gt;$ screen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Éventuellement, lancer irssi avec &amp;lt;code&amp;gt;$ irssi&amp;lt;/code&amp;gt; s'il n'est pas déjà en train de tourner&lt;br /&gt;
# Enjoy chatting&lt;br /&gt;
&lt;br /&gt;
== Articles connexes ==&lt;br /&gt;
&lt;br /&gt;
La page [[:screen]] contient des informations plus détaillées sur screen.&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Frankiz&amp;diff=6713</id>
		<title>Frankiz</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Frankiz&amp;diff=6713"/>
		<updated>2011-07-07T08:38:18Z</updated>

		<summary type="html">&lt;p&gt;Arthur : /* Authentification sur des sites externes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Frankiz est le portail interne des élèves.&lt;br /&gt;
&lt;br /&gt;
La version actuelle (3) a été lancée par le BR2k8 juste avant son départ du plateau. Elle est principalement destinée à pouvoir ouvrir l'utilisation de Frankiz aux écoles arrivant progressivement sur le plateau, et à devenir ainsi un portail de la vie associative du campus.&lt;br /&gt;
&lt;br /&gt;
Le code de Frankiz3 est libre, et utilise git comme système de versionnement.&lt;br /&gt;
Il est intégralement disponible à l'adresse suivante : http://git.frankiz.net/frankiz/&lt;br /&gt;
&lt;br /&gt;
= Développement =&lt;br /&gt;
&lt;br /&gt;
Les principaux projets de développement sont actuellement (juillet 2001) :&lt;br /&gt;
* l'élargissement effectif aux autres écoles, en travaillant notamment sur :&lt;br /&gt;
** la simplicité de création de nouveaux comptes, avec nomination de modérateurs dans chaque école&lt;br /&gt;
** le cloisonnement des données et la possibilité de définir des champs de visibilité&lt;br /&gt;
* la création de mini-forums qui remplaceraient à la fois les annonces et les newsgroups&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Outils pour les développeurs ==&lt;br /&gt;
=== Authentification sur des sites externes ===&lt;br /&gt;
&lt;br /&gt;
Frankiz permet à des sites externes (binets en particulier) d'utiliser sa base de données pour authentifier les utilisateurs.&lt;br /&gt;
&lt;br /&gt;
Le webmaster du site en question doit auparavant faire une demande de mise en place de ce système en envoyant un mail à l'équipe frankiz (frankiz@frankiz.polytechnique.fr).&lt;br /&gt;
Il doit alors donner :&lt;br /&gt;
* l'url complète de la page de login de son site&lt;br /&gt;
* les informations auxquelles il souhaite accéder&lt;br /&gt;
* une justification de la demande (et oui, on ne partage évidemment pas notre base de données avec n'importe qui !)&lt;br /&gt;
&lt;br /&gt;
Si la demande est acceptée, l'équipe frankiz renvoie alors une clé permettant d'authentifier les échanges d'informations entre frankiz et le site externe.&lt;br /&gt;
Le site est alors inscrit dans notre base de données, et peut utiliser le système d'authentification externe.&lt;br /&gt;
&lt;br /&gt;
Ci dessous un exemple commenté de script d'authentification, à mettre sur le site externe :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
    header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');&lt;br /&gt;
&lt;br /&gt;
    //première étape, côté client&lt;br /&gt;
&lt;br /&gt;
    $timestamp = time(); // prendre le timestamp permet d'éviter le rejeu de la requête&lt;br /&gt;
    $site = 'http://monsite/login'; // url de la page de login, doit correspondre *exactement* à celle entrée dans la base de données de frankiz (définie lors de l'inscription)&lt;br /&gt;
&lt;br /&gt;
    $location  = &amp;quot;...&amp;quot; &lt;br /&gt;
    // Champ non utile pour l'authentification et retransmis tel quel par frankiz. &lt;br /&gt;
    // Il est prévu pour pouvoir mettre en place un système de redirection après &lt;br /&gt;
    // authentification, vers la page à partir de laquelle le client avait tenté de se connecter.&lt;br /&gt;
&lt;br /&gt;
    $request = json_encode(array('names', 'rights'));&lt;br /&gt;
    // Nature de la requête.&lt;br /&gt;
    // Fkz renverra ici à la fois les noms de la personne mais aussi ses droits dans différents groupes.&lt;br /&gt;
    // Il faut cependant que le site ait les droits sur les informations en question (à définir lors de son inscription).&lt;br /&gt;
&lt;br /&gt;
    $key = &amp;quot;...&amp;quot;; // clé fournie par l'équipe frankiz lors de l'inscription du site&lt;br /&gt;
&lt;br /&gt;
    $hash = md5($timestamp . $site . $key . $request);&lt;br /&gt;
    // On hash le tout authentifier les données&lt;br /&gt;
&lt;br /&gt;
    $remote  = $globals-&amp;gt;frankiz-&amp;gt;url . '/remote?' . 'timestamp=' . $timestamp . '&amp;amp;site=' . $site . '&amp;amp;location=' . $location . '&amp;amp;hash=' . $hash . '&amp;amp;request=' . $request;&lt;br /&gt;
    header(&amp;quot;Location:&amp;quot; . $remote); // et on redirige&lt;br /&gt;
&lt;br /&gt;
    // 2nd étape, côté frankiz :&lt;br /&gt;
    // regarder sur git.frankiz.net si le code le code vous intéresse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // 3ème étape, côté client :&lt;br /&gt;
&lt;br /&gt;
    $timestamp = $_GET['timestamp'];&lt;br /&gt;
    // On récupère le timestamp envoyé la première fois&lt;br /&gt;
&lt;br /&gt;
    if (abs($timestamp - time()) &amp;lt; 600)&lt;br /&gt;
    { // On vérifie qu'il est cohérent&lt;br /&gt;
        $response = $_GET['response']; // On vérifie le hash de la réponse&lt;br /&gt;
        if (md5($timestamp . $globals-&amp;gt;frankiz-&amp;gt;key . $response) == $_GET['hash'])&lt;br /&gt;
        {&lt;br /&gt;
            $response = json_decode($response, true); // On décode la réponse qui est en json&lt;br /&gt;
            if (in_array('admin', $response['rights']['my_group']))&lt;br /&gt;
            { // On peut vérifier le niveau de droit de l'utilisateur dans certains groupes renvoyés&lt;br /&gt;
                echo 'gagné !';&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
         &lt;br /&gt;
     &lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
</feed>