Une arborescence est une collection hiérarchique de fichiers et de répertoires, non liée à un point particulier de l'histoire. Par exemple, si vous créez un fichier, puis supprimez le fichier ultérieurement (sans autres validations intermédiaires), vous vous retrouverez avec la même arborescence que celle avec laquelle vous avez commencé.
Un commit est un point dans l'histoire de votre projet. Un commit spécifie une arborescence, mais contient également d'autres informations telles que l'auteur / committer et l'heure, un message de commit (dans lequel l'auteur décrit ce qui a changé), et surtout zéro ou plusieurs parents, qui sont l'état précédent du référentiel. (Votre tout premier commit n'a aucun parent. La plupart des commit après cela ont un parent pendant le développement linéaire, et plus d'un si vous fusionnez.)
Vous pouvez avoir une idée de la façon dont cela fonctionne avec la git cat-file -p
commande, qui imprime le contenu d'un hachage particulier, quel que soit le type. Par exemple, pour consulter la validation HEAD, vous pouvez exécuter:
$ git cat-file -p HEAD
tree 81ca1cb660ea79131336944df28b13b711d93557
parent 92b6b8fe9956866ace5397e060e7cc8ee1c76233
parent 7ea2575ed96d150ee19f70edea4bd42c7c2f0b83
author Mislav MarohniÄ <[email protected]> 1436468108 -0700
committer Mislav MarohniÄ <[email protected]> 1436468108 -0700
Merge pull request #951 from github/global-args
Avoid depending on a hardcoded list of git global flags
Pour voir l'arbre à l'intérieur de ce commit, vous pouvez cat-file -p
son arbre:
$ git cat-file -p 81ca1cb660ea79131336944df28b13b711d93557
100644 blob 730f77a3be502cfe6769c1305c0b59c22274caf5 .gitignore
100644 blob bcbd000f6b9ad5b0510f804ac4a3b19306b39c03 .travis.yml
100644 blob da71aa1fa3c3ae47b2fe5e6245ce2eea1586e278 CONTRIBUTING.md
...
De même, si vous regardez les parents, vous verrez que ce sont aussi des commits. Un raccourci pour l'arbre à l' intérieur d' une validation comme rev
est -à rev^{tree}
. Ainsi, la commande précédente aurait pu être écrite git cat-file -p HEAD^{tree}
. Notez que rev^
représente le parent de rev
. Quand il y a plusieurs parents, rev^1
, rev^2
, etc. Plus d' informations sont disponibles dans le rev-parse page man git .
commit has
signifie au début de votre 3ème paragraphe?