Serveur d'impression

Git – Branches distantes – Serveur d’impression

Le 22 avril 2020 - 13 minutes de lecture

Branches distantes

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 avec git ls-remote , ou git remote show pour les succursales distantes ainsi que plus d'informations.
Néanmoins, un moyen plus courant consiste à tirer parti 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 lors de votre dernière connexion.

Les noms des succursales de suivi à distance prennent la forme /.
Par exemple, si vous voulez voir ce que Maître branche sur votre origine la télécommande ressemblait à la dernière fois que vous avez communiqué avec elle, vous origine / maître branche.
Si vous étiez en train de résoudre un problème avec un partenaire et qu'il a iss53 branche, vous pourriez avoir votre propre local iss53 , mais la branche sur le serveur serait représentée par la branche de suivi à distance 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.ourcompany.com.
Si vous clonez à partir de cela, Git cloner la commande le nomme automatiquement origine pour vous, tire vers le bas toutes ses données, crée un pointeur vers où son Maître la branche est, et la nomme origine / maître localement.
Git vous donne également votre propre local Maître succursale commençant au même endroit que l’origine Maître branche, donc vous avez quelque chose à travailler.

Remarque

«Origine» n'est pas spéciale

Tout comme le nom de la branche «maître» n'a pas de signification particulière dans Git, ni «origine».
Alors que «master» est le nom par défaut d'une branche de départ lorsque vous exécutez git init qui 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écutez git clone.
Si vous courez git clone -o booyah à la place, vous aurez booyah / master comme branche distante par défaut.

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

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

Si vous travaillez sur votre réseau local Maître branche, et, en attendant, quelqu'un d'autre pousse à git.ourcompany.com et met à jour son Maître branche, puis vos histoires avancent différemment.
Aussi, tant que vous restez hors de contact avec votre origine serveur, votre origine / maître le pointeur ne bouge pas.

Le travail local et à distance peut diverger.

Figure 31. Le travail local et distant peut diverger

Pour synchroniser votre travail avec une télécommande donnée, vous exécutez un git fetch commande (dans notre cas, git fetch origine).
Cette commande recherche l’origine du serveur (dans ce cas, c’est git.ourcompany.com), récupère les données que vous ne possédez pas encore et met à jour votre base de données locale, déplaçant votre origine / maître pointeur vers sa nouvelle position, plus à jour.

`git fetch` met à jour vos références distantes.

Figure 32. git fetch met à jour vos succursales de suivi à distance

Pour démontrer que vous disposez 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 le git remote add comme nous l'avons vu dans Git Basics.
Nommez cette télécommande teamone, qui sera votre nom abrégé pour l'ensemble de cette URL.

Ajout d'un autre serveur en tant que télécommande.

Figure 33. Ajout d'un autre serveur en tant que télécommande

Maintenant, vous pouvez exécuter git fetch teamone pour tout récupérer la télécommande teamone serveur que vous n'avez pas encore.
Parce que ce serveur a un sous-ensemble des données que votre origine serveur a en ce moment, Git ne récupère aucune donnée mais définit une branche de suivi à distance appelée teamone / master pour signaler l'engagement teamone a comme son Maître branche.

Branche de suivi à distance pour `teamone / master`.

Figure 34. Branche de suivi à distance pour teamone / master

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 succursales locales ne sont pas automatiquement synchronisées avec les télécommandes que 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 afficher uniquement les branches de sujet sur lesquelles vous souhaitez collaborer.

Si vous avez une branche nommée serverfix que vous souhaitez travailler avec d'autres, vous pouvez le pousser de la même manière que vous avez poussé votre première branche.
Courir git push :

$ git push origin serverfix
Compter les objets: 24, c'est fait.
Compression Delta utilisant jusqu'à 8 threads.
Compression d'objets: 100% (15/15), fait.
Objets d'écriture: 100% (24/24), 1,91 Ko | 0 octet / s, terminé.
Total 24 (delta 2), réutilisé 0 (delta 0)
À https://github.com/schacon/simplegit
 * [new branch]      serverfix -> serverfix

C'est un peu un raccourci.
Git étend automatiquement le serverfix nom de la branche vers refs / heads / serverfix: refs / heads / serverfix, ce qui signifie: "Prends mon serverfix branche locale et appuyez dessus pour mettre à jour la serverfix branche."
Nous allons passer en revue le refs / têtes / partie en détail dans Git Internals, mais vous pouvez généralement le laisser de côté.
Vous pouvez aussi faire git push origin serverfix: serverfix, qui fait la même chose – il dit: "Prenez mon correctif de serveur et faites-en le correctif de serveur de la télécommande".
Vous pouvez utiliser ce format pour pousser une branche locale dans une branche distante nommée différemment.
Si vous ne vouliez pas qu'il soit appelé serverfix sur la télécommande, vous pouvez plutôt exécuter git push origin serverfix: awesomebranch pour pousser votre local serverfix branche à la génial branche sur le projet distant.

Remarque

Ne saisissez 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 souhaitez pas le saisir à chaque fois que vous appuyez sur, vous pouvez configurer un "cache d'informations d'identification".
Le plus simple est simplement de le garder en mémoire pendant quelques minutes, que vous pouvez facilement configurer en exécutant git config --global credential.helper cache.

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

La prochaine fois que l'un de vos collaborateurs récupérera du serveur, il obtiendra une référence à l'endroit où la version du serveur de serverfix est sous la branche distante origine / correction de serveur:

$ git fetch origine
à distance: comptage d'objets: 7, fait.
à distance: compression des objets: 100% (2/2), fait.
à distance: Total 3 (delta 0), réutilisé 3 (delta 0)
Déballage des objets: 100% (3/3), c'est fait.
Depuis https://github.com/schacon/simplegit
 * [new branch]      serverfix -> origin / serverfix

Il est important de noter que lorsque vous effectuez une extraction qui supprime 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 nouveau serverfix branche – vous avez seulement un origine / correction de serveur pointeur que vous ne pouvez pas modifier.

Pour fusionner ce travail dans votre branche de travail actuelle, vous pouvez exécuter git merge origin / serverfix.
Si vous voulez le vôtre serverfix branche sur laquelle vous pouvez travailler, vous pouvez la baser sur votre branche de suivi à distance:

$ git checkout -b serverfix origin / serverfix
Serverfix de succursale configuré pour suivre le correctif de serveur de succursale distante depuis l'origine.
Passé à une nouvelle branche 'serverfix'

Cela vous donne une branche locale sur laquelle vous pouvez travailler et qui commence là où origine / correction de serveur est.

Branches de suivi

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 «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 saisissez git pull, Git sait automatiquement à partir de quel serveur aller chercher et dans quelle branche fusionner.

Lorsque vous clonez un référentiel, il crée généralement automatiquement un Maître branche qui suit origine / 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 les Maître branche.
Le cas simple est l'exemple que vous venez de voir, en cours d'exécution git checkout -b /.
C'est une opération assez courante pour que Git fournisse --Piste sténographie:

$ git checkout --track origin / serverfix
Serverfix de succursale configuré pour suivre le correctif de serveur de succursale distante depuis l'origine.
Passé à une nouvelle branche 'serverfix'

En fait, c'est tellement courant qu'il y a même un raccourci pour ce raccourci.
Si le nom de la branche que vous essayez de commander (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 serverfix
Serverfix de succursale configuré pour suivre le correctif de serveur de succursale distante depuis l'origine.
Passé à 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 / serverfix
Branchement SF configuré pour suivre le correctif du serveur de succursale distante depuis l'origine.
Passé à une nouvelle succursale 'sf'

Maintenant, votre succursale locale sf tirera automatiquement de origine / correction de serveur.

Si vous avez déjà une branche locale et que vous souhaitez la définir sur une branche distante que vous venez de tirer vers le bas, ou si vous souhaitez modifier la branche en amont que vous suivez, vous pouvez utiliser le -u ou --set-upstream-to option pour git branch pour le définir explicitement à tout moment.

$ git branch -u origin / serverfix
Serverfix de succursale configuré pour suivre le correctif de serveur de succursale distante depuis l'origine.

Remarque

Sténographie en amont

Lorsque vous avez configuré une branche de suivi, vous pouvez référencer sa branche amont avec le @en amont ou @ u sténographie.
Donc, si vous êtes sur le Maître branche et c'est le suivi origine / maître, vous pouvez dire quelque chose comme git merge @ u au lieu de git fusionner origine / master si vous le souhaitez.

Si vous souhaitez voir les succursales de suivi que vous avez configurées, vous pouvez utiliser le -vv option pour git branch.
Cela répertoriera vos succursales locales avec plus d'informations, y compris le suivi de chaque succursale 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 le correctif d'index
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] Cela devrait le faire
  test 5ea463a Essayez quelque chose de nouveau

Nous voyons donc ici que notre iss53 la succursale suit origine / iss53 et est "en avance" de deux, ce qui signifie que nous avons deux commits localement qui ne sont pas envoyés au serveur.
On voit aussi que notre Maître la succursale suit origine / maître et est à jour.
Ensuite, nous pouvons voir que notre serverfix branche suit la serveur-correctif-bon branche sur notre teamone serveur et est en avance de trois et en arrière 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 localement que nous n'avons pas poussés.
Enfin, nous pouvons voir que notre essai la branche 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 des numéros d'avance et de retard totalement à jour, vous devrez récupérer de toutes vos télécommandes juste avant d'exécuter cela.
Vous pouvez faire ça comme ceci:

$ git fetch --all; git branch -vv

Tirant

Tandis que le git fetch La commande ré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.
Il obtiendra simplement les données pour vous et vous permettra de les fusionner vous-même.
Cependant, il existe une commande appelée git pull qui est essentiellement un git fetch immédiatement suivi d'un git merge dans la plupart des cas.
Si une branche de suivi est configurée comme indiqué dans la dernière section, soit en la définissant explicitement, soit en la créant pour vous par le cloner ou check-out commandes, git pull recherchera le serveur et la branche suivis par votre branche actuelle, les récupérera à partir de ce serveur, puis essaiera de fusionner dans cette branche distante.

En général, il vaut mieux utiliser simplement le aller chercher et fusionner commande explicitement comme la magie de git pull peut souvent prêter à confusion.

Suppression de branches distantes

Supposons que vous ayez terminé avec une branche distante – supposons que vous et vos collaborateurs ayez terminé avec une fonctionnalité et que vous l'ayez fusionnée dans celle de votre télécommande Maître (ou quelle que soit la branche dans laquelle se trouve votre ligne de code stable).
Vous pouvez supprimer une branche distante à l'aide du --supprimer option pour git push.
Si vous souhaitez supprimer votre serverfix à partir du serveur, vous exécutez les éléments suivants:

$ git push origin - supprimer le correctif du serveur
À https://github.com/schacon/simplegit
 - [deleted]         serverfix

Fondamentalement, cela ne fait que supprimer le pointeur du serveur.
Le serveur Git 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 les récupérer.

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.