188 lines
6.5 KiB
Markdown
188 lines
6.5 KiB
Markdown
#TP5 Activité de groupe : Découverte de Git sous Linux
|
||
|
||
## Objectif de l'activite
|
||
Cette activite a pour but de decouvrir les commandes de base de Git sous Linux, dans un contexte
|
||
collaboratif. Les etudiants travailleront par groupes pour developper un mini-projet en C, tout en utilisant les
|
||
fonctionnalites principales de Git : clone d'un depot distant, commits, branches, fusions, resolution de conflits
|
||
et push vers Gitea.
|
||
|
||
|
||
Avant propos : LE SHELL LINUX
|
||
|
||
##Qu’est-ce que le Shell et pourquoi en connaitre un minimum sur ce sujet ?
|
||
|
||
- Une interface en ligne de commande (CLI)
|
||
- Permet d’interagir avec le système d’exploitation linux
|
||
- Très utilisé dans le monde scientifique
|
||
- Puissance, rapidité, scriptabilité
|
||
- Présent sur tous les serveurs Linux
|
||
- Indispensable en recherche (Python, R, C, data science, calcul distribué...) pour automatiser, traiter des données, compiler, exécuter des codes
|
||
- Indispensable en adminstration système (gestion de datacenter, de SI d'entreprise de d'organisation, dans le WEB,....) pour interragir de manière ultra efficace , à distance, sur une multitudes de machines.
|
||
|
||
##Les base du SHELL:
|
||
Toute commande passée est de la forme :
|
||
```
|
||
commande [options] [arguments] [opérateurs de redirection] [filtres/pipes] [fichier de sortie]
|
||
```
|
||
avec :
|
||
```
|
||
commande # Le programme ou utilitaire que vous voulez exécuter (ex: ls, grep, echo, etc.)
|
||
|
||
[options] # Modificateurs qui changent le comportement de la commande (ex: -l, --help)
|
||
|
||
[arguments] # Ce sur quoi la commande agit (ex: un fichier, un répertoire, une expression)
|
||
|
||
[> fichier] # Redirection de la sortie standard (stdout) vers un fichier (créé ou écrasé)
|
||
|
||
[>> fichier] # Redirection en ajoutant à un fichier (append au lieu d’écraser)
|
||
|
||
[< fichier] # Lit un fichier en entrée standard (stdin), souvent utilisé avec des scripts ou des programmes
|
||
|
||
[| commande2] # Pipe : envoie la sortie de la commande précédente vers l’entrée de la suivante
|
||
|
||
[2> fichier_erreurs] # Redirection de la sortie d’erreur (stderr)
|
||
|
||
[&> fichier] # Redirection à la fois de stdout et stderr dans un seul fichier
|
||
```
|
||
|
||
##Exemple commenté complet
|
||
```
|
||
grep -i "erreur" logs.txt | sort | uniq -c > erreurs_traitees.txt 2> erreurs.log
|
||
```
|
||
àvec
|
||
|Élément | Rôle|
|
||
|--- |--- |
|
||
|grep | Commande pour chercher du texte|
|
||
|-i | Option : ignore la casse|
|
||
|"erreur" | Mot recherché|
|
||
|logs.txt | Fichier source|
|
||
| sort`| Commande pour trier |
|
||
| uniq -c`| Commande pour factoriser les résultats triés et compter le nombre d'itérations|
|
||
|> erreurs_traitees.txt | Envoie le résultat dans un fichier (stdout)|
|
||
|2> erreurs.log | Envoie les messages d’erreur dans un autre fichier (stderr)|
|
||
|
||
Voici une liste non exhaustive des commandes shell linux courantes:
|
||
|
||
```
|
||
pwd # Affiche le répertoire courant
|
||
ls # Liste les fichiers
|
||
ls -l # Liste détaillée
|
||
cd dossier/ # Se déplacer dans un dossier
|
||
cd .. # Remonter d’un dossier
|
||
cd ~ # Aller dans le dossier personnel
|
||
mkdir test # Créer un dossier
|
||
cd test # Entrer dans ce dossier
|
||
touch essai.txt # Créer un fichier
|
||
whoami # Nom de l’utilisateur
|
||
hostname # Nom de la machine
|
||
date # Date/heure
|
||
uptime # Depuis combien de temps l’ordi est allumé
|
||
echo "Bonjour le monde" > fichier.txt # Création avec contenu
|
||
cat fichier.txt # Affiche le contenu
|
||
echo "Ligne 2" >> fichier.txt # Ajoute une ligne
|
||
ma_commande --help # Ouvre l'aide de la commande ma_commande (exemple ls --help donne le manuel d'utilisation de la commande ls)
|
||
|
||
```
|
||
|
||
|
||
rm fichier.txt # Supprimer un fichier
|
||
mv a.txt b.txt # Renommer
|
||
cp a.txt b.txt # Copier
|
||
nano hello.sh # Editer un fichier texte avec l'utilitaire d'édition nano
|
||
vi hello.sh # Editer un fichier texte avec l'utilitaire d'édition vi
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Etape 1 - Création et Recuperation du projet depuis Gitea
|
||
|
||
***
|
||
Attention tout ce qui est entre *truc* doit être modifier pour corespondre au nommage de vos fichiers et projets
|
||
***
|
||
|
||
Créer en compte pour chaque membre de groupe sur https://gitea.apf-bi.ovh (avec votre addresse unilim)
|
||
Créer un depot publique sur le gitea avec l'un des comptes juste créer (le nommer en accord avec votre groupe de TP: MIX-1-toto-tata)
|
||
|
||
Chaque groupe commence par cloner un depot depuis le gitea sur sa machine virtuelle linux (la lancer avec l'icone xubuntu du bureau. identifiant eleve mdp eleve).
|
||
|
||
```
|
||
git clone http://gitea.apf-bi.ovh/*<utilisateur>*/*projet-git.git*
|
||
```
|
||
|
||
Ensuite il faudra déclarer votre identité
|
||
```
|
||
git config --global user.email "you@example.com"
|
||
git config --global user.name "Your Name"
|
||
```
|
||
Ensuite placez vous dans le dossier du projet, ajoutez un fichier source en C (un membre du binome le fait pour iniitalisé votre dépot), et realisent un premier commit suivi d'un push vers Gitea:
|
||
|
||
```
|
||
cd *projet-git*
|
||
nano main.c
|
||
git add main.c
|
||
git commit -m "Initial commit avec fichier main.c"
|
||
git push origin main
|
||
```
|
||
|
||
Etape 2 - Travail en branches
|
||
Chaque membre du groupe cree sa propre branche pour ajouter une fonction au programme C. Attention il faut que le membre du binome n'ayant pas fait le commit-push initial de re-cloner le dépot d'abord avec un git clone. Pour se faire il faut donc faire:
|
||
|
||
```
|
||
git checkout -b *feature-nom*
|
||
```
|
||
Chaque membre de binome modifie main.c pour ajouter une fonction ou un commentaire (à l'aide de l'éditeur de texte en ligne de commande nano par exemple)
|
||
Ensuite chaque membre effectue un commit sur sa branche et pousse la branche sur le serveur Gitea. En faisant:
|
||
|
||
```
|
||
git add main.c
|
||
git commit -m "Ajout de la fonction X"
|
||
git push origin feature-nom
|
||
```
|
||
|
||
Etape 3 - Fusion des branches
|
||
Les membres du groupe fusionnent leurs branches dans la branche principale en local, puis synchronisent le
|
||
depot avec Gitea. Des conflits peuvent survenir et devront etre resolus manuellement.
|
||
|
||
|
||
```
|
||
git checkout main
|
||
git pull origin main
|
||
git merge feature-nom
|
||
```
|
||
|
||
En cas de conflit :
|
||
```
|
||
git status
|
||
git diff
|
||
```
|
||
|
||
Resoudre manuellement les conflits, puis reprendre le processus de commit-push :
|
||
```
|
||
git add main.c
|
||
git commit -m "Resolution de conflit"
|
||
git push origin main
|
||
```
|
||
|
||
|
||
Etape 4 - Consultation de l'historique
|
||
Les etudiants consultent l'historique des commits et visualisent la structure du projet.
|
||
|
||
git log --oneline --graph --all
|
||
|
||
***
|
||
|
||
Fichier C de depart (main.c)
|
||
```
|
||
#include <stdio.h>
|
||
int main() {
|
||
printf("Bonjour, Git !\n");
|
||
return 0;
|
||
}
|
||
```
|
||
# Memo git (crédit github)
|
||
https://training.github.com/downloads/fr/github-git-cheat-sheet.pdf
|