Git - Branches distantes (2024)

Les branches distantes sont des références (pointeurs) vers l'état des branches dans vos référentiels distants. Ce sont des branches locales que vous ne pouvez pas déplacer ; ils sont automatiquement déplacés pour vous chaque fois que vous effectuez une communication réseau. Les branches distantes agissent 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é.

Ils prennent la forme(distant)/(succursale).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 propreiss53bifurquer; mais la branche sur le serveur pointerait vers le commit àorigine/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.

Utiliser

"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. Alors 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 tu coursgit 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 travaillez sur votre branche principale locale et que, entre-temps, quelqu'un d'autre vous pousse àgit.notreentreprise.comet met à jour sonmaîtrebranche, alors vos historiques avancent différemment. De plus, tant que vous restez hors de contact avec votre serveur d'origine, votreorigine/maîtrele pointeur ne bouge pas.

Git - Branches distantes (2)

Figure 31. Le travail local et à distance peuvent diverger

Pour synchroniser votre travail, vous lancez unegit récupérer l'originecommande. Cette commande recherche 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 références distantes

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.

Git - Branches distantes (4)

Figure 33. Ajout d'un autre serveur en tant que serveur distant

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 en ce moment, Git ne récupère aucune donnée mais définit une branche distante 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 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 (distant) (branche):

$ 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, "Prenez ma branche locale serverfix et poussez-la pour mettre à jour la branche serverfix de la télécommande." Nous allons passer en revue lerefs/têtes/partie en détail dans[ch10-git-internes], 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 nommée différemment. Si vous ne vouliez pas qu'elle soit appeléeserveurfixsur la télécommande, vous pouvez à la place exécutergit push origin serverfix:awesomebranchpour pousser votre localserveurfixbranche à lasuperbranchebranche sur le projet distant.

Utiliser

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, vous pouvez configurer un "cache d'informations d'identification". Le plus simple consiste simplement à le garder 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 distantes, vous n'en avez pas automatiquement des copies locales modifiables. En d'autres termes, dans ce cas, vous n'avez pas de nouvelleserveurfixsuccursale - vous n'avez qu'unorigine/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 distante :

$ 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 distante crée 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 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 [branche] [nom distant]/[branche].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'

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.

Utiliser

Sténographie en amont

Lorsque vous avez configuré une branche de suivi, vous pouvez la référencer 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 git. Cela 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] oublié les crochets master 1ae2a45 [origin/master] déploiement de l'index fix* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] cela devrait le faire tester 5ea463a en essayant 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 de 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 chiffres ne datent que de la dernière fois que vous avez récupéré sur chaque serveur. Cette commande n'atteint pas les serveurs, elle vous indique ce qu'elle a mis en cache à partir de ces serveurs localement. Si vous voulez être totalement à jour en avant et en arrière, vous devrez récupérer toutes vos télécommandes juste avant de l'exécuter. Vous pourriez faire ça 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 ne fait que 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

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

Author: The Hon. Margery Christiansen

Last Updated:

Views: 5325

Rating: 5 / 5 (50 voted)

Reviews: 81% of readers found this page helpful

Author information

Name: The Hon. Margery Christiansen

Birthday: 2000-07-07

Address: 5050 Breitenberg Knoll, New Robert, MI 45409

Phone: +2556892639372

Job: Investor Mining Engineer

Hobby: Sketching, Cosplaying, Glassblowing, Genealogy, Crocheting, Archery, Skateboarding

Introduction: My name is The Hon. Margery Christiansen, I am a bright, adorable, precious, inexpensive, gorgeous, comfortable, happy person who loves writing and wants to share my knowledge and understanding with you.