Git - Branches distantes (2023)

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 des références distantes explicitement avecgit ls-remote , ougit remote show pour les succursales distantes ainsi que plus d'informations. Néanmoins, un moyen plus courant consiste à profiter des succursales 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 déplacer. Git les déplace pour vous chaque fois que vous effectuez une communication réseau, pour vous assurer qu'ils représentent avec précision l'état du référentiel distant. Considérez-les comme des signets, pour vous rappeler 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 prennent la forme/.Par exemple, si vous vouliez voir ce quemaîtresuccursale sur votreoriginetélécommande ressemblait à la dernière fois que vous avez communiqué avec elle, vous vérifieriez leorigine/maîtrebranche. Si vous travailliez sur un problème avec un partenaire et qu'il a soulevé uneiss53succursale, vous pourriez avoir votre propreiss53branche, mais la branche sur le serveur serait représentée par la branche de suivi à distanceorigine/iss53.

Cela peut être un peu déroutant, alors regardons un exemple. Disons que vous avez un serveur Git sur votre réseau àgit.notreentreprise.com.Si vous clonez à partir de ceci, Gitclonerla commande le nomme automatiquementoriginepour vous, extrait toutes ses données, crée un pointeur vers l'endroit oùmaîtrebranche est, et la nommeorigine/maîtrelocal.Git vous donne également votre propremaîtresuccursale commençant au même endroit que l'originemaîtrebranche, vous avez donc quelque chose à partir de quoi travailler.

Note

"origine" n'est pas spécial

Tout comme le nom de branche "master" n'a pas de signification particulière dans Git, "origin" non plus. Tandis que "master" est le nom par défaut d'une branche de démarrage lorsque vous exécutezgit initqui est la seule raison pour laquelle il est largement utilisé, "origine" est le nom par défaut d'une télécommande lorsque vous exécutezclone git.Si vous courezgit clone - vous booyahà la place, vous aurez alorsbooyah/maîtrecomme votre branche distante par défaut.

Git - Branches distantes (1)

Figure 30. Serveur et référentiels locaux après clonage

Si vous effectuez des travaux sur votre localmaîtrebranche, et, entre-temps, quelqu'un d'autre pousse àgit.notreentreprise.comet met à jour sonmaîtrebranche, alors vos historiques avancent différemment. De plus, tant que vous restez hors de contact avec votreorigineserveur, votreorigine/maîtrele pointeur ne bouge pas.

Git - Branches distantes (2)

Figure 31. Le travail local et à distance peuvent diverger

Pour synchroniser votre travail avec une télécommande donnée, vous lancez unegit fetch commande (dans notre cas,git récupérer l'origine).Cette commande recherche quelle est "l'origine" du serveur (dans ce cas, il s'agitgit.notreentreprise.com), récupère toutes les données que vous ne possédez pas encore et met à jour votre base de données locale, en déplaçant votreorigine/maîtrepointeur vers sa nouvelle position plus à jour.

Git - Branches distantes (3)

Figure 32.git cherchermet à jour vos agences de télésuivi

Pour démontrer la présence de plusieurs serveurs distants et à quoi ressemblent les branches distantes de ces projets distants, supposons que vous disposiez d'un autre serveur Git interne utilisé uniquement pour le développement par l'une de vos équipes de sprint.Ce serveur est àgit.team1.ourcompany.com.Vous pouvez l'ajouter en tant que nouvelle référence distante au projet sur lequel vous travaillez actuellement en exécutant legit remote ajoutercommande comme nous l'avons couvert dansBases de Git.Nommez cette télécommandeéquipe un, qui sera votre nom abrégé pour toute cette URL.

Maintenant, vous pouvez courirgit chercher teamonepour aller chercher tout la télécommandeéquipe unserveur a ce que vous n'avez pas encore.Parce que ce serveur a un sous-ensemble des données que votreorigineserveur a actuellement, Git ne récupère aucune donnée mais définit une branche de suivi à distance appeléeteamone/maîtrepour pointer vers le commit quiéquipe una pourmaîtrebifurquer.

Git - Branches distantes (5)

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

Pousser

Lorsque vous souhaitez partager une branche avec le monde, vous devez la pousser vers une télécommande à laquelle vous avez un accès en écriture. Vos branches locales ne sont pas automatiquement synchronisées avec les télécommandes sur lesquelles vous écrivez — vous devez pousser explicitement les branches que vous souhaitez partager. De cette façon, vous pouvez utiliser des branches privées pour le travail que vous ne souhaitez pas partager et ne pousser que les branches thématiques sur lesquelles vous souhaitez collaborer.

Si vous avez une succursale nomméeserveurfixsur lequel vous voulez travailler avec d'autres, vous pouvez le pousser vers le haut de la même manière que vous avez poussé votre première branche.Rungit push :

$ 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 un peu un raccourci. Git développe automatiquement leserveurfixnom de la branche versrefs/heads/serverfix:refs/heads/serverfix, ce qui signifie : « Prends monserveurfixbranche locale et poussez-la pour mettre à jour la télécommandeserveurfixbranche. "Nous allons passer en revue larefs/têtes/partie en détail dansLes composants internes de Git, mais vous pouvez généralement le laisser désactivé. Vous pouvez également le fairegit push origin serverfix:serverfix, qui fait la même chose  —  il dit : "Prenez mon correctif de serveur et faites-en le correctif de serveur distant." Vous pouvez utiliser ce format pour pousser une branche locale dans une branche distante qui porte un nom différent.serveurfixsur la télécommande, vous pouvez à la place exécutergit push origin serverfix:awesomebranchpour pousser votre localserveurfixbranche à lasuperbranchebranche sur le projet distant.

Note

Ne tapez 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, il vous demandera ces informations sur le terminal afin que le serveur puisse dire si vous êtes autorisé à pousser.

Si vous ne voulez pas le taper à chaque fois que vous appuyez dessus, vous pouvez configurer un "cache d'informations d'identification". Le plus simple consiste simplement à le conserver en mémoire pendant quelques minutes, ce que vous pouvez facilement configurer en exécutantgit config --global credential.helper cache.

Pour plus d'informations sur les différentes options de mise en cache des informations d'identification disponibles, consultezStockage des identifiants.

La prochaine fois qu'un de vos collaborateurs ira chercher sur le serveur, il obtiendra une référence à l'endroit où la version du serveur deserveurfixest sous la branche distanteorigine/fixe du serveur:

$ 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 noter que lorsque vous effectuez une récupération qui fait apparaître de nouvelles branches de suivi à distance, vous n'en avez pas automatiquement des copies locales modifiables. En d'autres termes, dans ce cas, vous n'avez pas de nouveauserveurfixbranche — vous n'avez qu'uneorigine/fixe du serveurpointeur que vous ne pouvez pas modifier.

Pour fusionner ce travail dans votre branche de travail actuelle, vous pouvez exécutergit merge origin/serverfix.Si vous voulez le vôtreserveurfixbranche sur laquelle vous pouvez travailler, 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 vous pouvez travailler et qui commence là oùorigine/fixe du serveurest.

Suivi des succursales

L'extraction d'une branche locale à partir d'une branche de suivi à distance crée automatiquement ce qu'on appelle une "branche de suivi" (et la branche qu'elle suit est appelée 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 et tapezgit tirer, Git sait automatiquement sur quel serveur aller chercher et dans quelle branche fusionner.

Lorsque vous clonez un référentiel, il crée généralement automatiquement unmaîtrebranche qui suitorigine/maître.Cependant, vous pouvez configurer d'autres branches de suivi si vous le souhaitez — celles qui suivent les branches sur d'autres télécommandes, ou ne suivent pas lemaîtrebranche. Le cas simple est l'exemple que vous venez de voir, en cours d'exécutiongit checkout -b /.C'est une opération assez courante pour que Git fournisse--pistesténographie:

$ 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 si courant qu'il existe même un raccourci pour ce raccourci. Si le nom de la branche que vous essayez de vérifier (a) n'existe pas et (b) correspond exactement à un nom sur une seule télécommande, Git créera 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 facilement 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.tirera automatiquement deorigine/fixe du serveur.

Si vous avez déjà une branche locale et que vous souhaitez la définir sur une branche distante que vous venez de supprimer, ou si vous souhaitez modifier la branche en amont que vous suivez, vous pouvez utiliser le-uou--set-amont-verspossibilité debranche gitpour le définir explicitement à tout moment.

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

Note

Sténographie en amont

Lorsque vous avez configuré une branche de suivi, vous pouvez référencer sa branche en amont avec le@{en amont}ou@{u}sténographie.Donc, si vous êtes sur lemaîtresuccursale et son suiviorigine/maître, vous pouvez dire quelque chose commegit merge @{u}au lieu degit fusionner origine/maîtresi vous le souhaitez.

Si vous voulez voir quelles branches de suivi vous avez configurées, vous pouvez utiliser le-vvpossibilité debranche gitCela répertoriera vos succursales locales avec plus d'informations, y compris ce que chaque succursale suit et si votre succursale 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 notreiss53la branche suitorigine/iss53et est "en avance" de deux, ce qui signifie que nous avons deux commits localement qui ne sont pas poussés vers le serveur. Nous pouvons également voir que notremaîtrela branche suitorigine/maîtreet est à jour. Ensuite, nous pouvons voir que notreserveurfixla succursale suitserveur-réparer-bonsuccursale sur notreéquipe unserveur et est en avance de trois et en retard d'un, ce qui signifie qu'il y a un commit sur le serveur dans lequel nous n'avons pas encore fusionné et trois commits locaux que nous n'avons pas poussés. Enfin, nous pouvons voir que notreessaibranch ne suit aucune branche distante.

Il est important de noter que ces numéros ne datent que de la dernière fois que vous avez récupéré de chaque serveur. Cette commande ne parvient pas aux serveurs, elle vous indique ce qu'elle a mis en cache localement à partir de ces serveurs. Si vous voulez être totalement à jour en avant et en arrière, vous devrez récupérer toutes vos télécommandes juste avant d'exécuter ceci. Vous pouvez le faire comme ceci :

$ git chercher --all; branche git -vv

Tirant

Tandis que legit chercherrécupèrera toutes les modifications sur le serveur que vous n'avez pas encore, elle ne modifiera pas du tout votre répertoire de travail. Elle obtiendra simplement les données pour vous et vous permettra de les fusionner vous-même. Cependant, il existe une commande appeléegit tirerqui est essentiellement ungit cherchersuivi immédiatement d'ungit fusionnerdans la plupart des cas. Si vous avez configuré une branche de suivi comme illustré dans la dernière section, soit en la définissant explicitement, soit en la faisant créer pour vous par leclonerouvérifiercommandes,git tirerrecherchera le serveur et la branche suivis par votre branche actuelle, les récupérera sur ce serveur, puis tentera de fusionner dans cette branche distante.

En règle générale, il est préférable d'utiliser simplement lealler chercheretfusionnercommandes explicitement comme la magie degit tirerpeut souvent prêter à confusion.

Suppression de succursales distantes

Supposons que vous en ayez fini avec une succursale distante — disons que vous et vos collaborateurs avez terminé avec une fonctionnalité et que vous l'avez fusionnée dans celle de votre télécommandemaîtrebranche (ou quelle que soit la branche dans laquelle se trouve votre ligne de code stable). Vous pouvez supprimer une branche distante à l'aide de la--supprimerpossibilité degit pousser.Si vous souhaitez supprimer votreserveurfixbranche à partir du serveur, vous exécutez ce qui suit :

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

Fondamentalement, tout cela consiste à supprimer le pointeur du serveur. Le serveur Git y conservera généralement les données pendant un certain temps jusqu'à ce qu'un ramasse-miettes s'exécute, donc s'il a été accidentellement supprimé, il est souvent facile de le récupérer.

précédent|suivant

Top Articles
Latest Posts
Article information

Author: Pres. Carey Rath

Last Updated: 11/08/2023

Views: 5307

Rating: 4 / 5 (41 voted)

Reviews: 88% of readers found this page helpful

Author information

Name: Pres. Carey Rath

Birthday: 1997-03-06

Address: 14955 Ledner Trail, East Rodrickfort, NE 85127-8369

Phone: +18682428114917

Job: National Technology Representative

Hobby: Sand art, Drama, Web surfing, Cycling, Brazilian jiu-jitsu, Leather crafting, Creative writing

Introduction: My name is Pres. Carey Rath, I am a faithful, funny, vast, joyous, lively, brave, glamorous person who loves writing and wants to share my knowledge and understanding with you.