Je pense que cette notation git slash est probablement mieux comprise en regardant à l'intérieur de votre .git
dossier.
Par exemple, voici un arbre quelque peu abrégé de mon .git pour la base source de LibreOffice.
Sous Linux, il sudo apt-get install tree
est utile de voir cela.
Sous Windows, je pense que la tree
commande pourrait encore fonctionner.
Faites défiler vers le bas et jetez un œil aux références (alias «références») près du bas:
$ tree
.
├── branches
├── config
├── description
├── FETCH_HEAD
├── gitk.cache
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
...
├── index
├── info
│ └── exclude
├── logs
│ ├── HEAD
│ └── refs
│ ├── heads
│ │ ├── master
│ │ └── remotes
│ │ └── origin
│ └── remotes
│ └── origin
│ ├── distro
│ │ ├── cib
│ │ │ └── libreoffice-6-0
│ │ ├── collabora
│ │ │ └── cp-6.0
│ │ └── lhm
│ │ └── libreoffice-5-2+backports
│ ├── HEAD
│ ├── libreoffice-6-2
│ ├── master
│ └── private
│ └── mst
│ └── sw_redlinehide_4a
├── objects
│ ├── info
│ └── pack
│ ├── pack-b80087dc57e2b3315f449ca0f1aaa91987bf0c5e.idx
│ ├── pack-b80087dc57e2b3315f449ca0f1aaa91987bf0c5e.pack
│ ├── pack-eb4e6808029e712d8d9c2671accbbd98aaeb9a04.idx
│ └── pack-eb4e6808029e712d8d9c2671accbbd98aaeb9a04.pack
├── ORIG_HEAD
├── packed-refs
└── refs
├── heads
│ ├── master
│ └── remotes
│ └── origin
├── remotes
│ └── origin
│ ├── distro
│ │ ├── cib
│ │ │ └── libreoffice-6-0
│ │ ├── collabora
│ │ │ └── cp-6.0
│ │ └── lhm
│ │ └── libreoffice-5-2+backports
│ ├── HEAD
│ ├── libreoffice-6-2
│ ├── master
│ └── private
│ └── mst
│ └── sw_redlinehide_4a
└── tags
└── libreoffice-6-2-branch-point
32 directories, 45 files
Cela aurait pu être moins déroutant si cela avait été présenté comme ça, mais ce n'était pas le cas:
repositories (i.e. independent trees)
├──local
│ └──master
│
└──origin1
│ └──master
└──origin2
└──master
Nous avons trois types de références de base: têtes , télécommandes et balises .
.git / refs / heads détient notre maître local .
.git / refs / télécommandes peuvent contenir un certain nombre de télécommandes, bien que pour le moment nous avons seulement l' origine en elle.
.git / refs / tags (est discuté ailleurs).
origine ainsi, est notre seule et unique télécommande. Il contient origine / master .
Nous constatons que nous avons 2 HEADS (pointeurs vers les branches actuelles), un local et un distant:
$ cat .git/HEAD # local: HEAD -> master
ref: refs/heads/master
$ cat .git/refs/remotes/origin/HEAD # remote origin: HEAD -> master
ref: refs/remotes/origin/master
Si vous listez vos succursales :
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/aoo/aw080
remotes/origin/aoo/trunk
remotes/origin/distro/capgemini/cg-4.1
remotes/origin/distro/cib/libreoffice-5-0
remotes/origin/distro/cib/libreoffice-5-1
remotes/origin/distro/cib/libreoffice-5-2
...
- La première branche répertoriée ( maître ) est la seule qui n'est pas une télécommande. Donc, dans ce cas, nous avons une succursale locale. C'est à partir de là que nous commencerons notre propre travail, pour nos propres nouvelles succursales et commits ultérieurs.
Ensuite, vous pouvez avoir de nombreuses succursales de suivi à distance, et nous en avons ici. Vous savez que ce sont des branches de suivi à distance car elles sont préfixées par ' télécommandes / '. Ceux indiqués ici sont pour l'origine nommée à distance.
Ainsi, la deuxième ligne est le pointeur de branche actuel de l'origine . Télécommandes / origine: HEAD - pointe vers -> master. Cela montre que dans le référentiel distant, la branche actuelle est leur branche nommée master (à ne pas confondre avec notre branche locale nommée master ).
Les branches restantes ne se trouvent pas dans votre .git / refs / arborescence, mais vous les trouverez plutôt dans .git/packed-refs
.
Lorsque nous git fetch nous téléchargeons les modifications du référentiel distant, dans notre référentiel de suivi à distance.
Lorsque nous fusionnons git, nous fusionnons les modifications de ce référentiel de suivi à distance local dans notre ou nos branches locales de travail, dans ce cas dans notre branche principale.
(Lorsque nous git pull, nous faisons ces deux étapes en une seule opération.)
Il est également intéressant de noter que ces UUID locaux et distants pour le maître pointent actuellement vers le même nœud (alias «commit»):
$ cat refs/heads/master # local master
1ca409292272632f443733450313de5a82c54a9c
$ cat refs/remotes/origin/master # remote origin master
1ca409292272632f443733450313de5a82c54a9c
Notre maître local pointe donc au même endroit que le maître d'origine de la télécommande:
[local] master = [remote] origin master
Enfin, je pense qu'il est également utile de jeter un œil à .git/packed-refs
$ cat packed-refs
# pack-refs with: peeled fully-peeled
3c1d4742e649fe9c8aed8c2817fe3e1f3364f298 refs/remotes/origin/aoo/aw080
e87c8b7922e9a73e0abb7f9a7a47c9ac3374a826 refs/remotes/origin/aoo/trunk
b70fdffb041c12f124dcc0822b61bf3450e53137 refs/remotes/origin/distro/capgemini/cg-4.1
5dbc3f1754809b9489faaf380b1a4bdbcfbb6205 refs/remotes/origin/distro/cib/libreoffice-5-0
cfdbc96ca47d68d6785fd21829a8d61f49d6e591 refs/remotes/origin/distro/cib/libreoffice-5-1
5189c8c47461ef09739086e55512fc6a10245273 refs/remotes/origin/distro/cib/libreoffice-5-2
3bee5917569ca8e6ee3b086458f5b1a917b88ca1 refs/remotes/origin/distro/cib/libreoffice-5-3
92fbe703f9ca480d3a2b8610d87e991c729edf77 refs/remotes/origin/distro/cib/libreoffice-5-4
05c0a5df66cc69d75280f05b804cf82f3387d42b refs/remotes/origin/distro/cib/libreoffice-6-0
7fe193e759b24b90852e6e327115b77114d7b119 refs/remotes/origin/distro/cib/libreoffice-6-1
8187f7aa413e7ef7b377eea2b057d336bf256867 refs/remotes/origin/distro/collabora/cd-5.3
7a6b608591e21ef61dc05cff9fc58da531035755 refs/remotes/origin/distro/collabora/cd-5.3-3.1
....
Cela laisse sans doute plus de questions que de réponses, mais je pense que cela peut commencer à vous aider à répondre à vos propres questions sur ce qui est quoi.