【问题标题】:In git, what is the difference between a commit(s) and a revision(s)在 git 中,commit(s) 和 revision(s) 有什么区别
【发布时间】:2012-08-01 07:32:32
【问题描述】:

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

提交和修订有什么区别(在 git 中,rather than say svn)?

还是在尝试计算修订/提交时仅以复数形式显示,例如必须通过遍历提交及其父项的 DAG(有向无环图)或其他一些仔细区分来计算修订?

【问题讨论】:

    标签: git version-control


    【解决方案1】:

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

    【讨论】:

    • 我更多地考虑的是修订的“计数”视图(例如 5 个修订),而不是描述完全相同的修订的(非常)多种方式! ;-)
    【解决方案2】:

    参见git rev-parse 的“SPECIFYING REVISIONS”:

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

    所以“修订”是指您可以用作参数的 id,以引用 git 中的对象(通常是提交)。

    HEAD@{5 minutes ago} 是引用 5 分钟前提交的修订版。

    gitrevision 提及:

    [...] 一些 Git 命令(例如 git show)也采用 revision 参数,这些参数表示提交以外的其他对象,例如blob(“文件”)或(“文件目录”)。

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

    <rev>:<path>, e.g. HEAD:README, :README, master:./README
    

    后缀 : 后跟一个路径,在冒号之前的部分命名的树状对象中,给定路径上的 blob 或树命名。


    Git 中的“提交”通常指定一个“提交对象”(如git commit-tree 中所述):

    一个提交封装:

    • 所有父对象 ID
    • 作者姓名、电子邮件和日期
    • 提交者姓名和电子邮件以及提交时间。

    所以:

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

    在你的情况下 (git clone) --depth &lt;n&gt; 会:

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

    它适用于在该深度可访问的所有提交,DAG 中的每个路径最多有 n 修订。
    由于结果可能比n 提交更多,因此此处更适合使用修订一词,以强调您不只希望n 提交,而是最多可访问n 修订所引用的任何提交。

    但是,在这种情况下,修订明确地引用了可访问的提交(如下图所示)(正如您在“Is git clone --depth 1 (shallow clone) more useful than it makes out?”中提到的)。

    问题是“从什么可达”?

    您引用了this thread,其中包括:

    IIRC,--depth=&lt;n&gt; 不是“加深&lt;n&gt;”,而是“确保我至少有来自更新提示的&lt;n&gt;”。
    如果您过去以浅克隆方式并在另一方添加比&lt;n&gt; 更多的提交后使用--depth 获取,那么浅克隆黑客会给您带来非常无用的语义(即使它可能是内部一致的),因为您不能猜对了 &lt;n&gt; 的值应该是没有--depth 的实际获取。

    【讨论】:

    • C: 所以从这个意义上说,一个特定的(这个)修订总是解析为一个特定的(那个)提交,一个一对一(一种方式)的映射,尽管映射可能会随着时间的推移而改变并添加了新的提交。从这个角度来看,修订是指定特定提交的多种方式。我对复数的修订计数方面的使用很感兴趣。
    • @PhilipOakley 好的,我已经编辑了答案以使用我在 git clone 的上下文中所做的区分(它只使用了一次工作“revision”)
    • 如果您可以举一个没有命名提交对象的修订示例,这可能会很有用?我可能会误解,但我看不出你的回答。
    • @Mark,我很高兴“修订”指向“提交”。问题实际上是关于复数形式的修订,可能由范围和深度给出,以及如何避免对选择中包含的内容产生任何混淆(我已经看到浅克隆 depth 混淆出现了几次)
    • @PhilipOakley 你有关于浅克隆的--depth 参数这样混淆的例子吗?
    猜你喜欢
    • 2021-02-26
    • 2010-12-14
    • 1970-01-01
    相关资源
    最近更新 更多