Durant ces exercices nous allons utiliser Git en ligne de commande (sans interface graphique) : l’objectif est de pratiquer les différentes commandes de base git
git
est souvent déjà installé sur Linux. Mais si ce n’est pas le cas, il suffit d’installer le paquet git
, par exemple avec apt install git
.
En ligne de commande créez le dossier de code tp1_git
.
Chargez ce dossier avec VSCode. Si VSCode n’est pas installé : snap install --classic code
Pour lancer VSCode : code
ou code mondossier/
Créez un nouveau fichier Python dans ce dossier appelé multiplication.py
. Copiez-y le code suivant :
class TableDeMultiplication:
def __init__(self, base=1, longueur=10):
if base < 1:
raise TypeError
# les attributs dont le nom commence par un underscore sont conventionnellement privés
# On ne doit pas y accéder directement mais à l'aide des méthodes (publiques) disponibles
self._base = base
self._longueur = longueur
self._resultats = TableDeMultiplication._calculate_results(self._base, self._longueur)
@classmethod
def _calculate_results(cls, base, longueur):
return [ i * base for i in range(1,longueur+1) ]
def get_base(self):
return self._base
def __getitem__(self, position):
return self._resultats[position]
# fonction de représentation texte de l'objet (affichage)
def __repr__(self):
return "TableDeMultiplication de {}".format(self._base)
# fonction d'affichage (si existe remplace __repr__ dans le cas des print et conversion en string)
def __str__(self):
print("méthode d'affichage de TableDeMultiplication")
res = "TableDeMultiplication de {}\n -------------------\n".format(self._base)
for index, result in enumerate(self._resultats):
res += "{} x {} = {}\n".format(index+1, self._base, result)
return res
# Fonction pour définir la longueur des objets de la classe de façon pythonique (avec len(obj) )
def __len__(self):
return self._longueur
# Fonction getter pour une propriété de la classe : cette fonction est appelée dès qu'on accède à la valeur longueur (propriété publique)
@property
def longueur(self):
print("j'accède à la longueur")
return self._longueur
# Fonction setter pour définir la longueur et faire toutes les modifications afférantes nécessaires
@longueur.setter
def set_longueur(self, longueur):
if longueur < 1:
raise TypeError
print("Je modifie la longueur")
self._longueur = longueur
self._resultats = TableDeMultiplication._calculate_results(self._base, self._longueur)
# Autre méthode pour la property
# longueur = property(get_longueur, set_longueur)
# Définit l'opération d'addition de deux tables
def __add__(self, table2):
return TableDeMultiplication(
self._base + table2._base,
self._longueur + table2._longueur
)
if __name__ == "__main__":
table = TableDeMultiplication(2)
print(len(table))
print(table.longueur)
print(table)
print(table[3])
print(table[3:10])
print(table + TableDeMultiplication(3,3))
git status
. Quel est le problème ?git init
.git status
pour voir l’état de votre dépôt.Pour le moment Git ne versionne aucun fichier du dépôt comme le confirme la commande git status
.
git add <nom_fichier>
sur le fichier. Puis faites à nouveau git status
. Le fichier est passé à l’état suivi (tracked).git status
à nouveau. Que s’est-il passé ?multiplication.py
pour vérifiergit status
pour constater que tous les fichiers sont non suivis sauf un.git config --global user.name "<votre nom>"
git config --global user.email "<votre email>"
git commit -m "<message_de_commit>"
(commit signifie s’engager alors réfléchissez avant de lancer cette commande !). Utilisons le message "Ceci est mon premier commit"
pour le premier commit d’un dépôt. Valider la version courante.git status
pour voir l’état du dépôt. Que constate-t-on ?git log
pour observer votre premier commit.Si le dossier __pycache__
n’a pas été créé, créez manuellement juste pour le TP un fichier : touch __pycache__
Utiliser git add
avec l’option -A
pour ajouter tous les fichiers actuels de votre projet.
Qu’affiche git status
?
Lancez à nouveau git commit
avec un message adéquat.
A quoi sert le dossier __pycache__
? Que faire avec ce dossier ?
Oh non ! Vous avez ajouté le dossier __pycache__
dans votre commit précédent 🙃
Ce ne serait pas correct de pousser sur Internet votre code en l’état !
__pycache__
avec la commande git rm
:
git rm --help
pour les trouver.Maintenant que nous avons supprimé ce dossier nous voulons éviter de l’ajouter accidentellement à un commit à l’avenir. Nous allons ignorer ce dossier.
.gitignore
et à la première ligne ajoutez __pycache__
ignore __pycache__
”multiplication.py
à nouveau.status
. Que constate-t-on ?Le problème avec la suppression de __pycache__
de la partie précédente est qu’elle n’affecte que le dernier commit. Le dossier inutile __pycache__
encombre encore l’historique de notre dépôt.
Pour le constater, installez l’extension Git Graph
de VSCode.
Explorer la fenêtre git graph en cliquant sur Git Graph
en haut à gauche de la fenêtre des fichiers.
Regardez successivement le contenu des deux commits.
Pour corriger l’historique du dépôt nous aimerions revenir en arrière.
Utilisez git reset
avec HEAD~2
pour revenir deux commits en arrière (nous parlerons de HEAD
plus tard).
Faites git status
. Normalement vous devriez avoir un seul fichier non suivi .gitignore
. Git vient de réinitialiser les ajouts des deux commits précédents.
Constatez dans Git Graph que seul reste le premier commit qui est toujours là.
Ajouter et committez tous les fichiers non suivis du dépôt.
Vérifier que __pycache__
n’apparaît pas dans l’historique.