Lorsque je pousse une nouvelle branche vers un référentiel distant via Git Extensions, je reçois une alerte disant
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.
L'idée de base est qu'il existe des références purement locales (par exemple, des branches, des balises), puis des références de suivi à distance, qui suivent ce qui se passe dans d'autres référentiels. Étant donné que Git est décentralisé, il vous est possible de choisir un nom pour une branche qui est le même que celui utilisé dans une télécommande, sans avoir connu l'autre, de sorte qu'ils ont un travail complètement différent sur eux. Git vous permet de le faire, mais il fournit également un moyen de lier des références locales à des références distantes également.
Par exemple, tenez compte des éléments suivants:
% 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ées 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
Nous avons maintenant une branche locale next
qui suit la branche distante du même nom et la branche locale todo
qui ne sera pas mise à jour avec les modifications de remotes/Origin/todo
.
Une branche git locale peut suivre une branche distante, ce qui signifie que les commandes git Push et git pull sauront par défaut pousser et tirer les commits vers et depuis la branche suivie. Git status indiquera également le statut entre votre branche locale actuelle et la branche distante qu'elle suit. Lorsque vous clonez un référentiel git, git ajoutera une référence de suivi à la branche principale locale pour suivre la branche principale distante. Lorsque vous extrayez d'une nouvelle branche distante, git ajoutera 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, puis la poussez vers le référentiel distant, vous devez explicitement dire à git si vous souhaitez que votre branche locale commence à suivre la nouvelle branche distante. Vous faites cela avec le -u
ou --set-upstream
option lors du transfert de la branche locale vers le référentiel distant: git Push -u Origin my-new-branch
.
Vous pouvez vérifier les branches distantes que vos branches locales suivent (le cas échéant) avec la commande git branch -vv
Ci-dessous, un petit exemple de sortie.
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 succursales locales master
, b1
, b2
et b3
. La branche master
suit une branche distante appelée master
, la b1
la branche ne suit aucune branche distante, la b2
branch suit une branche distante appelée b2
et le b3
branch suit une branche distante appelée r1
. git branch -vv
indique également le statut de la branche liée à la branche tracée. Ici branche b3
est 1 commit avant la branche distante suivie et les autres branches sont à jour avec leurs branches distantes respectives respectives.
Donc, si vous créez une branche locale et que vous envoyez au référentiel distant, souhaitez-vous ajouter une référence de suivi à la branche ou non? Habituellement, lorsque vous transmettez une nouvelle branche locale au référentiel 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 extraire les modifications que d'autres personnes ont apportées à la branche, donc je dirais que dans la plupart des cas, vous souhaitez ajouter la référence de suivi.
L'excellent blog de Nick Quaranto git ready a un article expliquant branches de suivi à distance :
Les succursales de suivi à distance ont plusieurs objectifs différents:
Ils sont utilisés pour lier ce que vous travaillez localement par rapport à ce qui est sur la télécommande.
Ils sauront automatiquement de quelle branche distante obtenir les modifications lorsque vous utilisez git pull ou git fetch.
Encore mieux, git status lui reconnaîtra combien de commits vous êtes devant la version distante de la branche.
oui, vous voudrez probablement l'ajouter. faites ceci dans la console: git branch --set-upstream-to Origin/master