A quel moment faut-il mettre notre code en ligne ? Dois-je mettre le tout sur Git une fois que j’arrête de programmer pour aujourd’hui (ce qui veut dire : le mettre en ligne même si je n’ai pas terminé de coder une fonctionnalité) ? Ou alors faut-il le mettre en ligne une fois la fonctionnalité terminée et testée ? Ou bien, dois-je attendre de terminer plusieurs fonctionnalités avant de mettre le code en ligne ?
Avec un gestionnaire de version moderne, tu dois avoir plusieurs branches.
Au minimum tu dois avoir :
- Une branche stable, souvent nommée master, tu n’y placeras que du code utilisable et testé uniquement ;
- Une branche de développement ;
- Une branche personnelle.
La branche de développement est plus fourre tout. Tu peux en faire une par version, une par fonctionnalité à développer, un mix des deux. L’important est que ce soit du code pas forcément fini et totalement testé mais utilisable pour les tests.
Une branche perso qui ne sert que pour toi. Genre sauvegarder quelque part tes travaux du jour. Que cela fonctionne ou pas, que ce soit testé ou non est ton affaire.
Le but est de segmenter le code pour te simplifier la vie. Simplifier ton déploiement et favoriser les contributions extérieures si tu le souhaites.
Quels sont les avantages d’utiliser un gestionnaire de version ?
Beaucoup.
Par exemple, si tu développes une fonctionnalité, tu as ton code sur master qui est propre. Tu crées une autre branche pour une nouvelle fonctionnalité. Si tu abandonnes ta fonctionnalité ou que tu souhaites corriger un bogue avant de le finir (car c’est urgent), pas de soucis tu as ton code sur master qui est dispo. Revenir en arrière est simple.
Quand tu fais du développement exploratoire c’est sympa aussi. Tu développes une fonctionnalité un peu grosse, tu peux faire des commits intermédiaires dans ta branche de développement. Si tu réalises au milieu que tu dois faire autrement ce n’est pas un soucis, tu peux revenir en arrière à un point intéressant. Car en commitant, tu ne perds rien.
Tu associes une signification à ton code et à son évolution. Tu peux facilement voir que telle ligne a été crée pour une fonctionnalité ou corriger un bogue précis. Et éventuellement voir comment ça marchait avant. Ça aide beaucoup à comprendre le projet notamment pour els personnes extérieures ou toi même dans longtemps.
Enfin, quand on travail en équipe, comment ça se passe ? Imaginons que je travail sur un fichier, et qu’une autre personne de l’équipe travail sur un autre fichier, mais dois modifier le mien pour terminer son code. Comment ça se passe ? Si je met mon fichier en ligne, il perd ses modifications, et inversement. Ou alors, cela n’arrive jamais ?
S’il y a conflit sur un fichier, en gros deux personnes bossent sur le même fichier, git le détectera quand le second poussera son travail. Si c’est trivial à résoudre, genre vous travaillez sur le même fichier mais pas sur la même partie du code, git résoudra le soucis de lui même. Si par contre le code modifié de ton côté et celui de ton collègue se superposent, git signalera une erreur et demandera à ton collègue de résoudre le conflit à la main avant d’accepter le commit.
D’où l’importance d’avoir une branche master propre qui sert de référence à tout le monde et ensuite on applique individuellement nos travaux dessus quand c’est prêt. Ça évite d’avoir des conflits de partout et d’embêter son voisin pour un code qui ne marche peut être même pas.