Utilisation la plus basique de git, sans avoir recours à d'autres branches que le main (parfois appelé le master).
Installation de git
Sous Ubuntu :
sudo apt install git
Pour les autres systèmes d'exploitation, suivre les instructions sur la page officielle de git (en français).
Il est désormais possible d'utiliser git via la ligne de commande. Il est également possible d'utiliser git via des interfaces graphiques ou des éditeurs de code directement (PyCharm, Rstudio, Jupyter etc). Ici, seule l'utilisation via la ligne de commande sera décrite. Il est toutefois intéressant pour tous de lire la suite, pour comprendre comment utiliser git et quelles sont les commandes usuelles.
Configuration de compte
Depuis un terminal :
git config --global user.name Prénom Nom
git config --global user.email prenom.nom@whatever.com
git config --global pull.rebase false
Cloner un projet existant
Le lien pour cloner un projet est disponible sur la page principale du projet sur GitHub/GitLab, sous le bouton Clone. On y trouve les liens pour cloner directement via un éditeur de code, ou pour cloner via ssh ou https. Pour pouvoir communiquer avec le repo central aisément en ligne de commande, il est conseillé de cloner via ssh.
Depuis un terminal :
$ git clone git://main.server/path/to/file
Exemple avec le repo de la cellule GEE :
(base) elodie@elodie-fernandez:~/MesProjets $ git clone git@forge.ird.fr:hsm/atelier_amiis/cellule_gee.git
Clonage dans 'cellule_gee'...
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 7 (delta 1), reused 0 (delta 0), pack-reused 3
Réception d'objets: 100% (7/7), fait.
Résolution des deltas: 100% (1/1), fait.
Nous avons maintenant un répertoire versionné en local, qui contient tous les codes du repo central.
Exemple avec le repo de la cellule GEE :
(base) elodie@elodie-fernandez:~/MesProjets/cellule_gee (main)$ ls -l *
-rw-rw-r-- 1 elodie elodie 3334 mars 2 14:45 README.md
codes_utilisateurs:
total 16
-rw-rw-r-- 1 elodie elodie 2465 mars 2 14:44 download_from_google_drive.ipynb
-rw-rw-r-- 1 elodie elodie 8833 mars 2 14:47 download_PML.ipynb
A la racine du répertoire, se trouve un répertoire .git
qui contient tous les fichiers nécessaires au bon fonctionnement de git. Nous n'aurons jamais besoin de nous en servir directement.
Exemple avec le repo de la cellule GEE :
(base) elodie@elodie-fernandez:~/MesProjets/cellule_gee (main)$ ls -lrt .git/
total 44
drwxrwxr-x 2 elodie elodie 4096 mars 2 10:27 info
drwxrwxr-x 2 elodie elodie 4096 mars 2 10:27 hooks
-rw-rw-r-- 1 elodie elodie 73 mars 2 10:27 description
drwxrwxr-x 2 elodie elodie 4096 mars 2 10:27 branches
drwxrwxr-x 4 elodie elodie 4096 mars 2 10:27 objects
drwxrwxr-x 5 elodie elodie 4096 mars 2 10:27 refs
-rw-rw-r-- 1 elodie elodie 112 mars 2 10:27 packed-refs
drwxrwxr-x 3 elodie elodie 4096 mars 2 10:27 logs
-rw-rw-r-- 1 elodie elodie 21 mars 2 10:27 HEAD
-rw-rw-r-- 1 elodie elodie 137 mars 2 10:27 index
-rw-rw-r-- 1 elodie elodie 271 mars 2 10:27 config
Il n'y a plus qu'à travailler dans le répertoire cloné comme d'habitude, en ouvrant / modifiant / exécutant les codes sous son éditeur habituel (PyCharm, Jupyter Notebook, R-studio, ...).
Commandes classiques
- Actions sur l'index / la "staging area" / le "stash"
- add : ajouter à l'index un fichier, ou les modifications d'un fichier déjà existant
- diff : lister, pour un fichier suivi, la différence entre la version non-indexée et celle indexée (utile pour vérifier des changements avant de les indexer
- delete : supprimer un fichier de l'index
- Actions sur le repo local
- status : lister l'état de tous les fichiers présents dans le répertoire vis-à-vis de l'index et du repo local
- commit : ajouter ("commiter") les modifications indexées à son repo local
- log : lister les logs des derniers commit sur le repo local du plus récent au plus ancien
- Communication avec le repo central
- push : envoyer ("pusher") les modifications de son repo local sur le repo central
- pull : récupérer ("puller") les modifications du repo central vers son repo local
Exemple de workflow simple
Nous allons continuer avec l'exemple avec le repo de la cellule GEE. Nous souhaitons modifier le README, et y ajouter l'adresse complète pour cloner un repo GIT. La modification est faite. Nous allons maintenant propager cette modification jusqu'au repo central.
- Vérification de l'état de mon dépôt local : git status
(base) elodie@elodie-fernandez:~/MesProjets/cellule_gee (main)$ git status
Sur la branche main
Votre branche est à jour avec 'origin/main'.
Modifications qui ne seront pas validées :
(utilisez "git add <fichier>..." pour mettre à jour ce qui sera validé)
(utilisez "git restore <fichier>..." pour annuler les modifications dans le répertoire de travail)
modifié : README.md
aucune modification n'a été ajoutée à la validation (utilisez "git add" ou "git commit -a")
Nous voyons que le README a été modifié mais non validé, ie la modification n'est pas indexée. La commande status est très verbeuse et propose souvent quelles commandes git utiliser pour poursuivre le workflow. Ici, il est proposé de "adder" ou "commiter".
- Contrôle de la modification : git diff
(base) elodie@elodie-fernandez:~/MesProjets/cellule_gee (main)$ git diff README.md
diff --git a/README.md b/README.md
index 0c7bbdd..f98cb3c 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@ Il est possible de télécharger l'intégralité du dépôt, ie le cloner, ou de
Cloner le dépôt localement depuis un terminal:
-git clone
+git clone git@forge.ird.fr:hsm/atelier_amiis/cellule_gee.git
Télécharger un code directement via l'interface graphique.
Nous voyons que la ligne 24 du README a changé comme nous le souhaitions.
- Ajout des modifications à l'index : git add
(base) elodie@elodie-fernandez:~/MesProjets/cellule_gee (main)$ git add README.md
- Ajout des modifications au repo local : git commit
(base) elodie@elodie-fernandez:~/MesProjets/cellule_gee (main)$ git commit -m "Update README" README.md
[main ad55f12] Update README
1 file changed, 1 insertion(+), 1 deletion(-)
En pratique, dans un workflow simple, un add ou un delete est immédiatement suivi du commit. L'espace d'indexage / de staging n'est pas utilisé.
- Envoi des modifications au repo central : git push
(base) elodie@elodie-fernandez:~/MesProjets/cellule_gee (main)$ git push
Énumération des objets: 4, fait.
Décompte des objets: 100% (4/4), fait.
Compression par delta en utilisant jusqu'à 20 fils d'exécution
Compression des objets: 100% (3/3), fait.
Écriture des objets: 100% (3/3), 3.09 Kio | 3.09 Mio/s, fait.
Total 3 (delta 0), réutilisés 0 (delta 0), réutilisés du pack 0
To forge.ird.fr:hsm/atelier_amiis/cellule_gee.git
32f594d..83c0fc7 main -> main
Pour aller plus loin
La documentation en ligne de git est très complète, disponible en français et en anglais.
Elle explique en détail les différentes commandes, ainsi que pourquoi et comment les utiliser.