Comment utiliser Git ?

Le problème exposé dans ce sujet a été résolu.

Bonjour ! :)

J’aimerais bien apprendre à utiliser correctement git.

Actuellement, j’utilise Bitbucket et le logiciel GitKraken, et même si je ne comprend pas encore très bien le système de branches, de commit, et tout ce qui va avec, je m’en sort plutôt bien.

Cependant, je me posais plusieurs questions, que voici :

  • 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 ?

  • Quels sont les avantages d’utiliser un gestionnaire de version ?

  • 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 ?

Merci ! :)

+0 -0

Hello,

1) normalement dès que tu peux. Si tu travailles sur une branche séparée tu peux t’autoriser à retravailler les commits plus tard.

2) tu peux gérer les versions et documenter tes modifications.

3) quand tu as un conflit, les deux versions apparaissent et tu peux choisir ce que tu veux (une version, l’autre, un mix des deux, la version de depart…). Si tu bosses sur deux parties séparées d’un document, il n’y aura pas de conflit.

Salut,

Déjà félicitation, Git est une aventure dont on ne revient pas ! Pour commencer par une lecture, je ne peux que te conseiller le Git Book.

  • 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 ?
FougereBle

Déjà il faut différencier le fait d’utiliser Git et de mettre son code en ligne, les deux étant bien différents.
Git est un outil qui s’utilise localement, qui te permet d’organiser ton travail grâce aux commits et aux branches. Les dépôts distants ne sont utiles que pour des raisons de sauvegarde, de partage et de contributions.

Le tout est de penser en terme de branches. Tu auras généralement sur tes projets des branches considérées comme stables, sur lesquelles tu n’ajouteras pas de commits pour des fonctionnalités non terminées.
Mais à côté de ça tu peux disposer de toutes les branches que tu veux et y pousser ce que bon te semble. Même un POC qui serait amené à disparaître.

Il est courant de travailler avec des branches de fonctionnalités, basés sur master (ou une branche develop) qui représentent la fonctionnalité en cours de développement. Et une fois la fonctionnalité terminée, la branche se retrouve fusionnée dans la principale.

  • Quels sont les avantages d’utiliser un gestionnaire de version ?
FougereBle

Ça aide beaucoup pour l’organisation, les commits te permettent déjà de donner un nom et un commentaire à tes modifications. Les branches te permettent de naviguer entre fonctionnalités, pour traiter plusieurs sujets en parallèle sans se mélanger dans les fichiers (chaque branche se retrouve associée à un état des fichiers, basculer d’une branche à l’autre modifie les fichiers du répertoire).

Pour la sauvegarde aussi, si tu fais des modifications sur un fichier pour tester quelque chose, tu sais que tu pourras toujours revenir sur tes pas si ce fichier a été commit. De même que tu pourras toujours revenir sur un commit particulier en cas de bug. En parlant de bug, des commandes telles que git bisect et git blame sont bien utiles pour déceler l’introduction d’un bug.

Et ça ce n’est que pour l’aspect local. En travail collaboratif ça devient indispensable pour la gestion des conflits entre fonctionnalités. Tu ne peux pas te permettre de bloquer tout un projet le temps d’implémenter quelque chose pour que les autres se basent ensuite dessus.
Avec un gestionnaire de versions, tout le monde peut travailler en parallèle sur des fonctionnalités différentes, et la résolution des conflits se fait à la fusion des branches.

  • 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 ?
FougereBle

Si les modifications portent sur un même fichier mais sur des lignes bien distinctes, Git retrouvera ses petits et la fusion se déroulera sans problème. Si les mêmes lignes sont modifiées de part et d’autre, alors il lui sera impossible de savoir quelle version garder, c’est ce qui provoque un conflit.
Tu auras alors accès à un diff pour réécrire le bloc qui pose problème, en sélectionnant ce que tu souhaites garder d’un commit ou de l’autre.

Mais il n’y a pratiquement jamais de possibilité de pertes avec Git. Les seuls cas où cela peut se produire c’est sur des commits plus référencés depuis suffisamment longtemps pour que le garbage collector les supprime. Et encore, il faut que cela se produise sur tous les dépôts qui contiennent ce commit.

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.

+5 -0

Wouah, merci pour cette réponse complète entwanne ! Et merci aussi unidan pour ta réponse ! :)

Je ne savais pas que git pouvais être utilisé en local. Pour moi, c’était toujours le mettre en ligne.

Actuellement, travaillant seul sur mes projets, je met mon code en ligne uniquement dans le but de faire des sauvegardes. Ca me permet aussi de savoir quelles modifications j’ai fait à un moment donné.

Cependant, je n’utilise jamais les branches. A vrai dire, je met tout sur master… la raison et que je ne sais pas bien utiliser cet outils. Il va falloir que je trouve un tutoriel sur internet, ne serais-ce que pour apprendre les bases.

Du coup, je n’ai rien d’autres à ajouter. Les réponses étant très complètes, tout est clair ! :)

Je passe donc ce sujet en résolu, mais si vous connaissez un tutoriel de qualité - et en français -, je suis preneur !

Merci encore !

+0 -0

Je ne savais pas que git pouvais être utilisé en local. Pour moi, c’était toujours le mettre en ligne.

FougereBle

C’est un des aspects qui le différencient de Subversion et ça fait partie de sa force. Tu peux travailler sur ton dépôt depuis n’importe où, et tu n’as pas besoin de partager tout ce que tu fais à tout moment. Il est alors bon de faire des commits régulièrement pour sauvegarder ton travail, sous réserve de les modifier avant de les pousser vers le dépôts distant.

Cependant, je n’utilise jamais les branches. A vrai dire, je met tout sur master… la raison et que je ne sais pas bien utiliser cet outils. Il va falloir que je trouve un tutoriel sur internet, ne serais-ce que pour apprendre les bases.

FougereBle

Ce n’est pas forcément très grave dans un premier temps, surtout si tu es seul et que l’évolution du projet est très linéaire (il m’arrive encore de travailler comme ça sur des petits projets de rédaction d’articles / présentations).

L’important dans un premier temps c’est de bien comprendre la notion d’atomicité des commits. De savoir que tu peux les réorganiser, les annuler, etc. Mais que pour cela il faut qu’ils soient bien découpés et ne mélangent pas des modifications qui n’ont rien à voir sur les fichiers.

Les branches, ensuite, c’est pour ne pas altérer le projet avec du code en cours de développement et pour regrouper des commits qui appartiennent à une même fonctionnalité.

Cependant, je n’utilise jamais les branches. A vrai dire, je met tout sur master… la raison et que je ne sais pas bien utiliser cet outils. Il va falloir que je trouve un tutoriel sur internet, ne serais-ce que pour apprendre les bases.

FougereBle

Ce n’est pas forcément très grave dans un premier temps, surtout si tu es seul et que l’évolution du projet est très linéaire (il m’arrive encore de travailler comme ça sur des petits projets de rédaction d’articles / présentations).

entwanne

Ce qui serais bien, c’est que même sur un petit projet où cela n’a pas beaucoup d’importance, il faudrait que je fasse comme-ci c’était un plus gros projet sur lequel je travaille avec une équipe. Ne serais-ce que pour m’entraîner et apprendre les bonnes pratiques.

+0 -0

Désolé pour le HS mais j’ai pas pu m’empêcher de sourire à la lecture de la première phrase du troisième post :

Déjà félicitation, Git est une aventure dont on ne revient pas !

Que j’ai lu comme ceci dans ma tête :

« Beaucoup de vaillants aventuriers se sont lancés à sa conquête. Nous ne savons pas ce qu’il est advenu d’eux. Je te félicite, car je lis dans tes yeux la détermination et le courage des braves de ce monde, et ton périple sera chanté pendant des générations à venir. »

+4 -0

Cependant, je n’utilise jamais les branches. A vrai dire, je met tout sur master… la raison et que je ne sais pas bien utiliser cet outils. Il va falloir que je trouve un tutoriel sur internet, ne serais-ce que pour apprendre les bases.

FougereBle

Ce n’est pas forcément très grave dans un premier temps, surtout si tu es seul et que l’évolution du projet est très linéaire (il m’arrive encore de travailler comme ça sur des petits projets de rédaction d’articles / présentations).

entwanne

Ce qui serais bien, c’est que même sur un petit projet où cela n’a pas beaucoup d’importance, il faudrait que je fasse comme-ci c’était un plus gros projet sur lequel je travaille avec une équipe. Ne serais-ce que pour m’entraîner et apprendre les bonnes pratiques.

FougereBle

Tu as le droit de ne pas être parfait avec git. A partir du moment où ton travail est commité, tu peux toujours le récupérer (grâce à git reflog) et donc tu peux essayer de manipuler git plus sereinement. Si tu fais des «erreurs», tu pourras les corriger plus tard, surtout si ton projet est petit ou juste pour toi.

il y a celui d'@Eskimon ici même :

https://zestedesavoir.com/tutoriels/379/refaire-lhistoire-avec-git/

Ne l’ayant pas lu, je ne saurai le juger :p

Et évidement le Git book évoqué par @entwanne

Angelo

Oui mais non. C’est un tuto sur une notion "avancée", le rebase, pas sur vit dans son intégralité du coup clairement pas adapté au PO ^^

+2 -0

Désolé pour le HS mais j’ai pas pu m’empêcher de sourire à la lecture de la première phrase du troisième post :

Déjà félicitation, Git est une aventure dont on ne revient pas !

Que j’ai lu comme ceci dans ma tête :

« Beaucoup de vaillants aventuriers se sont lancés à sa conquête. Nous ne savons pas ce qu’il est advenu d’eux. Je te félicite, car je lis dans tes yeux la détermination et le courage des braves de ce monde, et ton périple sera chanté pendant des générations à venir. »

nohar

Mais nan, c’était plus dans le sens d’on ne peut plus s’en passer une fois qu’on y a goûté. :D
Comme le chocolat, la bière ou le Python.

Au final, je trouve les lignes de commande plus simple qu’une interface graphique !

C’est particulièrement vrai avec git : chaque commande est une action importante dans le processus. Le fait d’apprendre à utiliser la ligne de commande te "force" à comprendre tous les éléments qui la composent. Du coup, en utilisant la ligne de commande, tu t’habitues à réfléchir "en git", et à la longue, à bien mieux comprendre et contrôler ce que tu fais.

+3 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte