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 :
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 :
- Un très bon guide en anglais: http://gitimmersion.com/
- Les tutoriels vidéos de grafikart : https://www.grafikart.fr/formations/git
- Le pro git en français : https://git-scm.com/book/fr/v1/D%C3%A9marrage-rapide
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
Switcher entre différentes version du projet
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
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 :
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 :
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
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 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
Excellent tutoriel