Git un logiciel de gestion de versions décentralisé. Cela signifie que chaque utilisateur dispose sur sa machine d’un dépôt avec l’intégralité du projet (les commits son fait sur notre propre poste). Cette gestion décentralisée n’empêche pas l’utilisation d’un serveur contenant un “dépôt de référence”.
Pour utiliser Git, il suffit de l’installer via la commande : apt install git
.
Ensuite, il faut se rendre dans le dossier du projet et l’initialiser :
cd my_project
git --bare init
L’option –bare est facultative. Elle permet d’initialiser le dépôt Git sans le répertoire de travail.
La création côté serveur est ainsi terminée.
Note : Dans la nomenclature Git, origin représente la machine contenant le dépôt “principal” qui aura servit à récupérer le projet la première fois (ici, notre serveur). Initialisation du dépôt sur sa machine de travail
Ensuite, il faut récupérer le projet sur notre machine de travail , après avoir également installé Git. Pour cela, nous allons créer un dossier pour le projet et récupérer le projet :
mkdir my_project
cd my_project
git clone ssh://user@server:/directory/to/my_project .
Cette suite de commande peut sembler inutile. En effet, elle récupère un projet vide (nous aurions pu faire un simple git init
). L’intérêt est que Git connait maintenant notre serveur qu’il considère donc comme la machine origin.
Ce dossier Git, contrairement à celui sur le serveur, va contenir les fichiers de notre projet. Nous pouvons donc en ajouter dans le dossier grâce à notre éditeur de texte, par exemple.
Un fois notre fichier créé, il faudra l’ajouter à l’index de Git avant de pouvoir soumettre notre premier commit :
git add mon_fichier.sh
git commit -m 'Mon premier commit'
La commande git status
nous permet de voir quels sont les fichiers qui ont été modifiés et donc si un commit est nécessaire. Avant de faire un commit, il faut systématiquement ajouter le fichier concerné à l’index. Cependant, par la suite, plutôt que d’utiliser la commande git add mon_fichier
, on peut directement exécuter git commit -am 'Mon message de commit'
.
Attention : Cette commande est utilisable uniquement parce qu’un premier git add avait déjà été effectué.
La commande git log
nous permet de voir l’historique des commits sur un projet ainsi que les auteurs de chaque commit.
Lorsqu’on souhaite publier ses modifications sur le serveur, on doit utiliser la commande git push origin master
.
Origin représente le serveur comme expliqué plus tôt, master représente la branche par défaut.
La commande git branch
, nous permet de visualiser sur quelle branche nous nous trouvons.
Il est également possible de créer de nouvelles branches (par exemple, pour le développement de nouvelles fonctionnalités) via git branch ma_branche
.
Pour changer de branche et se rendre sur celle qui vient d’être créée, il faut lancer la commande git checkout ma_branche
.
Ces deux commandes peuvent être fusionnées en git checkout -b ma_branch
.
Lorsque le développement de la fonction liée à la branche est achevée, il est possible de fusionner les nouvelles modifications avec la branche principale. Pour cela, on se déplace sur la branche master et on effectue un merge :
git checkout master
git merge ma_branche
Important : Lorsqu’on travaille à plusieurs sur un projet, nous ne sommes pas les seuls à pouvoir modifier le span. Afin de s’assurer de disposer des dernières modifications effectuées par nos collègues, il faut régulièrement utiliser la commande git pull
qui télécharge les mises à jour (depuis le serveur : origin) pour notre dépôt local.
Lors de la fusion de deux branches avec git merge
, il est possible de rencontrer des conflits. Ils surviennent lorsque des lignes ont été modifiées dans les deux branches. Lors du merge Git ne sait pas quelle modification il doit conserver.
Pour résoudre le conflit, il faut éditer le fichier incriminé et choisir la version que l’on souhaite conserver. Git nous précise la zone qui pose problème avec des balises. Cette zone débute par HEAD qui représente la dernière version des fichiers de notre branche actuelle (master dans notre cas précédent). Elle se termine par le nom de la branche que nous souhaitons fusionner avec HEAD. Lorsque que nous avons fini d’éditer notre fichier, il suffit de faire un commit pour valider le merge via git commit -am 'Mon message de merge et résolution de conflit'
.
Pour connaitre l’utilisateur responsable d’une mise à jour, il faut utiliser la commande git blame
. Contrairement aux logs de Git, qui nous informent sur l’auteur d’un commit complet, ici, on a la possibilité de voir, pour la dernière version d’un fichier donné, qui est l’auteur de chacune des lignes. En effet, l’auteur du dernier commit n’a pas obligatoirement modifié la ligne qui ne fonctionne pas.
Pour paramétrer notre profil Git afin que notre nom soit associé à nos différents commits, il faut utiliser les deux commandes suivantes :
git config --global user.name "djeeks"
git config --global user.email djeeks@djeeks.com
Avant d’effectuer un commit il faut ajouter les fichiers à l’index Git. Pour éviter d’ajouter tous les fichiers individuellement, ont utiliser la commande git add *
.
Si on souhaite que certains fichiers ne soient pas pris en compte par la commande git add *
, il faut générer un fichier .gitignore (fichier caché) et lister dedans les noms des fichiers à ignorer. Ce fichier doit être ajouté à l’index et subir un commit.
Si le dépôt sur notre machine de travail n’a pas été créé en faisant un git clone à partir du serveur, il est tout de même possible de publier nos fichiers sur le dépôt du serveur via la commande git remote add origin git.mon_serveur.com/repository.git
qui définit le serveur distant. Ensuite, tout fonctionne comme d’habitude avec git push origin master
.
Pour supprimer une branche, on utilise la commande git branch -d ma_branche
.
Git nous permet également de mettre de côté des modifications sans effectuer de commit via git stash
. Notre fichier se retrouve alors dans le même état qu’il avait lors du dernier commit. Pour récupérer nos modifications par la suite, il faut lancer la commande git stash pop
.
Comme avec SVN, il est possible de créer des tags avec la commande git tag 0.0.1 56ebc523df
où 56ebc523df représente le SHA d’un commit. Pour connaitre le SHA associé à un commit, il faut utiliser git log
.
Il est possible d’antidater un commit grâce à la commande GIT_AUTHOR_DATE="2015-08-16 16:30 +100" git commit -m "Mon message de commit"
Pour modifier le message du dernier commit, il faut utiliser la commande git commit --amend -m "Mon nouveau message de commit"
. Si le commit a déjà été envoyé sur un serveur distant, il faut être vigilent car il peut y avoir des conflits de version (surtout si on travaille à plusieurs). Pour forcer la mise à jour du serveur distant, il faut utiliser git push origin master -f
.
On peut modifier le nom d’un fichier avec la commande git mv ancien_nom nouveau_nom
, ensuite, il suffit de faire un commit puis un push.
On peut annuler un commit avec la commande git reset --hard HEAD~1
. Si ce commit a déjà été pushé, il faut également lancer la commande git push -f
(Attention, si la modification a été push, il se peut que d’autres personnes l’utilisent).