11.1 Branches dans git
Travailler avec les branches (branches) dans Git est un des aspects clés de la gestion de version, qui permet de gérer plusieurs lignes de développement en parallèle dans un même dépôt. Le branchement rend Git un outil puissant pour la collaboration, les expérimentations et la gestion des différentes versions d'un projet.
Vous pouvez considérer les branches dans Git comme des dossiers, où Git copie votre projet. Vous avez le dossier principal de votre projet dans votre répertoire local — master. Git peut créer des copies de ce dossier pour que vous puissiez expérimenter sans risque d'endommager le code principal, qui fonctionne bien. Ces dossiers-copie sont appelés branches — branches.
Les branches sont des variantes alternatives du code. Supposons que vous voulez retravailler quelque chose dans un grand projet ou mener une expérience dont vous n'êtes pas totalement certain. Que feriez-vous sans Git ?
Vous pourriez copier le projet dans un nouveau dossier et essayer de tout changer dedans. Si le résultat vous plaît, vous pouvez le copier dans le dossier principal. Si ça ne vous plaît pas, oubliez-le, voire supprimez-le.
Regardons un exemple de la vie réelle, par exemple écrire un livre :
- Vous avez un manuscrit du livre (branche principale).
- Vous décidez d'essayer de changer la fin (création d'une nouvelle branche).
- Vous écrivez la nouvelle fin dans un document séparé (travail dans la nouvelle branche).
- Si la nouvelle fin s'avère meilleure, vous remplacerez l'ancienne dans le manuscrit (fusion des branches).
- Vous supprimez le document avec la nouvelle fin (suppression de la branche).
11.2 Création de branches
Créer une branche dans PyCharm est très facile.
Entrez le nom de la branche.
PyCharm affichera immédiatement le nom de votre branche actuelle en haut du menu :
Qu'y avait-il avant ça ?
Auparavant, le nom de votre première et principale branche était affiché — master.
Maintenant, c'est test qui est affiché, ce qui signifie que Git (sous la direction de PyCharm) a non seulement créé une nouvelle branche, mais s'est aussi immédiatement basculé dessus.
Ajoutons du code dans le fichier main.py de la branche actuelle (test) et commettons-le.
11.3 Changement entre les branches
Étape 1. Choisir la branche.
Maintenant, faisons le switch vers notre ancienne branche. Cliquez sur le menu du haut, et que voyons-nous là ?
Pas de panique — c'est très simple :
Local — c'est la liste des branches de votre dépôt git local; il y en a deux ici :
testmaster
Remote — c'est votre dépôt distant, qui se trouve sur le serveur GitHub. Nous y avons envoyé vos modifications, mais la nouvelle branche n'y est pas, ce qui est logique. Le dépôt distant s'appelle origin, et il n'y a que la branche master.
Recent — c'est la liste des noms des dernières branches sur lesquelles vous avez travaillé. Ce point a été ajouté dans PyCharm pour plus de commodité et de rapidité.
Le nom origin/master à droite du nom du dépôt local — c'est le nom du dépôt distant, avec lequel il est actuellement synchronisé, et où les changements seront envoyés.
Étape 2. — Déploiement du code de la branche dans le dossier actuel.
Étape 3. Vérification :.
Je vois la branche (master) et l'ancien code.
11.4 Fusion des branches
Essayons maintenant de combiner le code de nos deux branches.
Étape 1. Pour commencer, ajoutons à notre projet un fichier de plus — init.py et écrivons-y du code.
- Créer le fichier init.py
- Écrire dedans le code print("Salut")
- Commettre le fichier.
Voici à quoi ressemblent mes deux fichiers dans la branche master :
Étape 2. Fusion des branches.
Fusionnons dans notre branche actuelle (master) les modifications faites dans la branche test.
Pour cela, nous utiliserons aussi le menu du haut et la commande «Merge ‘test’ into ‘master’».
Étape 3. Vérifions le résultat :.
Vérifions :
- En haut, la branche
masterest toujours affichée - Nous avons deux fichiers : init.py et main.py
- Le fichier main.py contient le code qui a été ajouté dans la branche
test.
11.5 Conflits lors de la fusion
Parfois, des conflits surviennent lors de la fusion des branches.
Si vous apportez des modifications à un même fichier dans différentes branches et que vous essayez de les fusionner, cela peut créer un conflit.
Conflit de fichiers texte
Git est un système très intelligent, il comprend les types de fichiers. Si vous apportez des modifications à différents endroits des fichiers qu'il considère comme du texte, il transférera simplement les changements d'un fichier à l'autre à l'endroit approprié, comme le ferait une personne.
Conflit de fichiers binaires
Mais si vous apportez des modifications à une image ou un document, Git ne va pas essayer de fusionner leurs parties en un seul fichier, il vous proposera simplement de choisir quelle version du fichier vous souhaitez conserver dans la branche actuelle.
Résolution manuelle des conflits :
Si vous apportez des modifications au même endroit d'un fichier texte, Git ne pourra pas fusionner correctement les différentes versions et vous proposera de le faire vous-même.
Voici à quoi cela pourrait ressembler :
Que voyez-vous ici :
- À gauche, le contenu du fichier main.py de la branche master
- À droite, le contenu du fichier main.py de la branche
test - Au milieu, PyCharm vous propose d'écrire la version finale du code (vous pouvez cliquer sur les boutons
«>>»et«<<»pour insérer automatiquement les modifications de l'un des fichiers).
J'ai opté pour la version master et ai ajusté le code manuellement. Voici ce que j'ai obtenu.
11.6 Historique des modifications
Autre point utile et intéressant : vous pouvez consulter l'historique des modifications d'un fichier quelconque, en cliquant sur le bouton Show History. Il y a deux endroits où elle peut se trouver — trouvez-la.
Voici à quoi ressemble l'historique des modifications pour le fichier main.py chez moi :
Explications :
- À gauche, vous voyez l'historique des modifications pour un fichier précis :
- Plus la modification est récente, plus elle est en haut; plus elle est ancienne — plus elle est en bas.
- Ici s'affiche aussi l'historique des fusions de branches.
- À droite — les changements qui ont été apportés lors d'un commit spécifique.
GO TO FULL VERSION