Annexe G · git

Git & GitHub

Une petite page si tu n'as pas déjà Git. Tu y retrouves l'inscription sur GitHub, l'installation dans ton terminal, la configuration, les commandes générales et un exemple de fichier .gitignore en bas de page.

On l'installe grâce à brew, on le configure, on génère une clé SSH, et on vérifie que tout fonctionne en clonant le lien (repo) du cours.

Git
→ Logiciel de gestion de versions décentralisé qui permet de conserver un historique des modifications et des versions de tous tes fichiers textuel. C'est un logiciel libre et gratuit, créé en 2005 par Linus Torvalds, auteur du noyau Linux.
→ Il permet également de travailler à plusieurs grâce à un système de branches.
GitHub
→ Service en ligne qui va héberger ton dépôt local.
→ C'est le plus grand réseau mondial de collaboration pour les programmeurs et les projets open source.
L'Open Source désigne un modèle de développement où le code source d'un logiciel est rendu public et accessible à tous. N'importe qui peut ainsi consulter, modifier, améliorer et redistribuer ce code selon des règles définies par une licence.

Créer un compte GitHub

Tu n'es pas obligé, mais ça ne coûte rien de le faire. Rends-toi sur https://github.com/signup et :

1. Identifiants
→ Choisis un nom d'utilisateur public (il apparaîtra dans l'URL de tes projets, ex. github.com/tonUserGitHub), une adresse email valide, et un mot de passe robuste.
2. Vérification
→ GitHub t'envoie un code par email pour confirmer l'adresse. Le plan gratuit suffit largement pour tout ce cours.
3. Double authentification
→ Une fois connecté, active la 2FA dans Settings → Password and authentication. Fortement recommandé : c'est ce qui protège ton code (et l'accès à tes clés SSH) si ton mot de passe fuite un jour.

Il existe aussi des projects auxquels tu es invité à participer en utilisant GitHub pour te faire corriger et débloquer des niveaux avancés sur LearnMSL.dev

Ton parcours s'affiche en cliquant sur ton pseudo en haut à droite !

Installer Git dans ton terminal

macOS

# Shell — si tu as brew, sinon installe-le.
man brew
brew install git # update / install
Homebrew / brew

Moyen le + simple et le + flexible d'installer les outils UNIX qu'Apple n'a pas inclus avec macOS. Il peut aussi installer des logiciels sans distribution pour ta distribution Linux (sans sudo).

Tu en auras besoin pour assimp et une tonne d'outils en tant que développeur. (hexedit, libpng, …)

Configurer Git

# Shell
git config --global user.name "Ton Nom"
git config --global user.email "ton_email@example.com"   # le même email que ton compte GitHub
git config --global init.defaultBranch main               # évite les warnings "master" vs "main"
git config --list                                          # vérifie que tout est bien pris en compte
man sudo # pour les nerds

Ton travail est précieux, génère une clé SSH pour GitHub

ssh-keygen -t ed25519 -C "ton_email@example.com"

pbcopy < ~/.ssh/id_ed25519.pub

Rends-toi ensuite dans GitHub → Settings → SSH and GPG keys → New SSH key, colle le contenu, donne-lui un titre (le nom de ta machine par exemple) et valide.

ssh -T git@github.com # doit répondre : "Hi tonUserGitHub! You've successfully authenticated…"

Vérifie ta configuration

Le meilleur test, c'est de cloner un vrai dépôt. Tu peux cloner celui du cours pour confirmer que Git, ta clé SSH et GitHub sont bien reliés :

git clone git@github.com:remdal/Metal-x-C---LearnMSL.dev.git

Si le clone se termine sans erreur d'authentification (pas de Permission denied (publickey)), ta configuration est bonne et tu es prêt pour la suite du cours.

Les commandes Shell pour l'utilisation de Git/Github

# Shell
man ssh-keygen                              # Ouvre le manuel de la commande
ssh-keygen -t ed25519 -C "ton_email@example.com" # Génère un clé SSH (protection Git obligatoire)
pbcopy < ~/.ssh/id_ed25519.pub              # Va chercher le fichier généré et copie le contenu
                                            Command + V pour coller le contenu dans GitHub
git --version
git config --list
git clone lien_HTTPS_SSH nom_souhaité       # Clone le repository depuis GitHub
git status --ignored                        # Info branche, flag optionnel,
# Liste : Changes to be committed, Changes not staged for commit, Ignored files.
git add *                                   # Ajoute tout au prochain commit, excepté contenu .gitignore
git commit -m "message d'amélioration bzzz"
git push                                    # Envoi sur le serveur distant
# Résultat push dans la console :
# Delta compression using up to 10 threads  ← optimisé, la compression se fait sur les 10/10 Threads

D'autres commmandes moins utilisées en solo dev :

# Shell
echo ".env" >> .gitignore                   # Ajoute la ligne .env à la fin de ton fichier
# echo crée le fichier s'il n'existe pas, man echo pour manuel

git rm --cached .env                        # Supprime .env du .git (garde le fichier sur ton disque)
git add -f toUpload.png                     # force l'ajout malgré .gitignore

git pull                                    # Récupère les dernières MAJ du clone distant
git branch                                  # Liste les branches (généralement origin/main)
git checkout branch_name                    # Change de branche
git merge branch_name                       # Fusionne la branche avec l'actuelle
git log                                     # Historique commit

vim .gitignore                              # Ouvre un éditeur de texte (voir setup)
ls -a                                       # Liste également les fichiers cachés

# fatal: The current branch main has no upstream branch. ↓↓
git remote set-url origin git@github.com:tonUserGitHub/tonLienSSHdeGitHub.git
git push -u origin main

git remote add origin https://github.com/remdal/tonLienHTTPSdeGitHub.git
git branch -M main

Les flags représentés par des tirets sont des options.

Les fichiers cachés se distinguent par le point qui débute leur nom.

En production (dépendant du langage) :

.gitignore — Exemple
.env
flask_session/*
*.DS_Store
Frameworks/*
*.png
*.glb
*.m4a
*.obj
*.gch
*.pch
*.dylib
*.ktx
*.lib
*.exe
*.out
*.app
*.air
*.tpp           # fichier qui contient des définitions template C++
create_icns.sh
font.ttf
output_metrics.csv