Git : Apprendre à utiliser le gestionnaire de versions pour ses projets

Partager cet article

Temps estimé pour la lecture de cet article : 51 min

Git est ce qu’on appelle un gestionnaire de versions, il a été créé pour le développement du noyau linux par Linus Torvalds (en 2005). Ce qu’on appelle un gestionnaire de versions (ou VCS en anglais, pour Version Control System), c’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.

On trouve deux grands types de VCS, les gestionnaires de versions centralisées ou décentralisées, voyons en détail les deux :

  • Les VCS centralisés : ils sont caractérisés par un dépôt privilégié géré par un serveur. Chaque développeur travaille sur une copie et synchronise ses évolutions avec le dépôt central, le serveur détectant les conflits. Subversion (SVN) fonctionne sur ce principe.
  • Les VCS décentralisés : contrairement au VCS centralisé, il n’impose pas techniquement de dépôt de référence. Chaque développeur travaille avec son dépôt qu’il synchronise avec ceux des autres et selon le modèle de développement, avec un dépôt de référence. Git fonctionne de façon décentralisée. En d’autres termes, imaginez, vous avez un dépôt GIT en local, vous partez en week-end chez Mamie (désolé pour l’exemple :3) mais malheureusement, cette dernière rechigne toujours à se mettre à internet. Avec git vous allez pouvoir commiter vos changements et les push sur votre dépôt local, pouvant commencer alors une nouvelle fonctionnalité sans tout casser. Au retour du week-end, vous allez pouvoir merge le tout sur le dépôt distant.

Comme une image vaut mieux que mille mots :

VCS centralisé vs VCS décentralisé. Image provient de cet excellent article.

VCS centralisé vs VCS décentralisé. Image provient de cet excellent article.

Installation de Git et première configuration

Afin d’installer Git sous linux, il suffit de faire :

sudo apt-get install git

Une fois installé, afin d’utiliser git il vous faut d’abord renseigner deux paramètres clés, à savoir le nom et d’utilisateur et l’adresse mail que va devoir utiliser git. Vous avez alors deux solutions pour renseigner ces informations, en utilisant ces deux lignes de commandes :

git config --global user.name "Your Name"
git config --global user.email "your_email@whatever.com"

Ou alors, vous pouvez éditer le fichier caché .gitconfig qui se trouve à la racine de votre home. Il vous suffit alors d’y rajouter ceci :

 [user] 
    email = your_email@whatever.com
    name = your name

Et voilà, vous êtes prêts à utiliser git.

Utiliser gits pour ses projets

Je ne vous ferai pas un cours complet sur git mais seulement un exemple concret d’utilisation du gestionnaire pour ses projets ici dans mon cas en local. Si vous cherchez des cours complets, il en existe déjà de très bons, en voici trois :

Maintenant voyons voir, comment créer notre propre dépôt en local, afin de profiter des avantages de git, ainsi si par exemple vous avez la malencontreuse tendance à supprimer un fichier sans faire exprès (à qui ce n’est jamais arriver :3 ?) et bien là pas de soucis, vous allez pouvoir facilement retrouver le fichier voulu.

Pour ce faire, on commence par choisir un emplacement pour nos dépôts personnellement, j’ai un dossier gits, dans lequel je mets chaque dépôt dans ce dossier, il suffit alors de crée votre projet avec le nom que vous désirez, de se placer dedans et d’utiliser la commande git init –bare, ce qui nous donne :

mkdir myproject.git
cd myproject.git
git init --bare

À partir de là, le plus gros est fait. Vous avez donc un repository qui est prêt, vous pouvez alors vous rendre dans le dossier où vous souhaitez travailler cloner votre dépôt et travailler.

git clone ~/Documents/git/myproject.git MyProject

Ensuite, une fois vos fichiers ajoutés ou vos modifications effectuées, il vous suffit de commit comme vous le feriez d’habitude, donc par exemple la première fois :

git add . # On ajoute tout les fichiers du dossier, avec un .gitignore c'est mieux :3
git commit -m "First commit"
git push origin master

L’avantage d’avoir un projet versionné, c’est que vous allez pouvoir switcher entre les différentes versions de votre projet. Admettons-vous êtes en train de développer une nouvelle fonctionnalité mais que du coup actuellement rien ne fonctionne mais que vous voulez quand même montrer vos derniers avancements à un ami. Il vous suffira alors de choisir un moment où l’application fonctionnait checkout cette version et l’exécuter.

Pour ce faire, vous commencez par faire un git log, pour récupérer le numéro de commit de la version qui vous intéresse. Puis vous n’avez plus qu’à faire un :

git checkout ae9fbwbc85965fb

Ensuite, pour revenir sur la dernière version, un petit git checkout HEAD suffira, simple non ;).

Quelques commandes utiles à connaître

Compter le nombre de commits par utilisateur

Nombre de commits par utilisateur sur le projet mdpress

Nombre de commits par utilisateur sur le projet mdpress

git shortlog -sne

Compter le nombre de lignes par utilisateur

git ls-tree -r HEAD|cut -f 2|grep -E '\.(java|xml)$' | xargs -n1 git blame --line-porcelain|grep "author "|sort|uniq -c|sort -nr

Vous avez juste à adapter cette partie-ci (java|xml) afin de la faire correspondre aux types de fichier que vous cherchez.

Récupérer un fichier dans sa dernière version commitée

git checkout myfile

Exporter son projet dans une archive zip

git archive --format=zip --prefix=myproject/ -9 HEAD > myproject.zip

L’option -9 correspond au niveau de compression de l’archive, la valeur de cette option est comprise entre 0 et 9.

Configurer git pour être plus efficace

Avec de l’autocomplétion c’est mieux

Si comme moi, vous utilisez bash, git permet d’activer de l’autocomplétion. Il vous suffit de télécharger ce fichier, de le mettre à la racine et d’ajouter à votre bashrc, cette ligne : source ~/git-completion.bash. Pour les feignasses voici, les lignes de code à copier coller pour faire ça sans s’embêter :D.

wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
echo "source ~/git-completion.bash" >> .bashrc

Attention, l’autocomplétion fonctionnera uniquement pour le profil courant pour activer cela pour tous les utilisateurs il faut copier le script dans /etc/bash_completion.d/. Ce répertoire est utilisé par bash pour automatiquement charger la complétion. Ensuite et bien c’est comme quand vous cherchez une commande dans votre terminal, un simple appuie sur tab et vous voilà avec les branches que vous cherchez par exemple :3.

Et un petit screen pour montrer le tout en action :

git-bash-completion

Eviter d’ajouter des fichiers inutiles le fichier .gitignore

Un projet générera souvent des fichiers qu’on aimerait éviter de faire surveiller par git. Par exemple sur un projet java, ça peut être les fichiers .class résultant de la compilation. Afin de ne pas avoir à trier entre chaque fichier lors de l’ajout de ces derniers, notamment grâce à la commande git add.

Git propose de remédier à cela en ignorant certains fichiers, pour ce faire on définit un fichier caché nommé .gitignore dans la racine de notre répertoire de travail.

Regardons ensemble un exemple de .gitignore pour android :

# On retire les applications compilées
*.apk
*.ap_

# Les fichiers de Dalvik
*.dex

# Les fichiers objects Java
*.class

# Les fichiers générés
bin/
gen/

# Les fichiers de gradle
.gradle/
build/

# Fichier de configuration local (sdk path, etc)
local.properties

# Le dossier proguard généré par Eclipse
proguard/

# Les fichiers logs
*.log

Vous pouvez également placer des fichiers .gitignore dans d’autre sous-répertoires, ses règles s’appliqueront alors seulement au répertoire et sous-répertoire de là où il se trouve. Le fichier .gitignore peut être ajouté au dépôt comme n’importe quel autre fichier. Lancez juste git add .gitignore and git commit, comme d’habitude.

Enfin, pour votre plus grand bonheur voici une liste de fichiers .gitignore que vous pouvez trouver sur github.

L’éditeur par défaut

Quand on va réaliser un commit, git va utiliser un éditeur de texte par défaut lors de l’entrée du message, bien souvent nano ou vim sont utilisés, si vous souhaitez changer l’éditeur par défaut, il suffit de faire :

git config --global core.editor vim

Des alias pour vos commandes

Le système d’alias permet de définir des raccourcis vers des commandes de Git. Cela permet ainsi de gagner du temps. Pour réaliser des alias il suffit d’éditer la section [alias] du fichier .gitconfig (situé dans le home de l’utilisateur) ou le fichier .git/config d’un de vos dépôts. Si vous modifiez directement le fichier .gitconfig tous vos dépôts bénéficieront de vos modifications, si vous modifiez uniquement le .git/config d’un projet, c’est bien sur uniquement lui qui aura accès aux alias.

Voici un exemple d’alias :

[alias]
    st = status
    ci = commit
    br = branch
    co = checkout
    df = diff

Un meilleur affichage de l’historique

La commande git hist permet d’avoir un aperçu des derniers commits effectués, toutefois l’affichage par défaut de cette commande n’est pas des plus agréables à lire. Afin de corriger cela, on peut ajouter cette alias à notre fichier .gitconfig :

[alias]
lg1 = log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
lg = !"git lg1"

Par la suite, il nous suffit d’appeler la commande git lg, pour obtenir ce résultat :

Log du dépôt de GIMP

Log du dépôt de GIMP

Source : stackoverflow

Une correction automatique des erreurs ?

Si comme moi vous avaient tendance à vouloir taper rapidement une commande mais vous finissez par faire une faute de frappe, la commande autocorrect peut vous aider. Bien souvent dans ce genre de situation vous avez dû avoir un message du type :

Did you mean this?
    pull

Et bien activant l’autocorrection git va directement remplacer votre commande par ‘git pull’. Il est possible de laisser un délai en donnant un entier positif comme valeur, ici, avec -1, la correction sera immédiate.

Pour l’activer, il suffit de lancer cette commande :

git config --global help.autocorrect 5

Ou alors d’ajouter dans votre .gitconfig :

[help]
    autocorrect = 5

Afficher la branche courante de votre dépôt courant directement dans votre prompt

git-prompt-branch

Il est possible lorsque vous êtes dans votre terminal d’afficher directement la branche courante du dépôt pour ce faire, il vous suffit de rajouter dans votre fichier .bashrc ces quelques lignes :

function parse_git_branch {
    git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[\1]/"
}
PS1="$PS1\$(parse_git_branch)"

Si vous voulez plus d’informations, sur comment modifier l’affichage de votre prompt, j’ai déjà réalisé un article sur le sujet. Cette astuce vient de cet article de l’excellent site informatix.

Gource : visualiser les différents avancements d’un projet

Gource du dépôt du kernel de Linux

Gource du dépôt du kernel de Linux

Gource est un logiciel qui va permettre de réaliser une animation de l’évolution de votre dépôt à travers le temps. Pour l’installer il suffit de passer par les dépôts de votre distribution

sudo apt-get install gource

Une fois installé, il vous faut vous placer à la racine du répertoire de votre dépôt puis lancez la commande :

gource

Attention ! Gource requiert OpenGL et une carte graphique correcte.

Pour enregistrer une vidéo à 60 FPS d’une taille de 1280×720 avec le codec x264 dans un conteneur mp4, il vous faut exécuter la commande suivante :

gource -1280x720 -o - | ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i - -vcodec libx264 -preset ultrafast -crf 1 -threads 0 -bf 0 gource.mp4

Il vous faudra avoir installé ffmpeg.

Source : https://doc.ubuntu-fr.org/gource

1 comment

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *