Rapide initiation à git

Introduction

Cette page est une rapide introduction à git, et son utilisation régulière via Bitbucket.

Cet article contient de très rapides explications sur la prise en main du très efficace et puissant logiciel git, son installation, ainsi que l’utilisation de Bitbucket.

Des liens sont donnés vers d’autres tutoriels et d’autres explications.

J’en profite aussi pour joindre et publier mes fichiers de configuration pour git, des conseils, des alias pour améliorer git (via le fichier ~/.bash_aliases pour l’interprète de ligne de commande GNU/Bash).

Note

Licence ?

Cette page, et tous les fichiers liés, sont distribués librement, sous les termes de la licence GPLv3 ! (comme tout ce que je publie ou distribue).


À-propos de Git

Le site officiel de git est git-scm.com.

Qu’est-ce que Git ?

« Git est un logiciel de gestion de versions décentralisé. C’est un logiciel libre créé par Linus Torvalds, auteur du noyau Linux, et distribué selon les termes de la licence publique générale GNU version 2. »

« Git est un conçu pour être performant en vitesse et assurer l’intégrité des données stockées, envoyées ou reçues. Entièrement libre et gratuit depuis 2005, il est rapidement devenu le système de gestion de versions le plus populaire pour le développement logiciel. »

À quoi ça sert ?

« Un logiciel de gestion de versions est un logiciel qui permet de stocker un ensemble de fichiers en conservant la chronologie de toutes les modifications qui ont été effectuées dessus. »

« git permet donc notamment de retrouver les différentes versions d’un lot de fichiers connexes. Il permet aussi un contrôle efficace et sécurisé de certains fichiers (ou même de projets entiers), ainsi qu’un excellent suivi des modifications effectuées sur chaque fichiers. »

Inutile de dire donc que je m’en sers constamment, principalement sous Linux ((X)Ubuntu™ 15.10), et de temps en temps sur Windows™.

Est-ce vraiment si populaire ?

Oui :

Une distinction importante

Documentation à propos de git

Un peu en vrac, mais quand même dans l’ordre du plus utile au plus flou :

Deux documents en PDF à télécharger pour ne pas paniquer quand on est paumé ou qu’on débute :

D’autres ressources (moins utiles, mais peuvent aider) :

Note

Et comment ça marche, en vrai, sous le capot des jolis sites web et de l’utilisation en lignes de commande ? C’est compliqué (théoriquement) ? Oui.

XKCD du vendredi 30 octobre, à propos de Git

Mon utilisation (amateur) de git

Ma configuration

État

Maintenu activement. (septembre 2015)

Pour ces deux fichiers de configurations, (sur Linux), un fichier .gitconfig et .gitignore global peut se trouver dans votre dossier HOME (~/, ou /home/pseudo), et un fichier particulier à chaque dépôt peut aussi être créé.

  • .gitconfig permet de configurer le comportement complet de git (inspiré par celui des cranseux).

  • .gitignore permet de dire quels fichiers doivent être ignorés (ie. non observés) par git lorsqu’il indique les fichiers non surveillés.

Voir aussi

À propos de .gitconfig

git-config est une commande git, qui interagit en fait avec le(s) fichier(s) .gitconfig. La page git-scm.com/docs/git-config détaille comment utiliser un fichier .gitconfig. Plus de détails sont donnés ici dans le livre sur git-scm.com (en français). Ces explications par Atlassian ou cet article par Nick Berardi peuvent aussi aider. D’autres exemples: GitHub.com/matagus/gitconfig, GitHub.com/alikins/gitconfig.

À propos de .gitignore

Ces explications sur help.GitHub.com détaillent comment utiliser un fichier .gitignore. Ils proposent même une collection de fichiers .gitignore adaptés à différentes types de projets. Par exemple, celui là pour un projet avec Python.

Cette page git-scm.com/docs/gitignore ou cet article sur kernel.org peuvent aussi aider.

« Punk Rock Git »

Cet article par Ian Miell explique très bien certaines commandes git et leurs concepts.

En ligne de commande

Voir mon bash_aliases (aussi sur Bitbucket.org/lbesson/bin). Je définis les alias Bash suivants, qui permettent de voir les fichiers modifiés, supprimés ou ajoutés uniquement :

  • alias GitChanged='clear ; git status | grep --color=always '\(modified\|modifié\)' | less -r' pour les fichiers modifiés,

  • alias GitDeleted='clear ; git status | grep --color=always '\(deleted\|supprimé\)' | less -r' pour les fichiers supprimés,

  • alias GitAdded='clear ; git status | grep --color=always '\(added\|nouveau\)' | less -r' pour les fichiers ajoutés,

  • Et alias GitSize='clear; git count-objects -v -H | grep "size-pack" | sed s/"size-pack: "/"La taille du dépôt est "/' permet d’afficher la taille que prend le dépôt courant (e.g. 10.43 MO actuellement pour ce projet web-sphinx).

$ git count-objects -v -H | grep "size-pack" | sed s/"size-pack: "/"La taille du dépôt est "/
La taille du dépôt est 17.33 Mio

Ceux là sont de bons raccourcis, qui par défaut lance la compression locale du dépôt juste après chaque opération (en moyenne ça fait gagner du temps) :

  • alias Push='clear; git push && git gc' pour téléverser les dernières modifications sur le dépôt mère,

  • alias Pull='clear; git pull && git gc' pour télécharger les dernières modifications depuis le dépôt mère,

  • alias Commit='clear; git commit -m' pour rapidement valider une modification (on dit alors réaliser un commit),

  • alias Add='git add' pour facilement ajouter des fichiers,

  • alias Aggressive='git gc --aggressive' lance une compression « agressive »,

  • alias s='clear ; git status | less -r' est un raccourcis bien pratique pour l’opération git la plus courante : git status.

Et enfin, j’ai défini un alias pratique qui permet de synchroniser le projet courant avec le dépôt mère, et son sous-dossier sur mon site.

  • alias Sync='clear; echo -e "Synchronizing (git push, gc, send_zamok)…"; git push; git gc --aggressive; make send_zamok; alert'

Par exemple ce dépôt se trouve ici sur ce site (publis/ansi-colors). Cet autre dépôt se trouve ici sur ce site (publis/Bomberman). Ce troisième dépôt se trouve ici sur ce site (python-demos).

Note

Détails à propos des alias Bash ?

Plus d’informations sont disponibles dans ce livre sur le programmation Bash, dans cette documentation Linux ou celle là, ou bien cette page Wikipédia qui parle d’alias pour les langages de scripts en général (en anglais).

Avertissement

Git ne stocke pas des diff compressés, mais des fichiers entiers, à chaque version (sous forme compressées, okay) !

Contrairement à ce que j’ai longtemps cru (jusqu’en 2020 !), il y a une différence entre ce que git affiche quand on fait un git diff fichier et ce que git stocke quand on ajoutera ce fichier dans un nouveau commit ! J’ai longtemps cru que git stockait le diff, mais en fait non ! C’est la plus grosse « légende urbaine » ou incompréhension sur git, et j’ai découvert mon erreur grâce à cet article de blogue sur GitHub.blog (et celui là aussi).

Avec Sublime Text 3

Note

Une interface graphique pour git ?

Utiliser une quelconque interface graphique à git peut faire gagner un temps fou. Pour coder, moi j’aime bien Sublime Text 3 (ST3). Peu importe votre éditeur de texte ou EDI, il devrait être possible de le munir de ce genre de fonctionnalités pour facilement utiliser git sans toujours passer par des commandes en console.

Par exemple, Atlassian propose SourceTree, pour Windows™ et Mac™ OS X. Et GitHub propose leur propre application pour Mac™ OS X ou Windows™.

Les greffons suivants permettent une utilisation fluide et facile de git avec Sublime Text 3 :

  • Le petit GitGutter permet de visualiser l’état de chaque ligne de chaque fichier par rapport au dépôt git dans lequel il se trouve (visuellement génial pour voir les changements depuis le dernier commit).

  • Le plus lourd SublimeGit (installable depuis sublime.wbond.net/packages/SublimeGit). Permet un intégration complète de git via le panneau de contrôle. Il est gratuit, mais vous embêtera régulièrement afin de vous demander d’acheter une (inutile) licence commercial (pour 10$)… Mais ce plugin est vraiment génial, donc vous supporterez son petit défaut !

  • GitSavvy semble être une bonne alternative gratuite et libre.

Voir aussi

sublimetext.fr.html

Veuillez lire la toute récente page sublimetext.fr.html pour plus de détails sur l’utilisation que je fais de Sublime Text 3.

Avec Bitbucket.org

Comme d’autres services d’hébergement, Bitbucket est gratuit, flexible, puissant, opérationnel 24h/24, 7j/7, et permet de publier son code facilement sur Internet.

Note

GitHub propose en gros les mêmes (super) fonctionnalités, gratuitement aussi.

Bitbucket propose en plus des dépôts privés, en nombre illimités. Chaque dépôt est limité à 2GB (il faut vraiment le vouloir pour dépasser!). S’inscrire est rapide, il suffit d’aller sur cette page https://Bitbucket.org/ ! (Notez que Bitbucket peut aussi s’utiliser avec un compte Google, Facebook, GitHub ou même avec OpenID.)

Un fois votre profil créé, il ressemblera au mien, mais en plus vide : Bitbucket.org/lbesson (voir celui là pour un autre exemple Bitbucket.org/jilljenn).

Les dépôts publics sont visibles par tous : Bitbucket.org/lbesson/profile/repositories.

Par exemple, voici plusieurs de mes dépôts :

Plus d’explications sont disponibles ici en.WikiPedia.org/wiki/Bitbucket (en anglais).

Publier des pages webs avec Bitbucket ?

Si votre nom d’utilisateur Bitbucket est TRUC, il est possible de créer un dépôt appelé « TRUC.bitbucket.org », et ensuite tous les documents que tu y seront stockés seront automatiquement disponibles sur le site http://TRUC.bitbucket.org !

Plus de détails sont donnés sur cette page de doc par Atlassian (en anglais), et l”exemple officiel (tutorials.bitbucket.org) est en ligne sur https://tutorials.bitbucket.org)

(Ce service est maleheureusement un peu moins poussé que celui de GitHub (GitHub.io, voir la doc ici), mais marche bien quand même.)

Note

lbesson.Bitbucket.org ?

Voir par exemple cette petite page lbesson.Bitbucket.org/README.html dont la source est hébergée ici Bitbucket.org/lbesson/lbesson.bitbucket.org/src/master/README.html.

Je me sers de lbesson.Bitbucket.org principalement pour :

Et même si le certificat n’est pas valide, il est parfaitement possible d’utiliser cette fonctionnalité avec le HTTPS activé : https://lbesson.Bitbucket.org/README.html (si votre navigateur râle et affiche une erreur c’est parfaitement normal !). Si vous utilisez un navigateur assez récent, il peut râler et vous expliquer pourquoi (vous verrez alors que la seule raison est que le certificat SSL de https://bitbucket.org n’a été signé que pour certains sous domains du site bitbucket.org, pas tous). Mais le trafic sera bien crypté et sécurisé par le certificat SSL, aucun problème :)

Interface en français ?

Depuis un peu plus d’un an, il est possible de changer l’interface du site en français (et plein d’autres langues), dans vos paramètres personnels.

Note

Traduction en français ?

En mars et avril 2013, j’ai initié et un peu dirigé la traduction du site et du service de l’anglais vers le français. J’ai traduit presque 90% du contenu initial, laissé quelques boulettes, mais on a fait du bon boulot. Grâce à quelques autres motivés et moi-même, le français était le première langue traduite à 100% ! (mi mars 2013) Je n’ai plus ni le temps ni l’envie de m’en occuper, mais le projet continue d’être tenu à jour par d’autres.

Des « boutons » ?

De même que des fans de GitHub proposent ghbtns.com/ ou buttons.GitHub.io/, un fan de Bitbucket a conçu bb-btns.bitbucket.org/.

Voici quelques exemples pour mon dépôt web-sphinx :

Les mêmes, mais hébergés sur lbesson.bitbucket.io/bbbtns/ (pour mon dépôt bin) :

Les mêmes, mais hébergés sur ce site (./bbbtns/) (pour le dépôt lbesson.Bitbucket.org) :


Un dernier conseil ?

Comme pour tout logiciel aussi puissant et technique, git demande un certain temps d’adaptation. Soyez persévérant, ça en vaut la peine.

« Je vous souhaite une bonne programmation, et bonne chance pour vos projets !

Crédit additionnel

Merci à Vincent Cohen-Addad de m’avoir motivé à m’initier à git, en octobre 2012 pour le projet de programmation réseau de mon Master d’Informatique Fondamentale (le MPRI, cours #1-21) sur lequel nous avions travaillé ensemble.