Logiciel de gestion de versions (Git)

J’ai lu le livre «The Complete Software Developer’s Career Guide_ How to Learn Programming Languages Quickly, Ace Your Programming Interview, and Land Your Software Developer Dream Job» de John SONMEZ1 J’ai aussi écouté la vidéo «5 Essential Skills Every Well-Rounded Programmer Should Know» de Corey SCHAFER.2 Les deux partagent l’opinion que tout programmeur doit savoir comment utiliser un logiciel de gestion de versions.

À quoi un logiciel de gestion de versions sert-il? 1) Suivre les changements dans le code. 2) Créer des branches dans notre code tout en gardant le maître code intact. 3) Regarder en arrière dans le temps et regarder tous les changements qui ont été faits dans le code. Si jamais notre code déraille, on peut retourner à l’étape où le code marchait correctement. 4) Permettre aux plusieurs programmeurs de collaborer sur le même projet. (Source: la vidéo de SCHAFER citée ci-haut.)

En somme, un logiciel de gestion de versions nous donne la liberté de travailler sur les améliorations et faire des erreurs sans le souci de dérailler notre projet. (Source: «Python Crash Course: A Hands-On, Project-Based Introduction to Programming» d’Eric MATTHES). 3

Je suis entièrement d’accord avec Sonmez, Schafer et Matthes. Je suis d’avis que le plus tôt qu’un programmeur apprend à utiliser un logiciel de gestion versions le mieux que c’est.

Voici une exercice que j’ai fait en été 2018. Le but d’exercice était d’écrire un script dans bash pour jouer le jeu de 20 questions

#!/bin/bash
#Jeu de 20 questions

valider(){
#Faut trouver ce que "$1" represente
if [ "$1" -ge 1 -a  "$1" -le 20 ]
then
	echo "Nombre est valid"
	return 0
else
	cat<<- EOM
	Le nombre est invalide. Le nombre entier doit être entre 1 et 20.
	EOM
	return 1
fi

}
jouer(){
	if (( estimation < reponse )); then
		echo "Plus haut. . . "
	elif (( estimation > reponse )); then
		echo "Plus bas. . . "
	fi
}

estimation=-1
declare -i num=0

echo "Deviner un nombre entier entre 1 et 20"
#valider
#echo "your numéro est" $nombre

###Generate random number
(( reponse = RANDOM % 20 + 1 ))

###Jouer le jeu
while (( estimation != reponse )); do
	num=num+1
	read -p "Entrer $num l'estimation: " estimation 
	#valider "$estimation"
	valider 
	echo "La fonction 'valider' a une valeur de $?"
	if valider; then
		echo "Conditions verified"
	else
		echo "Conditins NOT verified"
		echo "Deviner un nombre entier entre 1 et 20"
	fi
	
done
echo -e "Correct! Cela a pris $num d'estimations.\n"


Le program ne marche pas et je n’ai jamais compris pourquoi? Je ne voulais pas passer beaucoup de temps pour le faire non plus. C’est pourquoi j’ai fini par abandonner. Le pire, c’est que j’avais une version du script qui marchais en partie au moins, mais je ne l’ai pas sauvegardée. À la place, j’ai continué de travailler sur le script en espérant d’avancer, et ça n’a pas marché. Excellent exemple de l’utilité de logiciel de gestion de versions, j’aurais été capable de revenir en arrière si j’en avais un.

Cela dit, j’ai adopté Git comme logiciel de version. Pourquoi? Parce que c’est le leader et c’est gratuit.

D’abord, j’ai eu de la difficulté à comprendre Git. Pourquoi? Parce qu’il ressemble à rien que je connais ou que j’ai appris jusqu’à maintenant dans ma vie. J’ai donc eu de la difficulté de faire des liens avec la nouvelle matière et ce que je savais déjà. En conséquence, l’apprentissage de Git s’avérait d’être une occasion par excellence d’appliquer les principes d’apprentissage présentés dans le livre «Mets-toi ça dans la tête! Les stratégies d’apprentissage à la lumière des sciences cognitives» de BROWN, Peter, C., Henry L. RODEIGER et Mark A. McDANIEL.4

Je vous explique comment j’ai procédé. Voici un sommaire de la stratégie: Lecture/écoute, reformulation, exercices de pratique. J’ai commencé avec le livre «Git: Learn Version Control with Git: A step-by-step Ultimate beginners Guide» de Dennis HUTTON, mais je l’ai trouvé assez compliqué et je n’étais pas sûr comment procéder concrètement.5 Puis, le livre de Mathes a un chapitre sur le Git. Ensuite, j’ai regardé la première vidéo sur le Git de Corey Schafer. Suivi par un retour au livre d’Hutton.

Compliqué comme façon de procéder n’est-ce pas? Cela correspond au principe de varier les conditions de pratique mentionné dans le livre «Mets-toi ça dans ta tête!». Je peux dire que cela a donné des résultats, car quand je suis retourné lire le livre d’Hutton, c’était plus facile de comprendre.

Le chapitre de Matthes est une bonne place pour commencer, car il se limite au Git pour l’usage personnel. Il n’y a donc pas de «push» ou de «pull» ni de travail d’équipe dans son chapitre. Cela simplifie la tâche pour commencer et cela répond à mes besoins pour le moment. Présentement, je ne travaille pas avec d’autres programmeurs sur un projet et je fais des «push» seulement quand je mets les versions finales de mes projets sur Github.

Pour aller plus loin dans ma connaissance, j’ai regardé le fonctionnement de Git dans son ensemble. Voici un schéma:

La zone de transit

«Ry’s Git tutorial» de William HODSON6 m’aidé à comprendre pourquoi Git a trois places pour travailler: Le répertoire de travail (working directory), la zone de transit et le répertoire Git. J’avais surtout de la difficulté de comprendre la nécessité de faire la distinction entre le répertoire de travail et la zone de transit (staging area).

Hodson l’a bien expliqué. Le répertoire de travail garde des fichiers qu’on ne veut pas envoyer dans un commit. Par exemple, tous les fichiers générés. Dans un commit, on veut seulement des fichiers de code source qu’on veut conserver. La zone de transit fait le tri. C’est-à-dire, on ne va ajouter les fichiers dans la zone de transit que ceux qu’on veut inclure dans le prochain commit. La zone de transit sert seulement de mettre les fichiers en ordre pour le prochain commit. Un mot pour décrire la fonction de la zone de transit: un cliché instantané.

Ensuite, on fait le commit pour les enregistrer dans le répertoire Git. Les fichiers dans le répertoire Git sont sécuritaires. Peu importe ce qui arrive dans le projet, les révisions confiées (committed) sont préservées. C’est le but principal d’un système de contrôle de versions.

Comme Hodson a écrit: La distinction entre le répertoire de travail (working directory), la zone de transit et le répertoire Git est au cœur du contrôle de versions Git. Presque tous les commandes Git manipulent un de ces composants. En conséquence, comprendre l’interaction entre eux établit une bonne base pour la maîtrise de Git.

Il y a des excellentes ressources pour apprendre le Git. J’en ai mentionné ci-haut. Mais je veux aussi mentionné le livre «Learn Version Control with Git: A step-by-step course for the complete beginner» de Tobias GÜNTHER.7 qui est un excellent livre pour les débutants. «Ry’s Git tutorial» de William HODSON reçoit beaucoup de bonnes critiques sur Amazon et le livre est gratuit. Compte tenu de la qualité des ressources disponibles pour apprendre Git, je n’embarquerai pas dans un tutoriel sûr comment à l’utiliser.

git stash

Je veux mentionner la commande «stash», car celle-ci est fort utile lorsqu’on a besoin de sauvegarder temporairement des changements et revenir là où on a été avant les changements. Une façon simplifiée à comprendre un stash, c’est comme un presse-papiers. Je n’en dirai pas plus, car les références mentionnées ci-hautes l’expliquent bien. En plus, ma maîtrise du stash reste incomplète.

Je termine avec un conseil de livre «Mets-toi ça dans ta tête» mentionné ci-haut. Lorsqu’on fait de la lecture, il nous faut reformuler, sortir les idées clefs et faire des liens entre la matière et ce que nous savons déjà, créer des scénarios dans lequel nous mettons en pratique les nouvelles connaissances. Voilà pourquoi le livre de HODSON m’impressionne. Il l’explique le fonctionnement de Git, mais donne le lectorat des exercices pour mettre en pratique ses nouvelles connaissances.

  1. «The Complete Software Developer’s Career Guide_ How to Learn Programming Languages Quickly, Ace Your Programming Interview, and Land Your Software Developer Dream Job» de John SONMEZ.
  2. «5 Essential Skills Every Well-Rounded Programmer Should Know» de Corey SCHAFER.
  3. «Python Crash Course: A Hands-On, Project-Based Introduction to Programming – Matthes/Python Crash Course: A Hands-On, Project-Based Introduction to Programming» d’Eric MATTHES.
  4. «Mets-toi ça dans la tête! Les stratégies d’apprentissage à la lumière des sciences cognitives» de BROWN, Peter, C., Henry L. RODEIGER et Mark A. McDANIEL.
  5. «Git: Learn Version Control with Git: A step-by-step Ultimate beginners Guide» de Dennis HUTTON
  6. «Ry’s Git tutorial» de William HODSON
  7. «Learn Version Control with Git: A step-by-step course for the complete beginner» de Tobias GÜNTHER

Laisser un commentaire

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