Qu'est-ce que Git ?
Git est un système de contrôle de version distribue, créé par Linus Torvalds en 2005 pour le développement du noyau Linux. C'est l'outil de versioning le plus utilise au monde, adopte par la quasi-totalite des projets logiciels. Git permet de suivre l'historique des modifications du code, de collaborer efficacement en équipe, et de gérer plusieurs versions d'un projet simultanément.
Architecture distribuee
Contrairement aux systèmes centralises (SVN, CVS), Git est distribue : chaque développeur possède une copie complete du dépôt (historique inclus). Cela permet de travailler hors-ligne, d'avoir un backup naturel, et d'expérimenter sans risque. Le depots distant (GitHub, GitLab, Bitbucket) sert de point de synchronisation mais n'est pas un point de defaillance unique.
Concepts fondamentaux
Le working directory contient les fichiers modifiables. Le staging area (index) prepare le prochain commit avec git add. Un commit est un snapshot immutable de l'état du projet avec un hash SHA-1 unique, un message, un auteur et un pointeur vers le(s) commit(s) parent(s). Les branches sont des pointeurs legers vers un commit, permettant le développement parallèle. HEAD pointe vers la branche ou le commit actuel.
Branching et collaboration
Les branches Git sont legeres et rapides à créer. Les stratégies de branching incluent Git Flow (branches main, develop, feature, release, hotfix), GitHub Flow (main + feature branches + pull requests), et Trunk-Based Development (commits directs sur main avec feature flags). Les pull requests (ou merge requests) sont le mécanisme central de revue de code en équipe. Les merge (fusion) et rebase (rebase) sont les deux stratégies pour intégrer les changements entre branches.
Commandes essentielles
Les commandes les plus utilisees couvrent le cycle de travail quotidien : git clone, git pull (récupérer), git branch, git checkout/switch (naviguer), git add, git commit (sauvegarder), git push (partager), git merge/rebase (intégrer), git log, git diff (inspecter), git stash (mettre de cote), et git bisect (trouver un bug par dichotomie). La maîtrise de git rebase -i (rebase interactif) et git reflog (historique de toutes les actions) distingue les utilisateurs avances.