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ître
succursale sur votreorigine
télécommande ressemblait à la dernière fois que vous avez communiqué avec elle, vous vérifieriez leorigine/maître
branche. Si vous travailliez sur un problème avec un partenaire et qu'il a soulevé uneiss53
succursale, vous pourriez avoir votre propreiss53
branche, 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, Gitcloner
la commande le nomme automatiquementorigine
pour vous, extrait toutes ses données, crée un pointeur vers l'endroit oùmaître
branche est, et la nommeorigine/maître
local.Git vous donne également votre propremaître
succursale commençant au même endroit que l'originemaître
branche, 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écutez |
Figure 30. Serveur et référentiels locaux après clonage
Si vous effectuez des travaux sur votre localmaître
branche, et, entre-temps, quelqu'un d'autre pousse àgit.notreentreprise.com
et met à jour sonmaître
branche, alors vos historiques avancent différemment. De plus, tant que vous restez hors de contact avec votreorigine
serveur, votreorigine/maître
le pointeur ne bouge pas.
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ître
pointeur vers sa nouvelle position plus à jour.
Figure 32.git chercher
met à 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 ajouter
commande 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.
Figure 33. Ajout d'un autre serveur en tant que serveur distant
Maintenant, vous pouvez courirgit chercher teamone
pour aller chercher tout la télécommandeéquipe un
serveur a ce que vous n'avez pas encore.Parce que ce serveur a un sous-ensemble des données que votreorigine
serveur a actuellement, Git ne récupère aucune donnée mais définit une branche de suivi à distance appeléeteamone/maître
pour pointer vers le commit quiéquipe un
a pourmaître
bifurquer.
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éeserveurfix
sur 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 leserveurfix
nom de la branche versrefs/heads/serverfix:refs/heads/serverfix
, ce qui signifie : « Prends monserveurfix
branche locale et poussez-la pour mettre à jour la télécommandeserveurfix
branche. "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.serveurfix
sur la télécommande, vous pouvez à la place exécutergit push origin serverfix:awesomebranch
pour pousser votre localserveurfix
branche à lasuperbranche
branche 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écutant 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 deserveurfix
est 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 nouveauserveurfix
branche — vous n'avez qu'uneorigine/fixe du serveur
pointeur 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ôtreserveurfix
branche 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 serveur
est.
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ître
branche 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ître
branche. 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--piste
sté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-u
ou--set-amont-vers
possibilité debranche git
pour 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 |
Si vous voulez voir quelles branches de suivi vous avez configurées, vous pouvez utiliser le-vv
possibilité 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] 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 notreiss53
la branche suitorigine/iss53
et 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ître
la branche suitorigine/maître
et est à jour. Ensuite, nous pouvons voir que notreserveurfix
la succursale suitserveur-réparer-bon
succursale sur notreéquipe un
serveur 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 notreessai
branch 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 chercher
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. Elle obtiendra simplement les données pour vous et vous permettra de les fusionner vous-même. Cependant, il existe une commande appeléegit tirer
qui est essentiellement ungit chercher
suivi immédiatement d'ungit fusionner
dans 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 lecloner
ouvérifier
commandes,git tirer
recherchera 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 chercher
etfusionner
commandes explicitement comme la magie degit tirer
peut 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ître
branche (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--supprimer
possibilité degit pousser
.Si vous souhaitez supprimer votreserveurfix
branche à 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