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 et détaillée des références distantes en suivant les instructionsgit ls-remote
ougit remote show
run, pour les branches distantes, et plus d'informations. Cependant, l'approche la plus courante consiste à utiliser des branches 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 modifier manuellement, elles sont modifiées automatiquement dès que vous effectuez une communication réseau. Considérez-les comme des signets qui vous rappellent 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 sont de la forme
.Par exemple, si vous voulez savoir comment la branchemaître
dans votre référentielorigine
ressemblait à la dernière fois que vous avez eu un contact avec lui, alors vous vous ramifiiezorigine/maître
Si vous avez travaillé avec un collaborateur sur un problème et qu'il en a déjà uniss53
succursale, vous pouvez avoir votre propreiss53
Bifurquer; mais la branche sur le serveur pointerait vers la branche de suivi à distanceorigine/iss53
montrer.
Cela peut être un peu déroutant, alors regardons un exemple. Supposons que vous ayez un serveur git sur votre réseau avec l'adressegit.notreentreprise.com
.Si vous clonez à partir de ceci, le serveur obtiendra de l'instruction gitcloner
automatiquement le nomorigine
, télécharge toutes ses données, crée un pointeur vers le commit que sonmaître
La branche l'affiche et la nomme localementorigine/maître
.Git vous donne également votre propre localmaître
Branche avec la même position de départ que leorigine/maître
Branchez-vous pour avoir un endroit où commencer votre travail.
annotation | "origine" n'a rien de spécial Tout comme le nom de branche "master" n'a pas de signification particulière dans Git, "origin" n'a pas non plus de signification particulière. Tandis que "master" est le nom par défaut d'une branche initiale lorsque vous utilisez l'instruction |
Figure 30. Référentiels distants et locaux après clonage
Si vous êtes un peu à votre localmaître
La branche travaille et pendant ce temps quelqu'un d'autre fait quelque chosegit.notreentreprise.com
télécharge et avec elle sonmaître
Branche mise à jour, alors vos historiques avanceront différemment. Et tant que vous n'êtes pas en contact avec votreorigine
Ramassez le serveur, vos mouvementsorigine/maître
pointeur non.
Figure 31. Les modifications locales et distantes peuvent diverger
Pour synchroniser votre travail avec une télécommande spécifique, exécutez la commandegit fetch
off (dans notre casgit récupérer l'origine
).La commande recherche quel serveur est "origine" (dans ce casgit.notreentreprise.com
), récupère toutes les données que vous ne possédez pas déjà et met à jour votre base de données locale en utilisant votreorigine/maître
Le pointeur s'est déplacé vers sa nouvelle position, plus actuelle.
Figure 32.git chercher
met à jour vos agences de suivi à distance
Pour illustrer la gestion de plusieurs serveurs distants et pour voir à quoi ressemblent les branches distantes sur ces projets distants, supposons que vous disposez d'un autre serveur Git interne utilisé par l'une de vos équipes de sprint uniquement pour le développement.git.team1.ourcompany.com
.Vous pouvez l'ajouter au projet sur lequel vous travaillez actuellement en tant que nouveau serveur distant en utilisant la directivegit remote ajouter
exécuter comme nous l'avons fait au chapitre 2Les bases de Gitont traité. Nous appelons ce serveur distantéquipe un
, qui sera le raccourci pour l'URL entière.
Figure 33. Ajout d'un autre serveur distant
Maintenant vous pouvez avec la déclarationgit chercher teamone
récupérez tout ce que vous n'avez pas déjà sur le serveur. Étant donné que ce serveur ne contient qu'un sous-ensemble des données qui se trouvent actuellement sur le vôtreorigine
serveur, Git ne récupère pas les données, mais il crée une branche distanteteamone/maître
pour qu'il pointe vers le commit quiéquipe un
comme sonmaître
Chapeau de branche.
Figure 34. Branche de suivi à distance pourteamone/maître
Pousser/Hochladen
Si vous souhaitez partager une branche avec le monde, vous devez la télécharger sur un serveur distant sur lequel vous disposez d'une autorisation d'écriture. Vos branches locales sur lesquelles vous écrivez ne sont pas automatiquement synchronisées avec les télécommandes - vous devez pousser explicitement les branches que vous souhaitez partager. De cette façon, vous pouvez utiliser des branches privées sur lesquelles vous ne souhaitez pas publier et ne pousser que les branches thématiques auxquelles vous souhaitez contribuer.
Si vous avez une succursale nomméeserveurfix
Si vous avez quelque chose sur lequel vous voulez travailler avec d'autres, vous pouvez le télécharger de la même manière que vous avez téléchargé votre première branche.git push
hors de:
$ 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 une sorte d'abréviation. Git développe le nom de la brancheserveurfix
automatiquement àrefs/heads/serverfix:refs/heads/serverfix
, ce qui signifie "Utiliser ma branche localeserveurfix
et utilisez-le pour mettre à jourserveurfix
Branche sur mon serveur distant". Nous ferons la partierefs/têtes/
au chapitre 10Git Interneplus loin, mais vous pouvez généralement l'omettre. Vous pouvez également utiliser l'instructiongit push origin serverfix:serverfix
exécuter, qui fait la même chose - cela signifie "Prends le mienserveurfix
et lui faireserveurfix
du serveur distant". Vous pouvez également utiliser ce format pour pousser une branche locale vers une branche distante avec un nom différent. Si vous ne vouliez pas qu'elle soit sur laserveurfix
est appelé, vous pouvez utiliser à la placegit push origin serverfix:awesomebranch
courir à votre localserveurfix
Branche sur lesuperbranche
Pousser la branche dans le projet distant.
annotation | Ne ressaisissez 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, le terminal vous demandera ces informations afin que le serveur puisse voir si vous êtes autorisé à pousser. Si vous ne voulez pas le taper à chaque fois que vous téléchargez quelque chose, vous pouvez configurer un cache d'informations d'identification. Le moyen le plus simple consiste à conserver les informations en mémoire pendant quelques minutes, ce que vous pouvez facilement faire avec l'instruction Voir le chapitre 7 pour plus d'informations sur les différentes options de cache d'informations d'identification disponiblesMise en cache des informations d'identification. |
La prochaine fois qu'un de vos collaborateurs récupère des données sur le serveur, cela devient une référence à la version serveur de la brancheserveurfix
sous la branche distanteorigine/fixe du serveur
recevoir:
$ 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 réaliser que lorsque vous récupérez que de nouvelles branches de suivi à distance sont téléchargées, vous n'en avez pas automatiquement des copies locales modifiables. En d'autres termes, vous n'avez pas de nouvelle branche dans ce cas.serveurfix
– Vous n'avez qu'un seul pointeurorigine/fixe du serveur
, que vous ne pouvez pas modifier.
Pour incorporer ces modifications dans votre branche de travail actuelle, vous pouvez utiliser l'instructiongit merge origin/serverfix
courir. Si vous faites votre propreserveurfix
Si vous souhaitez qu'une branche fonctionne, 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 travailler, en commençant là oùorigine/fixe du serveur
se tient actuellement.
Suivi-Branches
L'extraction d'une branche locale à partir d'une branche distante génère 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 etgit tirer
entrez, Git sait automatiquement à partir de quel serveur les données doivent être récupérées et dans quelle branche elles doivent circuler.
Lorsque vous clonez un dépôt, unmaître
Branche créée quiorigine/maître
Cependant, vous pouvez également créer d'autres branches de suivi si vous le souhaitez - qui suivent les branches sur d'autres télécommandes. Le cas le plus simple est l'exemple que vous venez de voir, en exécutant l'instructiongit checkout -b
.Il s'agit d'une opération courante, abréviation de Git--piste
fournit :
$ 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 tellement utilisé qu'il y a même une abréviation pour cette abréviation. Si le nom de la branche que vous voulez utiliser pour extraire (a) n'existe pas, et (b) correspond exactement à un nom sur une seule télécommande, Git crée 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 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.
automatiquement deorigine/fixe du serveur
tiré
Si vous avez déjà une branche locale et que vous souhaitez la faire pointer vers une branche distante que vous venez de récupérer (extraire), ou si vous souhaitez modifier la branche en amont que vous contrôlez, vous pouvez utiliser l'option-u
ou--set-amont-vers
avecbranche git
Utilisez pour les définir explicitement à tout moment.
$ git branch -u origin/serverfixBranch serverfix mis en place pour suivre la branche distante serverfix depuis l'origine.
annotation | abréviation en amont Une fois que vous avez configuré une branche de suivi, vous pouvez accéder à sa branche en amont avec le raccourci |
Si vous souhaitez voir les branches de suivi que vous avez configurées, vous pouvez utiliser la déclarationbranche git
avec l'option-vv
Cela répertorie vos branches locales avec plus d'informations, y compris ce que chaque branche contrôle/suivi et si votre branche 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
Branchez la brancheorigine/iss53
tracé et l'information "ahead 2" signifie que nous avons deux commits locaux qui n'ont pas encore été téléchargés sur le serveur. Nous pouvons également voir que notremaître
Bifurquerorigine/maître
suivis et à jour. Ensuite, nous voyons que notreserveurfix
Branchez la brancheserveur-réparer-bon
sur notre serveuréquipe un
versioned et "devant 3, derrière 1" signifie qu'il y a un commit sur le serveur que nous n'avons pas encore fusionné, et trois commits locaux que nous n'avons pas encore poussés. Enfin, nous pouvons voir que notreessai
branch ne suit pas du tout une branche distante.
Il est important de noter que ces nombres décrivent l'état lorsque vous avez récupéré les données du serveur pour la dernière fois. Cette directive n'accède pas aux serveurs, elle renvoie simplement les informations qui ont été mises en cache localement lorsque le serveur a été contacté pour la dernière fois. Si vous voulez des nombres entièrement à jour "en avant" et "en retard", vous devez récupérer les données de tous vos serveurs distants juste avant d'exécuter la directive. Vous pouvez le faire comme ceci :
$ git chercher --all; branche git -vv
extraction/téléchargement
Lors de la déclarationgit chercher
récupèrera toutes les modifications sur le serveur que vous n'avez pas actuellement, mais rien ne changera du tout dans votre répertoire de travail. Il récupérera simplement les données pour vous et vous laissera faire la fusion. Cependant, il existe des instructionsgit tirer
, qui est essentiellement ungit chercher
est, qui dans la plupart des cas est instantanégit fusionner
Si vous avez configuré une branche de suivi comme indiqué dans la dernière section, soit en la définissant explicitement, soit en utilisant les commandescloner
ouvérifier
ont créé pour vous, puis recherchegit tirer
après le serveur et la branche versionnée, se branche sur votre branche actuelle, extrait de ce serveur, puis tente de fusionner cette branche distante.
En règle générale, il est préférable de simplement indiquer explicitement les instructionsgit chercher
etgit fusionner
à utiliser comme la magie de l'instructiongit tirer
peut souvent prêter à confusion.
Supprimer les branches distantes
Imaginons que vous en ayez fini avec votre succursale distante - vous et vos collaborateurs en avez terminé avec une nouvelle fonctionnalité et l'avez dans la succursalemaître
du serveur distant (ou de la branche dans laquelle se trouve votre code stable). Vous pouvez supprimer une branche distante en utilisant l'instructiongit pousser
avec l'option--supprimer
courir.Si votreserveurfix
branche à partir du serveur, exécutez l'instruction suivante :
$ git push origin --delete serverfixTo https://github.com/schacon/simplegit - [supprimé] serverfix
Fondamentalement, cela ne fait que supprimer le pointeur du serveur. Le serveur Git y conserve généralement les données pendant un certain temps jusqu'à ce qu'un ramasse-miettes s'exécute. Ainsi, s'ils ont été accidentellement supprimés, il est souvent facile de les récupérer.
précédent|suivant