La réponse courte (TL; DR)
Voici une liste complète des identifiants commit-ish et tree-ish (à partir de la documentation des révisions Git ):
----------------------------------------------------------------------
| 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.txt, master:sub-directory/
----------------------------------------------------------------------
| Tree-ish? | Examples
----------------------------------------------------------------------
| 16. :<n>:<path> | :0:README, :README
----------------------------------------------------------------------
Les identificateurs # 1-14 sont tous "commit-ish", car ils mènent tous à des commits, mais comme les commits pointent également vers des arborescences de répertoires, ils mènent tous finalement à des objets d'arborescence de (sous) répertoires, et peuvent donc également être utilisés comme "arborescence" -ish ".
# 15 peut également être utilisé comme arborescence lorsqu'il fait référence à un (sous) répertoire, mais il peut également être utilisé pour identifier des fichiers spécifiques. Quand il fait référence à des fichiers, je ne sais pas s'il est toujours considéré comme "tree-ish", ou s'il agit plus comme "blob-ish" (Git fait référence aux fichiers comme "blobs").
La longue réponse
Commits et arborescences de répertoires dans Git
À ses niveaux les plus bas, Git assure le suivi du code source à l'aide de quatre objets fondamentaux:
- Balises annotées, qui pointent vers des commits.
- Commits, qui pointent vers l'arborescence de répertoires racine de votre projet.
- Les arbres, qui sont des répertoires et des sous-répertoires.
- Blobs, qui sont des fichiers.
Chacun de ces objets a son propre ID de hachage sha1, puisque Linus Torvalds a conçu Git comme un système de fichiers adressable par le contenu , c'est-à-dire que les fichiers peuvent être récupérés en fonction de leur contenu (les ID sha1 sont générés à partir du contenu du fichier). Le livre Pro Git donne cet exemple de diagramme :
Commit-ish vs Tree-ish
De nombreuses commandes Git peuvent accepter des identificateurs spéciaux pour les commits et les arborescences de (sous) répertoires:
"Commit-ish" sont des identificateurs qui mènent finalement à un objet de commit. Par exemple,
tag -> commit
"Tree-ish" sont des identifiants qui mènent finalement à des objets d'arborescence (ie répertoire).
tag -> commit -> project-root-directory
Étant donné que les objets de validation pointent toujours vers un objet d'arborescence de répertoires (le répertoire racine de votre projet), tout identificateur qui est "commit-ish" est, par définition, également "tree-ish". En d'autres termes, tout identifiant menant à un objet de validation peut également être utilisé pour conduire à un objet d'arborescence de (sous) répertoires .
Mais comme les objets de l'arborescence de répertoires ne pointent jamais vers des commits dans le système de gestion des versions de Git, tous les identificateurs qui pointent vers une (sous) arborescence de répertoires ne peuvent pas également être utilisés pour pointer vers un commit. En d'autres termes, l'ensemble des identifiants "commit-ish" est un sous-ensemble strict de l'ensemble des identifiants "tree-ish".
L'ensemble des identificateurs d'arborescence qui ne peuvent pas être utilisés comme commit-ish sont
<rev>:<path>
, qui mène directement aux arborescences de répertoires, pas aux objets de validation. Par exemple HEAD:subdirectory
,.
Identificateurs Sha1 des objets de l' arborescence de répertoires .
stash@{0}
. J'aimerais savoir où cela s'inscrit dans tout cela. Y a-t-il d'autres choses comme la cachette (my-thing@{0}
)? La cachette est-elle juste un<refname>
?Remarque pour les anglophones [sic!] Non natifs: "-ish" est un suffixe qui peut être appliqué à un adjectif pour indiquer "ayant des qualités comme" ou "légèrement" - voir http://chambers.co.uk / search /? query = ish & title = 21e
D'où "tree-ish" - comme un "tree" .... "commit-ish" - comme un "commit"
par exemple "Mars apparaît comme une étoile rougeâtre" ("d" est doublé!); "la nourriture dans l'assiette n'était pas chaude, mais tiède"
Je pense que cela aide à expliquer "ce qui est ..." mieux, en ce sens que cela explique l'utilisation du langage.
la source