FRFAM.COM >> Famille >> Technologie &Innovation >> Informatique

Comment utiliser les branches Git pour structurer votre projet de programmation

Les films et la télévision décrivent la programmation comme une activité frénétique. Le minuteur d'une bombe compte à rebours, et l'acolyte ringard qui était un fardeau jusque-là travaille fébrilement sur un ordinateur portable. Le code vole sur l'écran jusqu'à ce qu'elle appuie sur la dernière touche de retour avec un clac satisfaisant ! Le chronomètre s'arrête, et tout va bien dans le monde à nouveau. Mais la programmation n'a rien à voir avec ça. Il comprend des documents de conception, des maquettes d'interface utilisateur et des révisions de code. Et plus que tout, cela implique des essais et des erreurs, surtout si vous êtes un débutant (comme moi).

Maintenant, vous êtes peut-être déjà convaincu de l'intérêt de conserver vos projets de codage sous contrôle de code source. Commettre tous ces essais et erreurs dans votre référentiel créera un projet volumineux et désordonné, avec de nombreuses révisions. La plupart des commits que vous faites contiendront des éléments cassés, alors pourquoi les sauvegarder ? La branche git peut aider à éloigner tout ce code désordonné de tout ce dont vous savez qu'il fonctionne.

Dans cet article, nous verrons ce que signifie créer une branche dans votre code, comment procéder et comment gérer les mises à jour de la branche "principale".

Créer une branche Git

Nous avons appris de notre introduction au contrôle de code source que vous pouvez créer un nouveau référentiel avec la commande suivante dans un terminal :

git init

Lorsque vous faites cela, il crée un répertoire caché dans votre chemin actuel, appelé ".git". Si vous ne pouvez pas le voir, consultez certains de nos articles précédents sur l'affichage des fichiers cachés. Ce répertoire contient toutes les informations nécessaires pour conserver l'historique de révision de vos fichiers. Une fois que vous avez configuré votre gestionnaire de fichiers pour afficher les fichiers cachés, vous pouvez ouvrir le dossier .git et voir un certain nombre de sous-répertoires. L'un d'eux s'appelle "refs " (montré dans l'image ci-dessous), et ses "têtes Le sous-répertoire " contient les listes de toutes les branches de votre projet. Au départ, vous n'en aurez qu'une, appelée "maître".

Comment utiliser les branches Git pour structurer votre projet de programmation

Le répertoire refs conserve un enregistrement de la branche, mais pas de la branche elle-même. Du moins, pas la branche que vous utilisez actuellement . Ces fichiers sont conservés dans le répertoire de travail ("~/Temp/post-programming-git-branch" dans l'exemple ci-dessus) afin que vous puissiez y accéder de manière normale. En faisant exactement cela, nous créons notre premier fichier (nommé "first-file.txt") dans le répertoire de travail, c'est-à-dire à l'extérieur le répertoire .git. Vérifiez ceci en utilisant les commandes de confiance de l'introduction précédente à l'article git :

Comment utiliser les branches Git pour structurer votre projet de programmation

Nous pouvons voir maintenant que le répertoire de travail a deux fichiers, celui que nous avons validé et un créé automatiquement par git (il contient le message de validation que nous venons de saisir).

Comment utiliser les branches Git pour structurer votre projet de programmation

Maintenant, créons une nouvelle branche git appelée "testing":

test de branche git

Vérifier la succursale et y travailler

Nous pouvons émettre la commande ci-dessus sans aucun nom afin d'obtenir une liste de toutes les branches, ainsi que celle que nous utilisons actuellement (c'est-à-dire celle qui est "extraite") :

Comment utiliser les branches Git pour structurer votre projet de programmation

Maintenant, si nous examinons la structure du répertoire, nous verrons ".git/refs/heads " a maintenant deux fichiers, un pour "master" et un pour "testing".

Comment utiliser les branches Git pour structurer votre projet de programmation

Chacun d'eux est une liste des commits qui composent la branche. Par exemple, si nous examinons la branche "master" avec le "git log ", nous pouvons voir une ligne pour chacun des commits effectués sur cette branche.

Comment utiliser les branches Git pour structurer votre projet de programmation

Le processus d'"extraction" d'une branche signifie que les modifications que vous apportez aux fichiers feront partie de cette branche, mais pas des autres branches. Par exemple, supposons que nous vérifions la branche testing git avec la commande suivante :

test de paiement git

Ensuite, nous ajoutons une ligne de texte à first-file.txt, bien sûr en la validant par la suite. Si vous revenez à la branche master, vous constaterez que le fichier est toujours vide (le cat commande affiche le contenu d'un fichier dans le terminal) :

Comment utiliser les branches Git pour structurer votre projet de programmation

Mais en revenant à la branche "testing", le fichier contient toujours le texte ajouté :

Comment utiliser les branches Git pour structurer votre projet de programmation

Mais tout ce que nous voyons dans le répertoire proprement dit est le fichier unique "first-file.txt". Où sont donc ces deux versions alternatives du même fichier ? Le répertoire .git tient compte de ces changements, mais pas de la manière à laquelle vous pourriez vous attendre.

Comment Git stocke les choses

Si vous deviez examiner un référentiel pour d'autres systèmes de contrôle de version tels que Subversion, vous constateriez qu'ils conservent une copie par révision pour chaque fichier individuel. Cela signifie que si vous avez un référentiel d'un fichier, puis créez deux branches, le référentiel contient deux copies différentes de ce fichier. En fait, vous utilisez en fait « svn copy » comme commande pour créer une branche dans Subversion ! D'un autre côté, git fonctionne sur le concept de "changements".

Comment utiliser les branches Git pour structurer votre projet de programmation

La sortie de ce qui précède nous indique que tout le contenu de "trunk" (la version SVN de "master") a été copié. Un coup d'oeil dans un gestionnaire de fichiers le confirme :

Comment utiliser les branches Git pour structurer votre projet de programmation

Le ".git/objects " est ce qui contient tous ces petits changements, et chacun est suivi avec un ID. Par exemple, dans l'image ci-dessous, vous verrez des fichiers avec des noms longs de style ID. Chacun réside dans un dossier nommé avec deux caractères hexadécimaux ( 8c et 8d ci-dessous).

Comment utiliser les branches Git pour structurer votre projet de programmation

Ensemble, ces noms de dossier et de fichier constituent l'ID d'un changement particulier (en fait un hachage SHA1). Vous pouvez explorer leur contenu en utilisant le git cat-file commander. Sur la base de leurs dates modifiées, nous pouvons voir que celle commençant par "8d" est arrivée en premier, et cela ne montre rien. Alors que celui commençant par "8c" contient la ligne de texte que nous avons ajoutée au fichier dans la branche "testing".

Comment utiliser les branches Git pour structurer votre projet de programmation

Le point à retenir est que les branches git (y compris le "maître" par défaut) ne sont pas des "dossiers" séparés contenant des copies de fichiers. Il s'agit plutôt de listes de modifications apportées aux fichiers au fil du temps. C'est plus efficace en termes de stockage, mais le résultat est le même. Tout ce que vous faites (cassez ?) dans une branche git y reste jusqu'à ce que vous la fusionniez.

Stratégies de fusion vers la branche principale (à supprimer ou à ne pas supprimer ?)

Supposons que vous ayez un projet existant avec un certain nombre de fichiers, que vous avez ensuite ramifié en "testing" et que vous avez travaillé dessus. Maintenant, vous voulez récupérer ces modifications dans la branche "master". Vous pouvez faire ce qui suit depuis la branche "master":

test de fusion git

S'il n'y a pas de conflits, le changement composé du nouveau texte sera appliqué maîtriser." Le résultat est "first-file.txt" sera identique dans les deux branches. Pourtant, il n'y a jamais vraiment eu de versions alternatives du fichier.

Vient maintenant la question, que faire de la branche ? Il existe deux stratégies courantes pour traiter avec les succursales.

Comment utiliser les branches Git pour structurer votre projet de programmation
  1. La première consiste à conserver une branche git comme "testing" pour jouer (voir ci-dessus). Vous essayez certaines choses et, si vous pouvez les faire fonctionner, fusionnez les modifications dans "maître". Ensuite, vous pouvez mettre fin au travail sur cette branche, voire vous en débarrasser complètement. Cela signifie que votre "maître" est la version la plus stable du code, car il ne doit contenir que des éléments dont vous savez qu'ils fonctionnent. Vous pouvez également considérer cette approche comme l'utilisation de "branches de fonctionnalités". En effet, leur but est d'affiner un (ou plusieurs) ajouts spécifiques au code.
  2. Une approche différente consiste à faire tout votre travail principal dans la branche "master", en faisant des commits en cours de route. Une fois que vous êtes satisfait de la fonctionnalité, vous créez une branche à l'intérieur de laquelle vous corrigerez les bogues, etc. Il en résulte davantage une "branche de version" (illustrée ci-dessous), car elle se termine par la version. Cela signifie également que votre branche "maître" est généralement la version la plus instable de votre code.
Comment utiliser les branches Git pour structurer votre projet de programmation

Utilisez la méthode qui vous convient le mieux

La première approche ici est plus courante lorsque vous travaillez avec git. Ses autres fonctionnalités (en particulier les balises) permettent de marquer facilement un instantané particulier du code comme "stable". Il se prête également mieux aux grands projets collaboratifs. Mais lorsque vous travaillez sur vos propres projets personnels, n'hésitez pas à utiliser celui qui vous convient le mieux. L'avantage d'utiliser git est que vous capturez toutes vos modifications, vous pouvez donc toujours revenir en arrière et trouver quelque chose. Et organiser votre projet avec des branches git rend cela un peu plus facile à faire.

Comment abordez-vous les branches dans vos projets ? Les utilisez-vous pour expérimenter, puis les jetez-vous ensuite ? Ou représentent-ils un historique détaillé de votre travail sur le projet ?

Faites-nous savoir ci-dessous dans les commentaires si vous avez des moyens astucieux de gérer les branches dans vos projets git !


[]