GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment fonctionne Git ?

Présentation

Git est le système de contrôle de version décentralisé le plus populaire au monde. Avoir une bonne compréhension de Git est essentiel si vous souhaitez coder et travailler sur un projet de développement logiciel collaboratif.

Dans cet article, vous apprendrez comment fonctionne Git et comment utiliser ses fonctions cruciales.

Prérequis

  • Git installé et configuré (voir comment installer Git sur Windows, installer Git sur Mac, installer Git sur Ubuntu, installer Git sur CentOS 7 ou installer Git sur CentOS 8)

Comment fonctionne Git ?

Git permet aux utilisateurs de suivre les modifications de code et de gérer leur projet à l'aide de commandes simples.

Le cœur de Git est un dépôt utilisé pour contenir un projet. Un référentiel peut être stocké localement ou sur un site Web, tel que GitHub. Git permet aux utilisateurs de stocker plusieurs référentiels différents et de suivre chacun indépendamment.

Tout au long du développement, le projet a plusieurs points de sauvegarde, appelés commits . L'historique des commits contient tous les commits, c'est-à-dire les changements implémentés dans le projet pendant le développement. Un commit vous permet de revenir en arrière ou d'avancer rapidement le code vers n'importe quel commit dans l'historique des commits.

Git utilise des hachages SHA-1 pour faire référence aux commits. Chaque hachage unique pointe vers un commit particulier dans le référentiel. À l'aide de hachages, Git crée une structure arborescente pour stocker et récupérer facilement des données.

Les fichiers de chaque projet Git passent par plusieurs étapes :

  • Répertoire de travail . Fichiers modifiés, mais non suivis et pas encore prêts pour la validation.
  • Répertoire intermédiaire . L'ajout de fichiers modifiés à l'environnement de staging signifie qu'ils sont prêts pour la validation.
  • Engagé . Instantanés des fichiers de la zone de préparation enregistrés dans l'historique des validations.

Le schéma suivant montre le flux de travail Git de base :

Les sections suivantes expliquent en détail les fonctions de Git.

Mise en scène

Lorsque vous souhaitez que Git suive les modifications que vous avez apportées à un certain fichier, vous devez l'ajouter à la zone de staging. Git reconnaît quand vous modifiez un fichier mais ne le suit pas à moins que vous ne le mettiez en scène . La zone de préparation représente une couche de sécurité, vous permettant d'examiner les modifications avant de les valider.

Être dans la zone de préparation est une condition préalable pour que les fichiers soient ultérieurement validés, c'est-à-dire implémentés sur la branche principale. Vous pouvez vérifier quels fichiers Git suit en exécutant :

git status

Pour ajouter un fichier à la zone de préparation, utilisez la syntaxe suivante :

git add [filename]

Remplacez le [filename] syntaxe avec le nom réel du fichier.

Par exemple :

Si vous changez d'avis, vous pouvez supprimer un fichier de la zone de préparation. Pour déclasser un fichier, utilisez la syntaxe suivante :

git rm --cached [filename]

Par exemple :

Faire des commits

Un commit représente un point de sauvegarde pour votre travail, un instantané de votre code à un moment donné. L'ajout de fichiers à la zone de préparation signifie qu'ils sont prêts à être validés.

Pour vérifier si vous avez des fichiers prêts à être validés, exécutez :

git status

Par exemple :

Ici, nous voyons que trois fichiers sont prêts à être validés. Pour les valider, utilisez la syntaxe suivante :

git commit -m "Notes about the commit"

Chaque commit doit avoir une description spécifiée après le -m flag, qui vous aidera plus tard à savoir de quoi il s'agissait.

Par exemple :

La sortie contient le commit et indique ce qui a été modifié.

Vous pouvez vérifier votre historique des commits en lançant :

git log

La sortie affiche un journal de tous les commits que vous avez effectués, qui a fait le commit, la date et les notes de commit. Ajout du --oneline flag affiche l'historique des commits condensé sur une ligne. L'omission de l'indicateur affiche un historique détaillé des commits.

Rétablir

Si vous avez fait des erreurs lors du développement de votre projet ou si vous souhaitez annuler un commit pour une raison quelconque, git revert vous permet de le faire.

Le git revert La commande annule un commit particulier, c'est-à-dire qu'elle annule le commit que vous avez effectué pour supprimer les modifications de la branche master.

La syntaxe est :

git revert [commit_ID]

Trouvez les ID de validation en exécutant git log . Le code à 7 caractères est l'ID de validation.

L'exemple suivant illustre le git revert commande :

Le git reset commande en permanence vous ramène à un certain stade du développement. Tous les fichiers et modifications ajoutés après ce moment sont annulés si vous souhaitez les ajouter à nouveau.

Avertissement : Utilisez git reset uniquement si vous êtes absolument sûr de vouloir annuler/supprimer des parties de votre code, car cette action est irréversible.

La syntaxe est :

git reset [commit_ID]

Spécifier le --hard flag supprime les fichiers non préparés, ce qui rend impossible leur restauration.

Bifurquer

Un fork est une copie complète d'un dépôt existant qui vous permet d'apporter des modifications et d'expérimenter sans affecter le projet d'origine. La bifurcation est un moyen pour quelqu'un de proposer des modifications à un projet existant, ou cela peut être un point de départ pour votre propre projet si le code est open source.

Si vous souhaitez proposer une modification ou une correction de bogue pour un projet, vous pouvez dupliquer un référentiel, effectuer la correction et envoyer une demande d'extraction au propriétaire du projet.

Le schéma suivant illustre le fonctionnement du fork :

Pour dupliquer un dépôt, suivez les étapes ci-dessous :

1. Connectez-vous à votre compte GitHub.

2. Visitez la page du référentiel sur GitHub et cliquez sur Fork option.

3. Attendez la fin du processus de fork. Une fois terminé, vous aurez une copie du référentiel sur votre compte GitHub.

4. L'étape suivante consiste à prendre l'URL du référentiel du Code et clonez le référentiel sur votre ordinateur local.

5. Clonez le référentiel en utilisant la syntaxe suivante :

git clone [repository URL]

Saisissez l'URL à la place de [repository URL] syntaxe.

Par exemple :

Dans cet exemple, nous avons créé un fork du springmvc-raml-plugin référentiel, et maintenant nous sommes libres d'implémenter nos modifications ou de commencer à créer un nouveau plugin par-dessus celui existant.

Branchement

La création de branches est une fonctionnalité de Git qui permet aux développeurs de travailler sur une copie du code original pour corriger des bogues ou développer de nouvelles fonctionnalités. En travaillant sur une branche, les développeurs n'affectent pas la branche principale jusqu'à ce qu'ils veuillent mettre en œuvre les modifications.

La branche master représente généralement la version stable de votre code, qui est publié ou publié. C'est pourquoi vous devez éviter d'ajouter de nouvelles fonctionnalités et du nouveau code à la branche principale si elles sont instables.

La création de branches crée un environnement isolé pour essayer les nouvelles fonctionnalités, et si vous les aimez, vous pouvez les fusionner dans la branche master. En cas de problème, vous pouvez supprimer la branche et la branche principale reste intacte.

La création de branches facilite la programmation collaborative et permet à chacun de travailler simultanément sur sa partie du code.

Le diagramme suivant est une représentation visuelle de la création de branches dans Git :

La syntaxe pour créer une nouvelle branche dans Git est :

git branch [branch-name]

Entrez un nom pour votre succursale à la place du [branch-name] syntaxe. Par exemple :

Dans cet exemple, nous avons créé une nouvelle branche nommée feature-1 .

Fusion et conflits

La git merge La commande permet aux développeurs travaillant sur une nouvelle fonctionnalité ou un correctif de bogue sur une branche distincte de fusionner leurs modifications avec la branche principale une fois qu'elles ont terminé. Fusionner les modifications signifie les implémenter dans la branche principale.

Les développeurs peuvent saisir leurs modifications à l'aide de git merge sans avoir à envoyer leur travail à tous ceux qui travaillent sur le projet.

Pour voir vos branches existantes, exécutez :

git branch -a

Pour ce tutoriel, nous avons créé une branche distincte nommée feature-1 . Pour fusionner le feature-1 branche avec le maître succursale, suivez les étapes ci-dessous :

1. Basculez vers la branche master. La git merge La commande nécessite que vous soyez sur la branche de réception de la fusion. Exécutez la commande suivante pour basculer vers la branche master :

git checkout master

2. Après être passé à la branche principale, utilisez la syntaxe suivante pour fusionner vos modifications :

git merge [branch-name]

Saisissez le nom de votre agence à la place du [branch-name] syntaxe.

Par exemple :

Git entre automatiquement vos modifications dans la branche master, visible par toute personne travaillant sur le projet.

Cependant, vous pouvez parfois rencontrer merge conflits .

Par exemple, un conflit se produit si quelqu'un décide de faire des modifications sur la branche principale pendant que vous travaillez sur une autre branche. Ce type de conflit se produit parce que vous souhaitez fusionner vos modifications avec la branche principale, qui est désormais différente de votre copie de code.

Notre guide détaillé propose plusieurs méthodes différentes pour résoudre les conflits de fusion dans Git.

Récupérer/extraire les modifications

Le git fetch et git pull Les commandes sont toutes deux utilisées pour récupérer les modifications du référentiel distant.

La différence est que git fetch récupère uniquement les métadonnées du référentiel distant mais ne transfère rien à votre référentiel local. Il vous permet uniquement de savoir s'il y a des modifications disponibles depuis votre dernier pull.

Dans l'exemple suivant, git fetch nous informe qu'il y a quelques changements dans le dépôt distant, mais rien n'a changé dans le dépôt local :

D'autre part, git pull vérifie également toute nouvelle modification dans le référentiel distant et apporte ces modifications à votre référentiel local.

Alors, git pull fait deux choses avec une seule commande - un git fetch , et une git merge . La commande télécharge les modifications apportées à votre branche actuelle et met à jour le code dans votre référentiel local.

Par exemple :

Dans cette sortie, nous voyons qu'il s'agissait d'un type de fusion rapide et que Git a extrait un fichier vers le référentiel local - README.md .

Pousser des modifications

Le git push la commande fait le contraire de git pull , vous permettant de partager vos modifications et de les publier dans le référentiel distant.

Lorsque vous apportez des modifications localement et que vous souhaitez les transférer vers un référentiel distant, exécutez :

git push

Par exemple :

Si vous avez créé une nouvelle branche localement, qui n'existe pas à distance, la commande renvoie une erreur en essayant de pousser les modifications :

Git propose la solution dans la sortie. Exécutez la commande spécifiée dans la sortie pour pousser votre branche en amont :

Rebase

Lorsque vous créez une branche, Git crée une copie du code existant pour que vous puissiez le développer davantage. Parfois, vous devrez peut-être intégrer de nouveaux changements depuis la branche master suivre le développement général.

Le rebasage implique la mise en œuvre de nouvelles modifications de la branche principale dans votre branche de fonctionnalité. Cela signifie que Git rejoue les nouvelles modifications à partir de la branche principale, en créant des commits au-dessus de la pointe de votre branche de fonctionnalité.

Suivez ces étapes pour rebaser votre branche de fonctionnalités :

1. Accédez à la branche de fonctionnalités à l'aide de git checkout . La syntaxe est :

git checkout [branch-name]

2. Exécutez la commande suivante pour rebaser votre branche :

git rebase master

Le diagramme suivant montre comment fonctionne la fonction de rebase :


Ubuntu
  1. Qu'est-ce que NGINX ? Comment ça marche?

  2. Comment fonctionne Awk '!a[$0]++' ?

  3. Comment fonctionne le Sticky Bit ?

  4. Ssh – Comment Tcp-keepalive fonctionne-t-il dans Ssh ?

  5. Comment fonctionne Sanlock dans la virtualisation RedHat

Qu'est-ce que le DNS inversé et comment ça marche ?

Comment fonctionne SFTP ?

Git Revert Commit :Comment annuler le dernier commit

Comment annuler le dernier commit dans Git

Qu'est-ce que Docker ? Comment ça marche?

Comment fonctionne la mémoire d'échange sous Linux ?