在git中,commit(s)和revision(s)之间有什么区别

Phi*_*ley 14 git version-control

有许多git命令,例如git clone --depth 10 <repo>,需要给出修订[ git help revisions] 的数量.

提交和修订之间有什么区别(在git中,而不是说svn)?

或者在尝试计算修订/提交时它是否只显示复数形式,例如,必须通过走向提交及其父母的DAG(有向无环图)或其他一些仔细区分来计算修订?

Von*_*onC 10

请参阅git rev-parse的 " 指定修订 " :

修订参数<rev>通常(但不一定)命名提交对象.
它使用所谓的扩展SHA1语法,[并包括]各种方法来拼写对象名称.

所以"修订版"是指你可以用作参数来引用 git中的对象(通常是提交).

HEAD@{5 minutes ago} 是一个引用5分钟前提交的修订版本.

gitrevision 提到:

[...]某些Git命令(例如git show)也会使用修订参数来表示除提交之外的其他对象,例如blob("文件")或("文件目录").

例如,以下rev参数不引用提交:

<rev>:<path>, e.g. HEAD:README, :README, master:./README
Run Code Online (Sandbox Code Playgroud)

:后跟路径的后缀命名在冒号前面的部分命名的树形对象中给定路径上的blob或树.


Git中的"提交"通常指定"提交对象 "(git commit-tree例如,如中所述):

提交封装:

  • 所有父对象id
  • 作者姓名,电子邮件和日期
  • 提交者姓名和电子邮件以及提交时间.

所以:

  • 一个提交指定一个 git对象(其他是blob,树,标签,注释),
  • 修订是一种引用git对象的方法.

在你的情况下(git clone)--depth <n>做:

创建一个浅层克隆,其历史记录被截断为指定的修订数.

它适用于在该深度可访问的所有提交,直到nDAG中每个路径的修订.
由于结果可能不仅仅是n提交,因此术语修订在这里更加适应,以强调您不仅仅需要n提交,而是n可以访问最多修订引用的任何提交.

但是,在这种情况下,修订版清楚地引用了只有提交(如下图所示)可达(如" Is git clone --depth 1(浅层克隆)中提到的更有用吗? ").

问题是"可以从什么地方到达"?

你引用了这个帖子,其中包括:

IIRC,--depth=<n>不是"加深<n>",而是" 确保我至少<n>从更新的提示中获得 ".
如果你在过去采用浅层克隆方式并且--depth在另一方添加了更多提交之后提取,那么浅克隆黑客会给你很多无用(即使它可能是内部一致的)语义<n>,因为你无法猜出什么是正确的值<n>应该没有实际取得--depth.


Nou*_*him 5

有趣的。我以前没有遇到过这种区别,但从浏览文档和我自己的经验来看,git 中的提交是一个指向项目历史中特定时间点的对象(以及有关它如何到达那里的信息) 。修订版是其超集,它讨论引用一个提交或一系列提交的不同方式。