Git pour quoi faire ?Git for what?
- Git pour quoi faire ?Git for what?
Si tout ce qui vous intéresse c'est d'utiliser Git tout de suite. Lisez simplement les parties sur fond noir. Je vous conseille aussi de revenir relire tout ça un peu plus tard, pour mieux comprendre les fondements des systèmes de versions et ne pas faire de bêtises quand vous les utilisez. If you just want to use Git immediately, just read dark part. You read this part later to understand correctly foundations of version systems and not doing strange things.
Git est un DCVS, c'est-à-dire un système de versions concurrentes décentralisé. Analysons chaque partie de cette appellation compliqué. Git is a DCVS, which means a Decentralized Concurrent Versions System. Let's analyze each part of this long term:
Système de versionsVersions System
Tout d'abord, les systèmes de versions gèrent des fichiers. Quand on travaille avec des fichiers sans système de version voilà ce qui arrive souvent : Firstly, versions system manage files. When somebody work with files without a versions system, the following happens frequently:
Lorsqu'on modifie un fichier un peu critique et qu'on a pas envie de perdre, on se retrouve souvent à le recopier sous un autre nom. Par exemple When you modify a somehow critical file you don't want to loose. You copy naturally this file with another name. For example:
$ cp fichier_important.c fichier_important.c.bak
fichier_important.c.bak fichier_important.c.old fichier_important.c.Bakcup fichier_important.c.BAK.2009-11-14 fichier_important.c.2009.11.14 fichier_important.c.12112009 old.fichier_important.c
Bon alors si on veut que ça marche il faut se fixer des conventions de nommage. Les fichiers prennent beaucoup de place alors que souvent il n'y a que quelques lignes différentes entre le fichier et son backup... If you want to make it works correctly, you'll have to use naming convention. Files take many place even if you modify most of time only some lines.
Heureusement les systèmes de version viennent à la rescousse. Fortunately, versions system are here to help.
Il suffit de signaler que l'on va faire une nouvelle version d'un fichier et le système de version se débrouille pour l'enregistrer quelque part où on pourra facilement le retrouver. Et en général, le système de version fait les choses bien. C'est-à-dire qu'il n'utilise que très peu d'espace disque pour faire ces backups. You only have to signal you want a new version of a file and the versions system will do the job for you. It will record the backup where it could be easily recovered. Generally, systems version do it better than you, making the backup only of the modified lines and not the total file.
Il fut un temps où les versions étaient gérées fichier par fichier. Je pense à CVS. Puis on s'est vite aperçu qu'un projet c'est un ensemble de fichiers cohérents. Et donc il ne suffit pas de pouvoir revenir en arrière par fichier, mais plutôt dans le temps. Les numéros de versions sont donc passé d'un numéro par fichier à un numéro par projet tout entier. Once upon a time versions were managed for each file separately. I think about CVS. Then it naturally appears projects are a coherent set of files. Recover each file separately was a tedious work. This is why versions number passed from files to the entire project. Ainsi on peut dire, «je veux revenir trois jours en arrière», et tous les fichiers se remettent à jour. It is therefore possible to say, "I want to get back three days earlier".
Qu'apportent les systèmes de versions ? (je n'ai pas tout mentionné) What gives versions system? (I didn't mention everything at all)
- backup automatique de tous les fichiers: Revenir dans le temps. ;
- donne la possibilité de voir les différences entre chaque version et les différences entre la version en cours et les modifications locales ;
- permet de poser un tag sur certaines versions et ainsi pouvoir s'y référer facilement ;
- permet d'avoir un historique des modifications. Car en général il est demandé aux utilisateur d'ajouter un petit commentaire à chaque nouvelle version.
concurrentesconcurrent:
Les systèmes de versions sont déjà intéressants pour gérer ses projets personnels. Car ils permettent de mieux organiser celui-ci. De ne (presque) plus se poser de questions à propos des backups. Je dis presque parce qu'il faut quand même penser à protéger par backup son repository. Mais là où les systèmes de versions deviennent vraiment intéressant, c'est pour la gestion de projets à plusieurs. Version Systems are already useful to manage its own projects. They help to organize and resolve partially backup problems. I say partially because you have to backup your repository on a decent file system. But versions system are really interesting is on projects done by many people.
Commençons par un exemple avec un projet fait par deux personnes ; Alex et Béatrice. Sur un fichier contenant un liste de dieux Lovecraftiens : Let's begin by an example, a two person project ; Alex and Beatrice. On a file containing a Lovecraft's gods list:
Cthulhu Shubniggurath Yogsototh
Cthulhu
Shubniggurath
Soggoth
Yogsototh
puis il envoi ce fichier sur le serveur du projet. Ainsi sur le serveur, il y a le fichier d'Alex. after that he send the file on the project server. Then on the server there is the Alex file:
Ensuite c'est Béatrice qui n'a pas récupéré le fichier d'Alex sur le serveur qui fait une modification. A bit later, Beatrice who had not get the Alex file on the server make the modification:
Cthulhu
Dagon
Shubniggurath
Yogsototh
Puis Béatrice envoi son fichier sur le serveur. Beatrice send her file on the server
La modification d'Alex est perdue. Encore une fois les systèmes de versions sont là pour résoudre ce type de soucis. Alex modification is lost. One more time, versions system are here to help.
Un système de version aurait mergé les deux fichiers au moment où Béatrice voulait envoyer la modification sur le serveur. Et comme par magie, sur le serveur le fichier deviendra : A version system would had merge the two files at the time Beatrice send the file on the server. And like by magic, on the server the file would be:
Cthulhu Dagon Shubniggurath Soggoth Yogsototh
En pratique, au moment où Béatrice veut envoyer ses modifications, le système de version la préviens qu'une modification a eu lieu sur le serveur. Elle utilise la commande qui rapatrie les modifications localement et qui va mettre à jour le fichier. Ensuite Béatrice renvoie le nouveau fichier sur le serveur. In real life, at the moment Beatrice want to send her modifications, the versions system alert her a modification had occurred on the server. Then she uses a command which pull the modification from the server to her local computer. And this command update her file. After that, Beatrice send again the new file on the server.
Qu'apportent les Systèmes de Versions Concurrentes ?In what Concurrent Versions System help?
- récupérer sans problème les modifications des autres ;
- envoyer sans problème ses modifications aux autres ;
- permet de gérer les conflits. Je n'en ai pas parlé, mais quand un conflit arrive (ça peut arriver si deux personnes modifient la même ligne avec deux contenus différents), les SVC proposent leur aide pour les résoudre. J'en dirai un mot plus loin.
- permet de savoir qui a fait quoi et quand
décentralisédecentralized
Ce mot n'est devenu populaire que très récemment dans le milieu des systèmes de version. Et bien ça veut dire principalement deux choses. This word became popular only recently about CVS. And it mainly means two things:
Tout d'abord, jusqu'à très récemment (SVN) il fallait être connecté sur un serveur distant pour avoir des informations sur un projet. Comme avoir l'historique. Les nouveaux systèmes décentralisés permettent de travailler avec un REPOSITORY (le répertoire contenant tous les backups, et les différentes info nécessaires au fonctionnement du système de versions) local au projet. Ainsi on peut avoir l'historique du projet sans avoir à se connecter au serveur. First, until really recently (SVN), you'll have to be connected to the distant server to get informations about a project. Like get the history. New decentralized systems work with a local REPOSITORY (directory containing backups and many informations linked to the versions system functionalities). Hence, one can view the history of a project without the need of being connected.
Toutes les instances de projets peuvent vivre de façon indépendantes. All instances of a project can live independently.
Pour préciser, les systèmes de versions concurrentes décentralisés sont basés sur la notion de branche. To be more precise, DCVS are base on the branch notion.
Et la signification pratique est très importante. Ça veut dire que tout les utilisateurs travaillent de façon complètement indépendante les uns des autres. Et c'est l'outil de version qui se charge de mettre tout ça ensemble. Practically, it has great importance. It means, everybody work separately, and the system help to glue all their work.
Ça va même encore plus loin. Ça permet de développer plusieurs features de manière complètement indépendantes. Sous les autres systèmes c'était plus difficile. It is even more than just that. It help to code independently each feature and bug fixes. Under other system it was far more difficult.
L'exemple type : Typical example:
Je développe mon projet. Je suis en train de l'améliorer. Lorsqu'un bug urgent est reporté.I develop my project. I'm ameliorating something. An urgent bug is reported.
Je peux très facilement avec un système décentralisé, revenir sur la version qui pose problème. Résoudre le bug. Renvoyer les modifications. Puis revenir à ma version avec les améliorations en cours. Et même récupérer la correction de bug dans ma nouvelle version avec les améliorations.With a DCVS I can easily, get back to the version with the bug. Fix it. Send the fix. Get back to my feature work. And even, use the fix for the new version with my new feature.
Dans un système non décentralisé, cela est possible, mais fastidieux. Les systèmes décentralisés rendent ce type de comportement très naturels. Ainsi, il devient naturel de tirer des branches pour toutes les features, les bug...In a not decentralized version system, doing such a thing is possible but not natural. Decentralization means it become natural to use a branch for each separable work.
Avantages donnés par la décentralisation des systèmes de versions concurrentes : Advantages given by DCVS:
- Possibilité de travailler sans être connecté au serveur de version ;Ability to work offline,
- Possibilité de créer beaucoup de
patchesatomiques ;Ability to create many atomic patches, - Grande facilité de maintenance de plusieurs versions différentes de la même application.Help the maintenance of many different versions of the same application.
Pour résumerTo resume
Résumons l'ensemble des choses que l'on peut faire facilement avec un DCVS : Let's resume what we can easily do with DCVS:
Systèmes de versionsVersions Systems
- revenir dans le temps ;back in time,
- lister les différences entre chaque version ;list differences between versions,
- nommer certaines versions pour s'y référer facilement ;name some versions to refer to them easily
- afficher l'historique des modifications.show history of modifications
ConcurrentesConcurrent
- récupérer les modifications des autres ;get others modifications,
- envoyer ses modifications aux autres ;send its modifications to others,
- permet de savoir qui a fait quoi et quand ;know who done what and when,
- gestion des conflits.conflicts management.
DécentraliséDecentralized
- manipuler facilement des branchesEasily manipulate branches
Maintenant voyons comment obtenir toutes ces choses facilement avec Git. Now let's see how to obtain all these things easily with Git.