corrections on french translation for clone.
[gitmagic.git] / fr / clone.txt
blob9e0d0b07d7f960c811a8a3823bcafb87f141a5ef
1 == Clônons gaiement ==
3 Avec les anciens systèmes de gestion de version, l'opération standard pour obtenir un fichier est le checkout xxx. Vous obtenez un ensemble de fichiers correspondant à un état particulier précédement enregistré.
5 Avec Git et d'autres systèmes distribués de gestion de version, le clônage est l'opération standard. Pour obtenir des fichiers, on crée un 'clone' du dépôt entier. En d'autres termes, il s'agit de faire un http://fr.wikipedia.org/wiki/Site_miroir[miroir] du serveur central. Tout ce qui peut se faire sur le dépôt central peut être fait sur le vôtre.
7 === Machines Synchros ===
9 Je peux imaginer faire des archives *tar* ou utiliser *rsync* pour des sauvegardes ou une synchronisation simple. Mais parfois j'édite sur mon portable, d'autres fois sur mon fixe, et les deux peuvent ne pas avoir communiqué entre temps.
11 Initialisez un dépôt Git et faites-le *commit* de vos fichiers sur une machine. Ensuite sur l'autre :
13  $ git clone autre.ordinateur:/chemin/vers/les/fichiers
15 pour créer une deuxième copie de ces fichiers et dépôt Git.
17 À partir de ce moment,
19  $ git commit -a
20  $ git pull autre.ordinateur:/chemin/vers/les/fichiers HEAD
22 ira chercher l'état des fichiers sur l'autre ordinateur pour mettre à jour celui sur lequel vous travaillez. Si vous avez fait récemment des modifications en conflit dans le même fichiers, Git vous le signalera et vous devrez répéter à nouveau le commit après avoir résolu ces conflits.
24 === gestion classique des sources ===
26 Initialisez le dépôt Git de vos fichiers :
27  $ git init
28  $ git add .
29  $ git commit -m "Commit initial"
31 Sur le serveur central, initialisez un 'dépôt nu' (*bare* dans la terminologie G) dans un dossier quelconque :
33  $ mkdir proj.git
34  $ cd proj.git
35  $ git init --bare
36  $  # variante en une ligne : GIT_DIR=proj.git git init
38 Si besoin démarrez le démon (service) :
40  $ git daemon --detach  # peut être tourne-t-il déjà
42 Pour les services d'hébergement en ligne, suivez les instructions fournies pour mettre en place le dépôt Git initialement vide. En général il s'agit de remplir un formulaire sur une page web.
44 'Poussez' votre projet au serveur central en utilisant :
46  $ git push git://serveur.central/chemin/du/proj.git HEAD
48 Pour obtenir les sources, un développeur saisit :
50  $ git clone git://serveur.central/chemin/du/proj.git
52 Après avoir fait des modifications, le développeur enregistre ses modifications en local :
54  $ git commit -a
56 Met à jour à la dernière version :
58  $ git pull
60 Tout conflit lors de la fusion doit être résolu puis validé :
62  $ git commit -a
64 Pour envoyer vos modifications locales au dépôt central :
66  $ git push
68 Si le serveur principal a des nouvelles modifications dûes à d'autres développeurs, l'envoi échoue et le développeur doit se mettre à jour de la dernière version, résoudre les éventuels conflits de fusion, puis essayer à nouveau.
70 === Dépots nus ===
72 Un dépôt nu (*bare repository*) est nommé ainsi car il n'a pas de dossier de travail : il ne contient que des fichiers qui sont normalement cachés dans le sous dossier `.git`. En d'autres mots, il conserve l'historique d'un projet, et ne contient jamais le rendu d'une version donnée.
74 Un dépot nu joue un rôle similaire à celui du serveur principal dans un système de gestion de version centralisé : le receptacle de vos projets. Les développeurs clônent vos projets à partir de celui-ci et y poussent les dernières modifications officielles. En général il est placé sur un serveur qui ne fait quasiment que ce travail de distribution de l'information. Le développement s'opère sur les clônes de sorte que le dépôt principal peut se passer d'un dossier de travail.
76 Beaucoup des commandes de Git échouent sur un dépôt nu tant que la variable d'environnement `GIT_DIR` n'est pas renseignée avec le chemin vers le dépôt ou que l'option `--bare` n'est pas utilisée.
78 === envoi contre rapatriement ( push contre pull ) ===
80 Pourquoi a-t-on introduit la commande `push` ( envoi ) au lieu de se contenter de la commande `pull` ( rapatriement ) plus familière ? Premièrement, la commande `pull` échoue sur un dépôt nu : il faut y utiliser la commande `fetch` dont nous parlerons plus tard. Mais même si nous conservions un dépôt standard sur le serveur central, y rapatrier les modifications serait peu pratique. Nous devrions d'abord nous connecter au serveur et donner en argument à la commande `pull` l'adresse de la machine de laquelle nous avons à rapatrier des modifications. Des pare-feu peuvent éventuellement nous embêter, et que faire si nous n'avons déjà pas d'accès `shell` au serveur ?
82 Quoiqu'il en soit, ce cas mis à part, nous décourageons l'envoi ( en comparaison du rapatriement ) parce que cela peut entrainer des confusions lorsque la destination possède un dossier de travail.
84 En condensé, pendant la phase d'apprentissage de Git, utilisez l'envoi ( push ) uniquement si la destination est un dépôt nu ; sinon rapatriez ( pull ).
86 === Forker un projet ===
88 Vous en avez marre de la manière dont est géré un projet ? Vous pensez pouvoir faire mieux ? Dans ce cas, sur votre serveur :
90  $ git clone git://serveur.principal/chemin/vers/les/fichiers
92 Ensuite, informez tout le monde de votre fork du projet sur votre serveur.
94 Par la suite, vous pouvez fusionner les modifications du projet originel avec :
96  $ git pull
98 === Ultime système de sauvegarde ===
100 Vous voulez des archives redondantes et géographiquement distribuées, permettant de faire face à un désastre XXX ? Si votre projet a beaucoup de développeurs, vous n'avez rien à faire ! Chaque clone de votre code est de fait une sauvegarde. Non seulement de l'état actuel, mais de l'historique complet. Grâce aux empreintes cryptographiques, si le clône de quelqu'un est corrompu, il sera repéré dès qu'il tentera de communiquer avec d'autres.
102 Si votre projet n'est pas si populaire, trouvez autant de serveurs que possible afin d'héberger vos clônes.
104 Le vrai paranoïac devrait toujours noter la dernière empreinte SHA1 de 20 octets du HEAD dans un endroit sûr. Ce doit être sûr, pas privé. Par exemple, le publier dans un quotidien marcherait bien, parce qu'il est difficile d'attaquer l'ensemble des copies d'un journal.
106 === Le multi-tâche à la vitesse de la lumière ===
108 Imaginons que vous travailliez sur plusieurs fonctionnalités en parallèle. Dans ce cas validez ( commit ) votre projet et lancez :
110  $ git clone . /un/nouveau/dossier
112 Git exploite les http://fr.wikipedia.org/wiki/Lien_mat%C3%A9riel[liens matériels] et le partage des fichiers de la manière la plus sûre possible pour créer ce clone, il est donc très rapidement disponible, et vous pouvez maintenant travailler simultanément sur deux fonctionnalités indépendantes. Par exemple vous pouvez modifier l'un des clones pendant que l'autre est en train de compiler.
114 À n'importe quel moment vous pouvez valider ( `commit` ) et rapatrier ( `pull` ) les modifications de l'autre clone.
116  $ git pull /mon/autre/clone HEAD
118 === Guerilla du contrôle de version ===
120 Alors que vous travaillez sur un projet qui utilise un autre système de gestion de versions, Git vous manque ? Dans ce cas, initialisez un dépôt Git dans votre dossier de travail.
122  $ git init
123  $ git add .
124  $ git commit -m "Commit initial"
126 puis clonez-le :
128  $ git clone . /un/nouveau/dossier
130 Allez ensuite dans le nouveau dossier et travaillez plutôt là, utilisant Git comme vous le voulez. De temps en temps, quand vous voulez vous synchroniser avec les autres, rendez-vous dans le dossier de départ, synchronisez en utilisant l'autre système de gestion de version, puis en saisissant :
132  $ git add .
133  $ git commit -m "Synchro avec les autres"
135 Puis allez dans le nouveau dossier et lancez :
137  $ git commit -a -m "Description de mes modifications"
138  $ git pull
140 La procédure pour partager vos modifications aux autres dépend de l'autre système de gestion de versions. Le nouveau dossier contient les fichiers avec vos modifications. Lancez toute commande de l'autre système de gestion de versions nécessaire pour les envoyer au dépôt central.
142 Subversion, qui est peut être le meilleur système de gestion de version centralisé est utilisé par d'innombrables projets. La commande *git svn* automatise la procédure ci-dessus pour les dépôts Subversion, et peut aussi être utilisée pour exporter un projet Git vers un dépôt Subversion.
144 === Mercurial ===
146 Mercurial est un système de gestion de version similaire qui peut travailler quasiment sans heurt avec Git. Avec le plugin `hg-git` un utilisateur de Mercurial peut, sans rien perdre, envoyer ( push ) et rapatrier ( pull ) avec un dossier Git.
148 Téléchargez le plugin `hg-git` avec Git :
150  $ git clone git://github.com/schacon/hg-git.git
152 ou Mercurial:
154  $ hg clone http://bitbucket.org/durin42/hg-git/
156 Malheureusement, il ne semble pas y avoir un plugin analogue pour Git. Pour cette raison, il semble préférable d'utiliser Git plutôt que Mercurial pour le dépôt principal. Avec un projet Mercurial, il faut généralement un volontaire qui maintienne un dépôt Git en parallèle alors que, grâce au plugin `hg-git`, un projet Git fait l'affaire même pour les utilisateurs de Mercurial.
158 Bien que ce plugin puisse convertir un dépôt Mercurial en un dépôt Git en le poussant dans un dépôt vide, cette tâche est plus simple avec le script `hg-fast-export-git`, disponible via :
160  $ git clone git://repo.or.cz/fast-export.git
162 Pour faire une conversion, dans un nouveau dossier :
164  $ git init
165  $ hg-fast-export.sh -r /depot/hg
167 ceci après avoir ajouté le script à votre `$PATH`.
169 === Bazaar ===
171 Nous allons rapidement évoquer Bazaar parce que c'est le système de gestion de versions distribué libre le plus populaire après Git et Mercurial.
173 Bazaar à l'avantage d'avoir plus de recul, étant donné qu'il est relativement jeune ; ses concepteurs ont pu tirer les leçons du passé et éviter des petits écueils historiques. De plus ses développeurs ont le souci de la portabilité et de l'interopérabilité avec les autres systèmes de gestion de versions.
175 Un plugin `bzr-git` permet aux utilisateurs de Bazaar de travailler avec les dépôts Git dans une certaine mesure, et permet de le faire de manière incrémentale, tandis que `bzr-fast-export` est fait pous les conversions uniques.
177 === Pourquoi j'utilise Git ===
179 Au départ j'ai choisi Git parce que j'ai entendu qu'il gérait l'inimaginablement ingérable source du noyaux Linux. Je n'ai jamais ressenti le besoin d'en changer. Git m'a rendu de fiers services et je ne me suis pour le moment pas heurté à ses limites. Comme j'utilise surtout Linux, les éventuels problèmes sur d'autres plateformes n'entrent pas en ligne de compte.
181 De plus je préfère les programmes C et les scripts bash aux exécutables comme les scripts Pythons : il y a moins de dépendances et je suis accro aux temps d'execution rapides.
183 J'ai réfléchi à la manière d'améliorer Git, allant suffisament loin pour écrire mes propres outils de type Git, mais uniquement à des fins de recherche. Même si j'avais terminé ce projet j'aurais tout de même continué avec Git vu que les avantages sont trop peu significatifs pour justifier l'utilisation d'un système farfelu.
185 Bien sur, vos besoins et envies diffèrent sûrement, et vous pouvez très bien vous trouver mieux avec un autre système. Quoiqu'il en soit vous ne pouvez pas faire une grosse erreur en choisissant Git.