Git - Branches distantes (2024)

Les références distantes sont des références (pointeurs) dans vos référentiels distants, y compris les branches, les balises, etc. Vous pouvez obtenir une liste complète et détaillée des références distantes en suivant les instructionsgit ls-remote ougit remote show run, pour les branches distantes, et plus d'informations. Cependant, l'approche la plus courante consiste à utiliser des branches de suivi à distance.

Les branches de suivi à distance sont des références à l'état des branches distantes. Ce sont des références locales que vous ne pouvez pas modifier manuellement, elles sont modifiées automatiquement dès que vous effectuez une communication réseau. Considérez-les comme des signets qui vous rappellent où se trouvaient les branches de vos référentiels distants la dernière fois que vous vous y êtes connecté.

Les noms des succursales de suivi à distance sont de la forme/.Par exemple, si vous voulez savoir comment la branchemaîtredans votre référentielorigineressemblait à la dernière fois que vous avez eu un contact avec lui, alors vous vous ramifiiezorigine/maîtreSi vous avez travaillé avec un collaborateur sur un problème et qu'il en a déjà uniss53succursale, vous pouvez avoir votre propreiss53Bifurquer; mais la branche sur le serveur pointerait vers la branche de suivi à distanceorigine/iss53montrer.

Cela peut être un peu déroutant, alors regardons un exemple. Supposons que vous ayez un serveur git sur votre réseau avec l'adressegit.notreentreprise.com.Si vous clonez à partir de ceci, le serveur obtiendra de l'instruction gitclonerautomatiquement le nomorigine, télécharge toutes ses données, crée un pointeur vers le commit que sonmaîtreLa branche l'affiche et la nomme localementorigine/maître.Git vous donne également votre propre localmaîtreBranche avec la même position de départ que leorigine/maîtreBranchez-vous pour avoir un endroit où commencer votre travail.

annotation

"origine" n'a rien de spécial

Tout comme le nom de branche "master" n'a pas de signification particulière dans Git, "origin" n'a pas non plus de signification particulière. Tandis que "master" est le nom par défaut d'une branche initiale lorsque vous utilisez l'instructiongit init, qui est la seule raison pour laquelle il est si largement utilisé, "origine" est utilisé comme étiquette de référentiel distant par défaut lorsque vous exécutez l'instructionclone gitSi vous utilisez l'instruction à la placegit clone - vous booyahcourez, vous obtenezbooyah/maîtreals Standard-Remote-Branch.

Git - Branches distantes (1)

Figure 30. Référentiels distants et locaux après clonage

Si vous êtes un peu à votre localmaîtreLa branche travaille et pendant ce temps quelqu'un d'autre fait quelque chosegit.notreentreprise.comtélécharge et avec elle sonmaîtreBranche mise à jour, alors vos historiques avanceront différemment. Et tant que vous n'êtes pas en contact avec votreorigineRamassez le serveur, vos mouvementsorigine/maîtrepointeur non.

Git - Branches distantes (2)

Figure 31. Les modifications locales et distantes peuvent diverger

Pour synchroniser votre travail avec une télécommande spécifique, exécutez la commandegit fetch off (dans notre casgit récupérer l'origine).La commande recherche quel serveur est "origine" (dans ce casgit.notreentreprise.com), récupère toutes les données que vous ne possédez pas déjà et met à jour votre base de données locale en utilisant votreorigine/maîtreLe pointeur s'est déplacé vers sa nouvelle position, plus actuelle.

Git - Branches distantes (3)

Figure 32.git cherchermet à jour vos agences de suivi à distance

Pour illustrer la gestion de plusieurs serveurs distants et pour voir à quoi ressemblent les branches distantes sur ces projets distants, supposons que vous disposez d'un autre serveur Git interne utilisé par l'une de vos équipes de sprint uniquement pour le développement.git.team1.ourcompany.com.Vous pouvez l'ajouter au projet sur lequel vous travaillez actuellement en tant que nouveau serveur distant en utilisant la directivegit remote ajouterexécuter comme nous l'avons fait au chapitre 2Les bases de Gitont traité. Nous appelons ce serveur distantéquipe un, qui sera le raccourci pour l'URL entière.

Git - Branches distantes (4)

Figure 33. Ajout d'un autre serveur distant

Maintenant vous pouvez avec la déclarationgit chercher teamonerécupérez tout ce que vous n'avez pas déjà sur le serveur. Étant donné que ce serveur ne contient qu'un sous-ensemble des données qui se trouvent actuellement sur le vôtreorigineserveur, Git ne récupère pas les données, mais il crée une branche distanteteamone/maîtrepour qu'il pointe vers le commit quiéquipe uncomme sonmaîtreChapeau de branche.

Git - Branches distantes (5)

Figure 34. Branche de suivi à distance pourteamone/maître

Pousser/Hochladen

Si vous souhaitez partager une branche avec le monde, vous devez la télécharger sur un serveur distant sur lequel vous disposez d'une autorisation d'écriture. Vos branches locales sur lesquelles vous écrivez ne sont pas automatiquement synchronisées avec les télécommandes - vous devez pousser explicitement les branches que vous souhaitez partager. De cette façon, vous pouvez utiliser des branches privées sur lesquelles vous ne souhaitez pas publier et ne pousser que les branches thématiques auxquelles vous souhaitez contribuer.

Si vous avez une succursale nomméeserveurfixSi vous avez quelque chose sur lequel vous voulez travailler avec d'autres, vous pouvez le télécharger de la même manière que vous avez téléchargé votre première branche.git push hors de:

$ git push origin serverfixComptage d'objets : 24, terminé.Compression delta utilisant jusqu'à 8 threads.Compression d'objets : 100 % (15/15), terminé.Écriture d'objets : 100 % (24/24), 1,91 Kio | 0 octets/s, terminé.Total 24 (delta 2), réutilisé 0 (delta 0)Vers https://github.com/schacon/simplegit * [nouvelle branche] serverfix -> serverfix

C'est une sorte d'abréviation. Git développe le nom de la brancheserveurfixautomatiquement àrefs/heads/serverfix:refs/heads/serverfix, ce qui signifie "Utiliser ma branche localeserveurfixet utilisez-le pour mettre à jourserveurfixBranche sur mon serveur distant". Nous ferons la partierefs/têtes/au chapitre 10Git Interneplus loin, mais vous pouvez généralement l'omettre. Vous pouvez également utiliser l'instructiongit push origin serverfix:serverfixexécuter, qui fait la même chose - cela signifie "Prends le mienserveurfixet lui faireserveurfixdu serveur distant". Vous pouvez également utiliser ce format pour pousser une branche locale vers une branche distante avec un nom différent. Si vous ne vouliez pas qu'elle soit sur laserveurfixest appelé, vous pouvez utiliser à la placegit push origin serverfix:awesomebranchcourir à votre localserveurfixBranche sur lesuperbranchePousser la branche dans le projet distant.

annotation

Ne ressaisissez pas votre mot de passe à chaque fois

Si vous utilisez une URL HTTPS pour pousser, le serveur Git vous demandera votre nom d'utilisateur et votre mot de passe pour l'authentification. Par défaut, le terminal vous demandera ces informations afin que le serveur puisse voir si vous êtes autorisé à pousser.

Si vous ne voulez pas le taper à chaque fois que vous téléchargez quelque chose, vous pouvez configurer un cache d'informations d'identification. Le moyen le plus simple consiste à conserver les informations en mémoire pendant quelques minutes, ce que vous pouvez facilement faire avec l'instructiongit config --global credential.helper cachepeut accomplir.

Voir le chapitre 7 pour plus d'informations sur les différentes options de cache d'informations d'identification disponiblesMise en cache des informations d'identification.

La prochaine fois qu'un de vos collaborateurs récupère des données sur le serveur, cela devient une référence à la version serveur de la brancheserveurfixsous la branche distanteorigine/fixe du serveurrecevoir:

$ git fetch originremote : Comptage d'objets : 7, done.remote : Compression d'objets : 100 % (2/2), done.remote : Total 3 (delta 0), réutilisé 3 (delta 0).

Il est important de réaliser que lorsque vous récupérez que de nouvelles branches de suivi à distance sont téléchargées, vous n'en avez pas automatiquement des copies locales modifiables. En d'autres termes, vous n'avez pas de nouvelle branche dans ce cas.serveurfix– Vous n'avez qu'un seul pointeurorigine/fixe du serveur, que vous ne pouvez pas modifier.

Pour incorporer ces modifications dans votre branche de travail actuelle, vous pouvez utiliser l'instructiongit merge origin/serverfixcourir. Si vous faites votre propreserveurfixSi vous souhaitez qu'une branche fonctionne, vous pouvez la baser sur votre branche de suivi à distance :

$ git checkout -b serverfix origin/serverfixBranch serverfix mis en place pour suivre la branche distante serverfix depuis origin.Passé à une nouvelle branche 'serverfix'

Cela vous donne une branche locale sur laquelle travailler, en commençant là oùorigine/fixe du serveurse tient actuellement.

Suivi-Branches

L'extraction d'une branche locale à partir d'une branche distante génère automatiquement ce qu'on appelle une "branche de suivi" (ou parfois une "branche en amont"). Les branches de suivi sont des branches locales qui ont une relation directe avec une branche distante. Si vous êtes sur une branche de suivi etgit tirerentrez, Git sait automatiquement à partir de quel serveur les données doivent être récupérées et dans quelle branche elles doivent circuler.

Lorsque vous clonez un dépôt, unmaîtreBranche créée quiorigine/maîtreCependant, vous pouvez également créer d'autres branches de suivi si vous le souhaitez - qui suivent les branches sur d'autres télécommandes. Le cas le plus simple est l'exemple que vous venez de voir, en exécutant l'instructiongit checkout -b /.Il s'agit d'une opération courante, abréviation de Git--pistefournit :

$ git checkout --track origin/serverfixBranch serverfix mis en place pour suivre la branche distante serverfix depuis origin. Basculé vers une nouvelle branche 'serverfix'

En fait, c'est tellement utilisé qu'il y a même une abréviation pour cette abréviation. Si le nom de la branche que vous voulez utiliser pour extraire (a) n'existe pas, et (b) correspond exactement à un nom sur une seule télécommande, Git crée une branche de suivi pour vous :

$ git checkout serverfixBranch serverfix configuré pour suivre la branche distante serverfix depuis l'origine.Basculé vers une nouvelle branche 'serverfix'

Pour configurer une branche locale avec un nom différent de la branche distante, vous pouvez utiliser la première version avec un nom de branche locale différent :

$ git checkout -b sf origin/serverfixBranch sf configuré pour suivre la branche distante serverfix depuis origin.Basculé vers une nouvelle branche 'sf'

Maintenant votre succursale localenf.automatiquement deorigine/fixe du serveurtiré

Si vous avez déjà une branche locale et que vous souhaitez la faire pointer vers une branche distante que vous venez de récupérer (extraire), ou si vous souhaitez modifier la branche en amont que vous contrôlez, vous pouvez utiliser l'option-uou--set-amont-versavecbranche gitUtilisez pour les définir explicitement à tout moment.

$ git branch -u origin/serverfixBranch serverfix mis en place pour suivre la branche distante serverfix depuis l'origine.

annotation

abréviation en amont

Une fois que vous avez configuré une branche de suivi, vous pouvez accéder à sa branche en amont avec le raccourci@{en amont}ou@{u}référence. Donc, si vous êtes sur lemaîtreBranche sont et ilorigine/maîtreversionné, vous pouvez si vous voulez quelque chose commegit merge @{u}au lieu degit fusionner origine/maîtreutiliser.

Si vous souhaitez voir les branches de suivi que vous avez configurées, vous pouvez utiliser la déclarationbranche gitavec l'option-vvCela répertorie vos branches locales avec plus d'informations, y compris ce que chaque branche contrôle/suivi et si votre branche locale est en avance, en retard ou les deux.

$ git branch -vv iss53 7e424c3 [origin/iss53: ahead 2] Ajouter des crochets oubliés master 1ae2a45 [origin/master] Déployer index fix* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] Cela devrait le faire tester 5ea463a Essayez quelque chose de nouveau

Nous pouvons donc voir ici que notreiss53Branchez la brancheorigine/iss53tracé et l'information "ahead 2" signifie que nous avons deux commits locaux qui n'ont pas encore été téléchargés sur le serveur. Nous pouvons également voir que notremaîtreBifurquerorigine/maîtresuivis et à jour. Ensuite, nous voyons que notreserveurfixBranchez la brancheserveur-réparer-bonsur notre serveuréquipe unversioned et "devant 3, derrière 1" signifie qu'il y a un commit sur le serveur que nous n'avons pas encore fusionné, et trois commits locaux que nous n'avons pas encore poussés. Enfin, nous pouvons voir que notreessaibranch ne suit pas du tout une branche distante.

Il est important de noter que ces nombres décrivent l'état lorsque vous avez récupéré les données du serveur pour la dernière fois. Cette directive n'accède pas aux serveurs, elle renvoie simplement les informations qui ont été mises en cache localement lorsque le serveur a été contacté pour la dernière fois. Si vous voulez des nombres entièrement à jour "en avant" et "en retard", vous devez récupérer les données de tous vos serveurs distants juste avant d'exécuter la directive. Vous pouvez le faire comme ceci :

$ git chercher --all; branche git -vv

extraction/téléchargement

Lors de la déclarationgit chercherrécupèrera toutes les modifications sur le serveur que vous n'avez pas actuellement, mais rien ne changera du tout dans votre répertoire de travail. Il récupérera simplement les données pour vous et vous laissera faire la fusion. Cependant, il existe des instructionsgit tirer, qui est essentiellement ungit chercherest, qui dans la plupart des cas est instantanégit fusionnerSi vous avez configuré une branche de suivi comme indiqué dans la dernière section, soit en la définissant explicitement, soit en utilisant les commandesclonerouvérifieront créé pour vous, puis recherchegit tireraprès le serveur et la branche versionnée, se branche sur votre branche actuelle, extrait de ce serveur, puis tente de fusionner cette branche distante.

En règle générale, il est préférable de simplement indiquer explicitement les instructionsgit chercheretgit fusionnerà utiliser comme la magie de l'instructiongit tirerpeut souvent prêter à confusion.

Supprimer les branches distantes

Imaginons que vous en ayez fini avec votre succursale distante - vous et vos collaborateurs en avez terminé avec une nouvelle fonctionnalité et l'avez dans la succursalemaîtredu serveur distant (ou de la branche dans laquelle se trouve votre code stable). Vous pouvez supprimer une branche distante en utilisant l'instructiongit pousseravec l'option--supprimercourir.Si votreserveurfixbranche à partir du serveur, exécutez l'instruction suivante :

$ git push origin --delete serverfixTo https://github.com/schacon/simplegit - [supprimé] serverfix

Fondamentalement, cela ne fait que supprimer le pointeur du serveur. Le serveur Git y conserve généralement les données pendant un certain temps jusqu'à ce qu'un ramasse-miettes s'exécute. Ainsi, s'ils ont été accidentellement supprimés, il est souvent facile de les récupérer.

précédent|suivant

Git - Branches distantes (2024)
Top Articles
Latest Posts
Article information

Author: Kelle Weber

Last Updated:

Views: 5331

Rating: 4.2 / 5 (53 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Kelle Weber

Birthday: 2000-08-05

Address: 6796 Juan Square, Markfort, MN 58988

Phone: +8215934114615

Job: Hospitality Director

Hobby: tabletop games, Foreign language learning, Leather crafting, Horseback riding, Swimming, Knapping, Handball

Introduction: My name is Kelle Weber, I am a magnificent, enchanting, fair, joyous, light, determined, joyous person who loves writing and wants to share my knowledge and understanding with you.