

Git – Branches distantes – Serveur d’impression
Sommaire
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». |

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.

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.

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.

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.

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. Si vous ne souhaitez pas le saisir à chaque fois que vous appuyez sur, vous pouvez configurer un "cache d'informations d'identification". 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 |
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