La réponse courte (TL;DR)
Le terme "arborescent" fait référence à tout identifiant (tel que spécifié dans le document le Git sur les révisions ) qui aboutit finalement à un (sous-)répertoire (Git désigne les répertoires par les termes "arbres" et "objets arbres").
Dans le cas de l'affiche originale, foo
est un répertoire qu'il veut spécifier. La manière correcte de spécifier un (sous-)répertoire dans Git est d'utiliser ceci syntaxe "arborescente" (point #15 de l'article la documentation sur les révisions Git ):
<rev>:<path>
, par exemple HEAD:README
, :README
, master:./README
Un suffixe :
suivi d'un chemin d'accès nomme le blob ou l'arbre au chemin d'accès donné dans l'objet arborescent nommé par la partie précédant les deux points.
En d'autres termes, master:foo
est la syntaxe correcte, et non master/foo
.
Autre "arbre" (plus engagement)
Voici une liste complète des identificateurs d'arbres et d'engagements (à partir de le Git sur les révisions , merci à LopSae de l'avoir signalé de l'avoir signalé ):
----------------------------------------------------------------------
| Commit-ish/Tree-ish | Examples
----------------------------------------------------------------------
| 1. <sha1> | dae86e1950b1277e545cee180551750029cfe735
| 2. <describeOutput> | v1.7.4.2-679-g3bee7fb
| 3. <refname> | master, heads/master, refs/heads/master
| 4. <refname>@{<date>} | master@{yesterday}, HEAD@{5 minutes ago}
| 5. <refname>@{<n>} | master@{1}
| 6. @{<n>} | @{1}
| 7. @{-<n>} | @{-1}
| 8. <refname>@{upstream} | master@{upstream}, @{u}
| 9. <rev>^ | HEAD^, v1.5.1^0
| 10. <rev>~<n> | master~3
| 11. <rev>^{<type>} | v0.99.8^{commit}
| 12. <rev>^{} | v0.99.8^{}
| 13. <rev>^{/<text>} | HEAD^{/fix nasty bug}
| 14. :/<text> | :/fix nasty bug
----------------------------------------------------------------------
| Tree-ish only | Examples
----------------------------------------------------------------------
| 15. <rev>:<path> | HEAD:README, :README, master:./README
----------------------------------------------------------------------
| Tree-ish? | Examples
----------------------------------------------------------------------
| 16. :<n>:<path> | :0:README, :README
----------------------------------------------------------------------
Les identifiants 1 à 14 sont tous de type "commit", parce qu'ils conduisent tous à des "commits", mais aussi parce que les "commits" ont aussi une incidence sur les "commits". mais comme les commits pointent également vers des arborescences, ils conduisent tous à des objets d'arborescence (sous-)répertoriée. (sous-)arborescences de répertoires et peuvent donc également être utilisés comme "arborescents".
15 peut également être utilisé comme arborescent lorsqu'il se réfère à un (sous-)répertoire, mais il peut également être utilisé pour identifier des fichiers spécifiques. Lorsqu'il se réfère à des fichiers, je ne suis pas s'il est toujours considéré comme "arborescent", ou s'il agit plutôt comme un "blob" (Git se réfère aux fichiers en tant que "blobs").
La longue réponse
Au niveau le plus bas, Git assure le suivi du code source à l'aide de quatre éléments fondamentaux fondamentaux :
- Les balises annotées, qui pointent vers les commits.
- Commits, qui pointe vers l'arborescence du répertoire racine de votre projet.
- Les arbres, qui sont des répertoires et des sous-répertoires.
- Les blobs, qui sont des fichiers.
Chacun de ces objets possède son propre identifiant de hachage sha1, puisque Linus Torvalds a conçu Git comme un adressable par le contenu système de fichiers, c'est-à-dire que les fichiers peuvent être récupérés sur la base de leur contenu (les identifiants sha1 sont générés à partir du contenu du fichier). Le livre Pro Git donne cet exemple de diagramme :
De nombreuses commandes Git peuvent accepter des identifiants spéciaux pour les commits et les arborescences de (sous-)répertoires. répertoires :
-
Les identifiants de type "commit" sont des identifiants qui mènent finalement à un objet de type "commit". Par exemple,
tag -> commit
-
Les identificateurs "arborescents" sont des identificateurs qui mènent finalement à des objets arborescents (c'est-à-dire des répertoires).
tag -> commit -> project-root-directory
Étant donné que les objets commit pointent toujours vers un objet d'arborescence de répertoire (l'objet Root de votre projet), tout identifiant de type "commit" est, par définition, également "arborescent". est, par définition, également "arborescent". En d'autres termes, tout identifiant qui mène à un peut également être utilisé pour mener à un objet d'arborescence de (sous-)répertoires. .
Mais comme les objets de l'arborescence des répertoires ne pointent jamais vers les commits dans le système de gestion des versions de Git Git, tous les identifiants qui pointent vers une arborescence de (sous-)répertoires ne peuvent pas être être utilisé pour pointer vers un commit. En d'autres termes, l'ensemble des identificateurs de type "commit" (engagement) est un sous-ensemble strict de l'ensemble des identifiants "arborescents".
Comme expliqué dans l'affaire la documentation ( merci à Trebor pour son aide à le trouver ):
<tree>
Indique le nom d'un objet de l'arbre.
<commit>
Indique un nom d'objet de livraison.
<tree-ish>
Indique un nom d'arbre, de commit ou d'objet de balise. Une commande qui prend un <tree-ish>
veut en fin de compte opérer sur un <tree>
mais automatise l'objet. déréférence <commit>
y <tag>
des objets qui pointent vers un <tree>
.
<commit-ish>
Indique un nom de commit ou d'objet de balise. Une commande qui prend un <commit-ish>
veut en fin de compte opérer sur un <commit>
mais automatiquement déréférence <tag>
des objets qui pointent vers un <commit>
.
L'ensemble des identifiants arborescents qui ne peut pas être utilisé comme un commit-ish sont
-
<rev>:<path>
ce qui conduit à directement aux arborescences de répertoires, et non pas d'engager et non à des objets d'engagement. Par exemple, HEAD:subdirectory
.
-
Identifiants Sha1 de l'arborescence des répertoires objets.