TL;DR Rappelez-vous, tous les git branches sont eux-mêmes utilisés pour suivi de l'historique d'un ensemble de dossiers. Par conséquent, Chaque branche n'est-elle pas en fait une "branche de suivi" ? car c'est à cela que servent ces branches : suivre l'historique des fichiers dans le temps. Ainsi, nous devrions probablement appeler les "branches" git normales, "branches de suivi", mais nous ne le faisons pas. Au lieu de cela, nous raccourcissons leur nom en "branches".
C'est donc en partie pour cette raison que le terme "branche de traçage" est si déroutant : pour les non-initiés, il peut facilement signifier deux choses différentes.
Dans git, le terme "Tracking-branch" est un nom court pour le terme plus complet : "Remote-tracking-branch" .
Il est probablement préférable, au début, de remplacer les termes plus formels jusqu'à ce que vous soyez plus à l'aise avec ces concepts.
Reformulons votre question comme suit :
Qu'est-ce qu'un " Remote -Suivant-branche ?"
Le mot clé ici est "Remote" (à distance), alors passez à l'endroit où vous êtes confus et je décrirai ce qu'est une branche de suivi à distance et comment elle est utilisée.
Pour mieux comprendre terminologie git dont branches y suivi de qui peut être très déroutant au départ, je pense que le plus simple est d'abord d'être parfaitement clair sur ce qu'est git et la structure de base de comment cela fonctionne . Sans une solide compréhension comme celle-ci, je vous promets que vous vous perdrez dans les nombreux détails, car git est très complexe (traduction : beaucoup de gens l'utilisent pour des choses très importantes).
Ce qui suit est une introduction/vue d'ensemble, mais vous trouverez peut-être que cet excellent article également informatif.
CE QU'EST GIT, ET À QUOI IL SERT
Un dépôt git est comme un album de photos de famille : Il contient des instantanés historiques montrant comment les choses étaient dans le passé. Un "instantané" est un enregistrement de quelque chose, à un moment donné dans le temps.
Un dépôt git n'est pas limité à contenir des photos de famille humaine. Il peut plutôt être utilisé pour enregistrer et organiser tout ce qui évolue ou change au fil du temps .
L'idée de base est de créer un livre pour que nous puissions facilement regarder en arrière dans le temps,
-
pour comparer les temps passés, avec le présent, ou d'autres moments dans le temps, et
-
pour recréer le passé.
Lorsque vous vous embourbez dans la complexité et la terminologie, essayez de vous rappeler que un dépôt git est la première et la plus importante, un référentiel d'instantanés et, comme un album photo, il sert à la fois à stocker et à organiser ces instantanés.
INSTANTANÉS ET SUIVI
traqué - suivre une personne ou un animal en cherchant la preuve qu'il est allé quelque part ( dictionnaire.cambridge.org )
Dans git, " votre projet " fait référence à une arborescence de fichiers (un ou plusieurs, éventuellement organisés en arborescence à l'aide de sous-répertoires), dont vous souhaitez conserver l'historique.
Git, via un processus en 3 étapes, enregistre un " instantané " de l'arborescence des répertoires de votre projet à un moment donné dans le temps.
Chaque instantané git de votre projet, est ensuite organisé par " liens " pointant vers des instantanés précédents de votre projet.
Un par un, lien par lien, nous pouvons remonter dans le temps pour trouver n'importe quel cliché de vous ou de votre patrimoine.
Par exemple Nous pouvons commencer par la photo la plus récente de vous, puis, à l'aide d'un lien, remonter dans le temps pour trouver une photo de vous prise hier ou la semaine dernière, ou lorsque vous étiez bébé, ou même qui était votre mère, etc.
C'est ce que l'on appelle " suivi de Dans cet exemple, il s'agit de suivre votre vie, de voir où vous avez laissé une empreinte et d'où vous venez.
COMMETS
Un engagement est similaire à une page de votre album photo contenant un seul cliché, en ce sens qu'elle ne contient pas seulement le cliché, mais aussi les méta-informations associées à ce cliché. Il comprend :
- une adresse ou un lieu fixe où l'on peut trouver ce commit, similaire à son numéro de page,
- un instantané de votre projet (de l'arborescence de vos fichiers) à un moment donné,
- une légende ou un commentaire indiquant ce qu'est la photo ou ce qu'elle représente,
- la date et l'heure de cet instantané,
- qui a pris la photo, et enfin,
- un, ou plus , liens en remontant dans le temps jusqu'à des instantanés précédents, comme celui d'hier, ou celui de nos parents. En d'autres termes, les "liens" sont semblables à des pointeurs vers les numéros de page d'autres photos plus anciennes de moi-même ou, à ma naissance, vers mes parents immédiats.
Un engagement est la partie la plus importante d'un album photo bien organisé.
L'ARBRE GÉNÉALOGIQUE AU FIL DU TEMPS, AVEC LES BRANCHES ET LES FUSIONS
Désambiguïsation : Le terme "arbre" ici ne fait pas référence à l'arbre des répertoires de fichiers, tel qu'il est utilisé ci-dessus, mais plutôt à un arbre généalogique de commits parents et enfants liés au fil du temps.
La structure de l'arbre généalogique de git est calquée sur nos propres arbres généalogiques humains.
Dans ce qui suit, pour aider à comprendre les liens d'une manière simple, je ferai référence à :
- a parent-commission comme un simple " parent ", et
- a enfant-commission comme un simple " enfant "ou "enfants" au pluriel.
Vous devriez le comprendre instinctivement, car il est basé sur l'arbre de vie :
- Un parent pourrait ont un ou plusieurs enfants qui les pointent du doigt dans le passé, et
- les enfants en ont toujours un ou plus les parents qu'ils désignent.
Ainsi, tous les commits, sauf les tout nouveaux commits (on pourrait dire les "commits juvéniles"), ont un ou plusieurs enfants qui pointent vers eux.
-
Si aucun enfant ne pointe vers un parent, alors ce commit n'est qu'une " conseil de culture ", ou l'endroit d'où naîtra le prochain enfant.
-
Avec un seul enfant pointant vers un parent, il s'agit d'une simple relation parent <-- enfant.
Diagramme linéaire d'une chaîne simple, monoparentale, s'enchaînant à rebours dans le temps :
(older) ... <--link1-- Commit1 <--link2-- Commit2 <--link3-- Commit3 (newest)
BRANCHES
branche - Une "branche" est une ligne active de développement. Le commit le plus récent sur une branche est appelé l'extrémité de cette branche. L'extrémité de la branche est référencée par une tête de branche, qui se déplace qui avance au fur et à mesure que des développements supplémentaires sont effectués sur la branche. Un seul dépôt Git peut piste un nombre arbitraire de branches, mais votre arbre de travail n'est associé qu'à l'une d'entre elles (la branche "courante" ou "checke"). "check out"), et HEAD pointe vers cette branche. ( gitglossary )
Une branche git fait également référence à deux choses :
- un nom donné à une pointe de croissance, (un identifiant), et
- la branche actuelle dans le graphe des liens entre les commits.
Plus d'un enfant pointant vers un--> parent est ce que git appelle " ramification ".
NOTE : En réalité, tout enfant, de tout parent, qu'il soit premier, deuxième ou troisième, etc., peut être considéré comme sa propre petite branche, avec sa propre pointe de croissance. Ainsi, une branche n'est pas nécessairement une longue chose avec de nombreux noeuds, mais plutôt une petite chose, créée avec juste un ou plusieurs commits d'un parent donné.
Le premier enfant d'un parent peut être considéré comme faisant partie de cette même branche, tandis que les enfants successifs de ce parent sont ce que l'on appelle normalement des " enfants ". branches ".
En réalité, tous les enfants (pas seulement le premier) se ramifient à partir de leur parent, ou vous pourriez dire que lien mais je dirais que chaque lien est en fait la partie centrale de une branche .
Formellement, une "branche" git est juste un nom comme "foo" par exemple, donné à une extrémité croissante spécifique d'une hiérarchie familiale. C'est un type de ce qu'on appelle un " réf. ". (Les étiquettes et les télécommandes que j'expliquerai plus tard sont également des références).
réf. - Un nom qui commence par refs/ (par exemple refs/heads/master) qui pointe vers un nom d'objet ou un autre ref (ce dernier est appelé un ref symbolique). Par commodité, une ref peut parfois être abrégée en lorsqu'elle est utilisée comme argument d'une commande Git ; voir gitrevisions(7) pour plus de détails. détails. Les références sont stockées dans le référentiel.
L'espace de nom ref est hiérarchique. Différentes sous-hiérarchies sont utilisées à des fins différentes (par exemple, la hiérarchie refs/heads/ est utilisée pour représenter les branches locales). Il existe quelques refs spéciales qui ne commencent pas par refs/. ne commencent pas par refs/. L'exemple le plus notable est HEAD. ( gitglossary )
(Vous devriez jeter un coup d'œil à l'arborescence des fichiers dans votre répertoire .git. C'est là que la structure de git est enregistrée).
Ainsi, par exemple, si votre nom est Tom, les commits liés entre eux qui ne comprennent que des instantanés de vous, pourraient constituer la branche que nous nommons "Tom".
Ainsi, alors que l'on peut penser qu'une branche d'arbre est constituée de tout son bois, dans git, une branche est juste un nom donné à ses extrémités en croissance, et non à l'ensemble du bois qui y mène.
L'extrémité de croissance spéciale et sa branche, qu'un arboriste (un gars qui taille les arbres fruitiers) appellerait le "leader central", est ce que git appelle " maître ".
La branche principale existe toujours.
Diagramme linéaire de : Commit1 avec 2 enfants (ou ce que nous appelons un git " branche ") :
parent children
+-- Commit <-- Commit <-- Commit (Branch named 'Tom')
/
v
(older) ... <-- Commit1 <-- Commit (Branch named 'master')
N'oubliez pas qu'un lien uniquement pointe de l'enfant vers le parent. Il n'y a pas de lien pointant dans l'autre sens, c'est-à-dire de l'ancien au nouveau, c'est-à-dire du parent à l'enfant.
Un commit parent n'a donc aucun moyen direct de lister ses commits enfants, ou en d'autres termes, ce qui a été dérivé de lui.
FUSION
Les enfants ont un ou plus les parents.
-
Avec un seul parent, il s'agit d'un simple engagement parent <-- enfant.
-
Avec plus d'un parent, c'est ce que git appelle " fusionner ". Chaque enfant peut renvoyer à plus d'un parent en même temps, tout comme avoir une mère ET un père, et pas seulement une mère.
Diagramme linéaire de : Commit2 avec 2 parents (ou ce que nous appelons un git " fusionner ", c'est-à-dire la procréation à partir de parents multiples) :
parents child
... <-- Commit
v
\
(older) ... <-- Commit1 <-- Commit2
REMOTE
Ce mot est également utilisé pour signifier 2 choses différentes :
- un référentiel distant, et
- le nom de l'alias local d'un référentiel distant, c'est-à-dire un nom qui pointe vers un référentiel distant à l'aide d'une URL.
référentiel distant - Un référentiel qui est utilisé pour suivre le même projet mais qui réside ailleurs. Pour communiquer avec les dépôts distants, voir fetch ou push. ( gitglossary )
(Le dépôt distant peut même être un autre dépôt git sur notre propre ordinateur). En fait, il y a deux URL pour chaque nom distant, une pour pousser (c'est-à-dire télécharger des commits) et une pour tirer (c'est-à-dire télécharger des commits) de ce dépôt git distant.
A " à distance " est un nom (un identifiant) auquel est associée une URL qui pointe vers un dépôt git distant. (Il a été décrit comme un alias pour une URL, bien que ce soit plus que cela).
Vous pouvez configurer plusieurs dépôts distants si vous voulez tirer ou pousser vers plusieurs dépôts distants.
Mais souvent, vous n'en avez qu'un seul, et son nom par défaut est "origin" (c'est-à-dire l'origine amont à partir de laquelle vous avez cloné).
origine - La valeur par défaut en amont dépôt. La plupart des projets ont au moins un projet amont qu'ils suivent. Par défaut, origin est utilisé à cette fin. Les nouvelles mises à jour amont seront récupérées dans Branches de suivi à distance nommé origin/name-of-upstream-branch, que vous pouvez voir en utilisant git branch -r. ( gitglossary )
L'origine représente l'endroit d'où vous avez cloné le référentiel.
Ce référentiel distant est appelé le référentiel "amont", et votre référentiel cloné est appelé le référentiel "aval".
en amont - Dans le développement de logiciels, l'expression "en amont" désigne une direction vers les auteurs ou les mainteneurs originaux d'un logiciel distribué sous forme de code source. wikipedia
branche amont - La branche par défaut qui est fusionnée avec la branche en question (ou sur laquelle la branche en question est rebasée). Elle est configurée via branch..remote et branch..merge. Si la branche amont de A est origin/B, on dit parfois "A suit origin/B". ( gitglossary )
En effet, la majeure partie de l'eau s'écoule généralement vers vous.
De temps en temps, il se peut que vous repoussiez un logiciel vers le dépôt amont, afin qu'il puisse ensuite être transmis à tous ceux qui l'ont cloné.
BRANCHE DE SUIVI À DISTANCE
Une branche de suivi à distance est d'abord un simple nom de branche, comme tout autre nom de branche.
Il pointe vers une pointe de croissance locale, c'est-à-dire un commit récent dans le fichier votre dépôt git local.
Mais notez qu'il pointe également vers le même commit dans le référentiel distant à partir duquel vous avez cloné le commit.
Branche de suivi à distance - Une référence qui est utilisée pour suivre les changements d'un autre dépôt. Elle ressemble typiquement à refs/remotes/foo/bar (indiquant qu'elle suit une branche nommée bar dans un dépôt distant nommé foo), et correspond au côté droit d'une spécification de référence de récupération configurée. Une branche de suivi à distance ne doit pas contenir de modifications directes ou avoir de commits locaux. ( gitglossary )
Disons que le dépôt distant que vous avez cloné a juste 2 commits, comme ceci : parent42 <== child-of-4, et vous le clonez et maintenant votre dépôt git local a exactement les deux mêmes commits : parent4 <== child-of-4.
Votre branche de suivi à distance nommée origine pointe maintenant vers child-of-4.
Maintenant, disons qu'un commit est ajouté au distant, de sorte qu'il ressemble à ceci : parent42 <== enfant-de-4 <== nouveau-bébé. Pour mettre à jour votre dépôt local, en aval, vous devrez récupérer new-baby, et l'ajouter à votre dépôt git local. Maintenant, votre branche locale de suivi à distance pointe vers new-baby. Vous comprenez l'idée, le concept d'une branche de suivi à distance est simplement de garder la trace de ce qui était auparavant l'extrémité d'une branche distante qui vous intéresse.
LE SUIVI EN ACTION
Tout d'abord, nous commençons à suivre un fichier avec git.
Voici les commandes de base impliquées dans le suivi des fichiers :
$ mkdir mydir && cd mydir && git init # create a new git repository
$ git branch # this initially reports no branches
# (IMHO this is a bug!)
$ git status -bs # -b = branch; -s = short # master branch is empty
## No commits yet on master
# ...
$ touch foo # create a new file
$ vim foo # modify it (OPTIONAL)
$ git add foo; commit -m 'your description' # start tracking foo
$ git rm --index foo; commit -m 'your description' # stop tracking foo
$ git rm foo; commit -m 'your description' # stop tracking foo & also delete foo
LE SUIVI À DISTANCE EN ACTION
$ git pull # Essentially does: get fetch; git merge # to update our clone
Il y a encore beaucoup à apprendre sur la récupération, la fusion, etc., mais cela devrait vous mettre sur la bonne voie, je l'espère.
7 votes
Une remarque terminologique : le mot piste dans Git, est très surchargé. Certains fichiers sont traqué et certains sont non suivi ; certains noms de branches sont appelés branches de suivi à distance ; et vous pouvez utiliser le
--track
pour créer une branche (locale) dont l'une des branches de suivi à distance est définie comme sa branche de suivi à distance. en amont . La terminologie a quelque peu évolué entre 2006 et 2019, de sorte que différentes personnes mai signifient parfois quelque chose de différent par chacun de ces mots.0 votes
Je recommande personnellement d'utiliser la phrase Noms de repérage à distance à la place de Branches de suivi à distance en partie parce que le mot branche est également assez surchargé. Les noms de suivi à distance sont ceux qui ressemblent à
origin/master
: ils sont dans votre dépôt, mais c'est la façon dont Git se souvient de noms des branches comme on le voit dans certains autre Dépôt Git à l'adresseorigin
. Si vous utilisez ensuite le mot en amont qui est le terme plus moderne, pour dire que votremaster
aorigin/master
comme son en amont vous pouvez éviter toute cette confusion terminologique.0 votes
@torek, le terme "branche de suivi à distance" ne peut pas être remplacé par l'expression "noms de suivi à distance", car les branches de suivi ont un état physique, qui peut être différent de celui des branches locales et distantes.
0 votes
@MichaelFreidgeim : Une rose, par n'importe quel autre nom... Si vous êtes concerné par le stockage d'un ID de hachage, vous devez savoir que dans Git, les ID de hachage sont stockés dans le répertoire noms . Pas seulement branche noms, mais étiquette des noms,
refs/stash
, les noms de bissectrices, et d'autres noms : tous ces noms stockent un ID de hachage.