Tirer le meilleur parti de Git
Pas une seule Le projet d'aujourd'hui s'en tirera sans une sorte de contrôle de version avec Git sous le capot. Bien connaître Git vous aide à devenir un meilleur développeur, à booster le flux de travail de votre développeur et à vraiment améliorer la qualité de votre base de code. Cependant, cela nécessite de sortir un peu de la zone de confort que nous connaissons tous. En fait, il y a un peu plus dans Git que de simplement commettre, pousser et tirer.
Certains développeurs restent fidèles aux principes fondamentaux de Git, et c'est souvent tout à fait compréhensible. Dans notre monde frontal, il y a tellement de choses sophistiquées à comprendre et à améliorer, que franchement Git n'est souvent pas une priorité élevée. En tant qu'effet secondaire, bon nombre des techniques précieuses qui peuvent améliorer le flux de travail d'un développeur restent inaperçues et rarement découvertes .
Dans cet article, nous explorerons quatre outils avancés de Git et, espérons-le, vous ouvrirons l'appétit pour en savoir plus sur Git!
Récupération des commits supprimés
Vous êtes convaincu que vous vous êtes programmé dans une impasse car vos deux derniers commits ne mènent nulle part! Naturellement, vous voudrez peut-être les annuler et recommencer.

Voici une façon de procéder:
$ git reset --hard 2b504be
Mais disons aussi que, quelques instants plus tard, vous remarquez que vous avez fait une erreur: en fait, les commits contenaient des données importantes et vous venez de perdre un travail précieux!
Votre cœur commence à battre, la sueur commence à couler – vous connaissez l'exercice.
Maintenant, la question à un million de dollars est: Comment pouvons-nous récupérer ces commits apparemment supprimés ? Heureusement, il y a une réponse: le «Reflog»!
Utilisation du Reflog pour récupérer des états perdus
Vous pouvez considérer le Reflog comme le «journal» de Git: c'est l'endroit où Git enregistre chaque mouvement du pointeur HEAD. Ou, en d'autres termes: toutes les actions les plus intéressantes comme lorsque vous validez, fusionnez, récupérez, rebasez, sélectionnez cerise et autres. Ceci, bien sûr, en fait un outil parfait pour les situations inévitables où les choses tournent mal.
Ouvrons le Reflog pour notre exemple de scénario et voyons comment il peut nous aider:
$ git reflog

La première et la plus importante chose à savoir sur le Reflog est qu’il est ordonné par ordre chronologique . Et en effet: l'élément le plus élevé (en d'autres termes: le plus récent) est notre mésaventure lorsque nous avons utilisé à la hâte git reset
et perdu quelques commits.
La solution pour résoudre notre problème est assez simple: nous pouvons simplement revenir à l'état avant l'erreur. Et cet état est clairement consigné dans Reflog, juste en dessous de notre commande fatale reset
. Pour annuler notre erreur, nous pouvons simplement utiliser git reset
une fois de plus pour récupérer cet état apparemment perdu:
$ git reset e5b19e4
Vous pouvez également obtenir le même résultat un peu plus rapidement. En tant que groupe de développeurs sympathiques et passionnés sur l'interface graphique de bureau Git «Tower» nous visons à résoudre les problèmes courants autour de Git. Ainsi, dans notre petit outil, vous pouvez obtenir les mêmes résultats en appuyant simplement sur CMD + Z – comme si vous vouliez corriger une simple faute de frappe dans votre éditeur de texte. En fait, le même raccourci clavier est disponible pour une famille d'actions différentes, par ex. lorsque vous avez supprimé une branche par erreur, commis une erreur lors d'une opération de fusion ou commis quelque chose sur la mauvaise branche.
Nettoyage de votre historique de validation
Lorsque vous travaillez sur une nouvelle fonctionnalité, la «beauté» de votre validation L'histoire n'est peut-être pas votre priorité absolue – et c'est compréhensible: il y a beaucoup d'autres choses à craindre. Mais une fois que vous avez terminé et juste avant de fusionner votre travail dans une branche d’équipe, c’est probablement une bonne idée de vous attarder un moment et de respirer. Regardez l'historique des commit que vous avez produit en cours de route et voyez s'il pourrait être amélioré: est-il facilement compréhensible? Y a-t-il des commits qui devraient en fait ne pas être inclus? Deux commits qui devraient être combinés en un seul? Ou un énorme monstre de commit qui devrait être divisé en commits plus petits et plus lisibles?
Nettoyer vos commits avant de les intégrer dans une branche d'équipe est important lorsque nous voulons maintenir une base de code saine. Et l'outil «Interactive Rebase» de Git est le moyen idéal pour y arriver.
Interactive Rebase vous permet de supprimer des commits, de les réorganiser, de combiner plusieurs commits en un seul ou de diviser un gros commit en plusieurs plus petits ceux. Dans cet article, à titre d'exemple, nous allons simplement voir comment supprimer un ancien commit dont vous n'avez plus besoin.
Disons que nous ne voulons pas du commit suivant plus (par exemple parce qu'il contient des données sensibles qui n'auraient pas dû être validées en premier lieu):

pour corriger cette erreur, nous allons lancer une session Interactive Rebase, à partir de la révision parent du commit défectueux :
git rebase -i 2b504be
Une fenêtre d'édition s'ouvrira alors et nous permettra de manipuler la partie sélectionnée de notre historique de commit:

drop
] le supprimera de l'historique. ( Grand aperçu ) Dans notre cas, puisque nous voulons supprimer un commit, nous marquons simplement la ligne respective dans l'éditeur avec le mot-clé d'action drop
. Une fois que nous avons cliqué sur "Enregistrer" dans notre éditeur et fermé la fenêtre, la Rebase interactive est terminée – et le commit indésirable aura disparu!
(Juste une petite note: encore une fois, si vous utilisez une interface graphique de bureau comme Tour vous pouvez prendre un raccourci: il vous suffit de cliquer avec le bouton droit de la souris sur le commit indésirable et de sélectionner l'option «Supprimer…» dans le menu contextuel.)

Comme mentionné ci-dessus, Interactive Rebase a beaucoup plus de cas d'utilisation à offrir! Si vous souhaitez en savoir plus sur Interactive Rebase et ce qu'il peut faire, jetez un œil à la " First Aid Kit for Git ": une collection de vidéos courtes, utiles et gratuites, tout autour annuler les erreurs avec Git.
Utilisation de sous-modules pour gérer le code tiers
Dans le monde logiciel complexe d'aujourd'hui, il n'y a guère de projet qui n'inclut du code provenant d'autres sources: un module ou une bibliothèque de un tiers ou même de votre propre équipe. Gérer ces modules de manière élégante et pragmatique aide grandement à réduire les maux de tête!
En théorie, vous pouvez simplement copier et coller les fichiers de code nécessaires dans votre projet, puis les valider dans votre base de code. Mais cela comporte quelques inconvénients. Plus important encore, vous aurez beaucoup de mal à mettre à jour le code tiers lorsque de nouvelles versions seront disponibles. Vous devrez télécharger à nouveau le code et le copier-coller – encore et encore.
De plus, il est considéré comme une mauvaise pratique de compresser plusieurs projets (votre projet actuel et toutes les bibliothèques tierces dont vous pourriez avoir besoin) dans un dépôt unique Git. Ceci mélange du code externe avec nos propres fichiers de projet uniques.
Une bien meilleure façon de faire est d'utiliser la structure «Submodule» de Git : cela vous permet d'inclure du code tiers simplement comme un Git dépôt dans le dépôt Git de votre projet actuel. Cela signifie que toutes les bases de code restent parfaitement séparées.
L'inclusion d'un module / bibliothèque tiers est aussi simple que d'exécuter la commande Git suivante:
$ git submodule add https://github.com/djyde/ToProgress
Cette commande téléchargera un clone du référentiel Git spécifié dans votre projet. Il vous restera un référentiel Git entièrement fonctionnel et bien séparé de votre code tiers. Bien rangé, propre et flexible.
Certes, les sous-modules sont un sujet assez complexe lorsqu'il s'agit de les manipuler dans la pratique. Si vous voulez les comprendre un peu plus en détail, consultez le chapitre « Submodules » du livre en ligne gratuit «Learn Version Control with Git».
Composing Commits With Precision
There a golden règle dans le contrôle de version: un commit ne doit contenir que les changements d'un seul problème! Lorsque vous vous en tenez à cette règle, vous créez des commits faciles à comprendre. Si vous ne le faites pas – lorsque plusieurs problèmes et sujets sont entassés dans le même commit – vous infligerez le chaos sur votre base de code en un rien de temps.
En pratique, cela signifie que vous créez des commits séparés pour chacun et chaque sujet . Même s'il ne s'agit que d'une petite correction de bogue où vous ne modifiez qu'un point-virgule: c'est un sujet qui lui est propre, donc il obtient son propre commit!
Mais dans le monde réel désordonné, nous ne le faisons souvent pas travaillent sur un seul sujet à la fois. Ou nous pensons que oui, et découvrons plus tard que notre code des trois dernières heures implique en fait trois sujets différents. Cela se répercute sur des fichiers individuels: souvent, les changements dans un seul fichier appartiennent à plusieurs sujets.
C'est alors que l'ajout d'un fichier complet au prochain commit n'est plus la meilleure stratégie.
Mise en place de certaines parties de vos fichiers modifiés
Dans l'exemple ci-dessous, vous pouvez voir que nous avons actuellement deux morceaux (= parties ou zones) de modifications dans notre fichier imprint.html
:

Supposons que le premier bloc appartient à un sujet (peut-être sommes-nous en train d'unifier et de nettoyer tous les titres de page de notre projet). Et disons aussi que le deuxième morceau appartient à un autre sujet, complètement indépendant.
Un simple git add imprint.html
c'est-à-dire ajouter le fichier entier à Staging, entasserait toutes ses modifications dans le même commettre. Nos collègues auraient donc du mal à comprendre en quoi consistait réellement cet engagement. En voyant certains titres en train d'être modifiés, ils pourraient penser qu'il ne s'agissait que du «projet de nettoyage du titre», mais ils pourraient très bien ignorer les autres changements.
Heureusement, Git nous permet de sélectionner précisément les morceaux ] nous voulons mettre dans le prochain commit! Tout ce que nous avons à faire est d'ajouter l'indicateur -p
à notre commande git add
:
$ git add -p imprint.html

Git nous prend maintenant par la main et nous guide à travers chaque morceau de changements dans ce fichier. Et pour chacun, il nous pose une question simple: «Mettre en scène ce morceau?»
Tapons Y (pour «Oui») pour le premier et N pour le deuxième. Lorsque nous effectuons ensuite notre validation, seul le premier morceau de modifications sera inclus. Le second reste comme un changement local non validé dans notre copie de travail pour un commit séparé ultérieur.
Si vous utilisez Git dans une interface graphique de bureau, vous pourrez peut-être le faire directement via l'interface:

Devenir plus productif avec Git
Ce court article n'était qu'un bref aperçu de certaines des fonctionnalités avancées de Git. Mais j'espère sincèrement que cela montre que Git a tant de fonctionnalités puissantes sous le capot! De la reconstruction interactive aux sous-modules et de Reflog à l'historique des fichiers, il est avantageux d'apprendre ces fonctionnalités avancées car elles vous aident à devenir plus productif et à faire moins d'erreurs.
Si vous voulez approfondir, voici quelques-unes utiles (et gratuites). ressources:
- Git Cheat Sheet
Si vous voulez garder les commandes les plus importantes à portée de main, le «Git Cheat Sheet» pourrait être pour vous. Disponible en anglais, allemand, espagnol, portugais, arabe et chinois. - Annuler les erreurs
Git est un filet de sécurité parfait pour les situations où les choses tournent mal. Apprendre à connaître les différentes fonctionnalités «d'annulation» de Git est un temps bien dépensé pour tout développeur. Le «First Aid Kit for Git» une collection de courtes vidéos, constitue une excellente introduction.
Amusez-vous à devenir un meilleur développeur!

Source link