78 votes

Qu'est-ce qu'une référence de suivi ?

Lorsque je pousse une nouvelle branche vers un dépôt distant via Git Extensions, je reçois une alerte disant que

The branch {branch name} does not have a tracking reference. Do
you want to add a tracking reference for {branch name}?

Qu'est-ce qu'une référence de suivi ? Je n'ai trouvé que quelques mentions de références de suivi dans Google et aucune véritable définition.

2 votes

Voir push -u pour le scoop.

0 votes

Si je comprends correctement les pages de manuel git pour push, pull et config, une référence de suivi est un paramètre ou des paramètres ajoutés au fichier de configuration, utilisés par git-pull sans argument pour lui dire quoi tirer vers le bas. Je trouve la documentation un peu confuse, mais selon moi, la référence de suivi est une combinaison des paramètres suivants dans le fichier de configuration : remote.<name>.fetch et branch.<name>.merge. Est-ce correct ?

1 votes

La référence de suivi est le lien entre un blanchiment local (par exemple master ) et d'une branche distante (par ex. origin/master ).

38voto

Eric Walker Points 2494

L'idée de base est qu'il y a des références purement locales (par exemple, branches, tags), et puis il y a des références de suivi à distance, qui suivent ce qui se passe dans d'autres dépôts. Parce que Git est décentralisé, il est possible pour vous de choisir un nom pour une branche qui est le même que celui utilisé dans un dépôt distant, sans avoir connu l'autre, de sorte qu'ils ont un travail complètement différent sur eux. Git vous permet de faire cela, mais il fournit également un moyen de lier les références locales aux références distantes.

Par exemple, considérez ce qui suit :

% git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/maint
  remotes/origin/master
  remotes/origin/next
  remotes/origin/pu
  remotes/origin/todo

Ici, nous avons des branches sur origin appelé next et todo .

% git checkout -t remotes/origin/next
Branch next set up to track remote branch next from origin.
Switched to a new branch 'next'
% git branch todo    

Maintenant nous avons une branche locale next qui suit la branche distante du même nom et la branche locale todo qui ne sera pas mis à jour en fonction des modifications apportées à remotes/origin/todo .

0 votes

Merci. Donc une "référence" est juste un objet, comme une branche ou une balise, et une "référence de suivi" est juste un objet qui est lié à un objet correspondant dans un référentiel distant ?

2 votes

Oui, c'est l'idée principale. Le terme "objet" a une signification particulière dans Git ; il signifie tout ce qui a un SHA1 et qui est stocké sous .git/objects, il est donc plus général que "référence", mais c'est l'idée.

23 votes

Donc, euhhhh, quelqu'un veut recommander si nous devrions dire OUI ou NON ? "Voulez-vous ajouter une référence de suivi au master" ? C'est encore très confus en termes pratiques. Qu'est-ce qui est généralement choisi ? Y a-t-il des avantages et des inconvénients à chaque option ? Peut-on dire "OUI" et l'oublier sans que cela ne pose de problème ?

15voto

Hemaolle Points 512

Une branche locale de git peut suivre une branche distante, ce qui signifie que les commandes git push et git pull sauront pousser et tirer des commits vers et depuis la branche suivie par défaut. De même, git status indiquera le statut entre votre branche locale actuelle et la branche distante qu'elle suit. Lorsque vous clonez un dépôt git, git ajoute une référence de suivi à la branche maîtresse locale pour suivre la branche maîtresse distante. Lorsque vous effectuez un checkout depuis une nouvelle branche distante, git ajoute une référence de suivi à la branche locale créée pour suivre la branche distante que vous avez extraite.

Cependant, si vous créez une nouvelle branche localement, et que vous la poussez ensuite vers le dépôt distant, vous devez indiquer explicitement à git si vous voulez que votre branche locale commence à suivre la nouvelle branche distante. Vous faites cela avec l'option -u ou --set-upstream lors de la poussée de la branche locale vers le référentiel distant : git push -u origin my-new-branch .

Vous pouvez vérifier quelles branches distantes sont suivies par vos branches locales (s'il y en a) avec la commande git branch -vv Vous trouverez ci-dessous un petit exemple du résultat.

  b1     560eb64 Added file.txt
  b2     560eb64 [origin/b2] Added file.txt
  b3     b638c18 [origin/r1: ahead 1] Added file3.txt
* master 560eb64 [origin/master] Added file.txt

Dans ce cas, nous avons des branches locales master , b1 , b2 et b3 . Le site master suit une branche distante appelée master le b1 ne suit aucune branche distante, la branche b2 suit une branche distante appelée b2 et le b3 suit une branche distante appelée r1 . git branch -vv montre également le statut de la branche liée à la branche tracée. Ici, la branche b3 a 1 commit d'avance sur la branche distante suivie et les autres branches sont à jour avec leurs branches distantes suivies respectives.

Ainsi, si vous créez une branche locale et la poussez vers le dépôt distant, voulez-vous ajouter une référence de suivi à la branche ou non ? Habituellement, lorsque vous poussez une nouvelle branche locale vers le dépôt distant, vous le faites pour collaborer avec d'autres développeurs sur une fonctionnalité. Si vous ajoutez une référence de suivi à votre branche locale, vous pouvez facilement récupérer les modifications que d'autres personnes ont apportées à la branche, donc je dirais que dans la plupart des cas, vous voulez ajouter la référence de suivi.

6voto

whatsupanna Points 51

Oui vous voulez probablement l'ajouter. faites ceci dans la console : git branch --set-upstream-to origin/master

6voto

Simon Tewsi Points 2785

L'excellent blog de Nick Quaranto git ready a un post expliquant branches de suivi à distance :

Les branches de suivi à distance ont plusieurs objectifs différents :

  • Ils sont utilisés pour faire le lien entre ce sur quoi vous travaillez localement et ce qui est à distance.

  • Ils sauront automatiquement de quelle branche distante récupérer les changements lorsque vous utilisez git pull ou git fetch.

  • Encore mieux, git status reconnaîtra lui combien de commits vous êtes en devant la version distante de la branche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X