Git 中的提交和修订有什么区别?

问题描述 投票:0回答:3

有许多 git 命令,例如

git clone --depth 10 <repo>
,需要给出修订数量 [
git help revisions
]。

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

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

git version-control terminology
3个回答
30
投票

请参阅 git rev-parse 的“指定修订版”:

修订参数

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

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

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

gitrevision
提到:

[...] 一些 Git 命令(例如

git show
)也采用 revision 参数,这些参数表示除提交之外的其他对象,例如blob(“文件”)或trees(“文件目录”)。

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

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

后缀

:

 后跟路径,用于命名树形对象中给定路径处的 blob 或树,该对象由冒号之前的部分命名。


Git 中的“提交”通常指定“提交

对象”(例如,如git commit-tree

中所述):

提交封装了:

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

所以:

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

就您而言(

git clone

--depth <n>
会:

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

修订

它适用于在该深度可访问的所有提交,DAG 中每个路径最多

n

 修订。
由于结果可能超过
n
 次提交,因此术语“修订”在这里更适合,以强调您不仅仅需要 
n
 次提交,而是最多可访问 
n
 次修订引用的任何提交。

但是,在这种情况下,修订显然仅引用可访问的提交(如下所示)(正如您在“

git clone --depth 1

(浅克隆)比它所表明的更有用吗?
”中提到的)。

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

您引用了

此线程,其中包括:

IIRC,

--depth=<n>

不是“加深
<n>
”,而是“
确保我至少从更新的提示中获得了<n>
”。
如果您过去进行浅克隆方式并在另一方添加了比
--depth
更多的提交后使用
<n>
获取,那么浅克隆黑客会给您带来非常无用的(即使它可能内部一致)语义,因为您不能猜猜什么是正确的
<n>
的值应该是在没有
--depth
的情况下实际获取的。

    


4
投票


0
投票

—gitglossary(7)(git 版本 2.47)

猜测

我想当你想制作手册页时,同义词会很方便 (gitrevisions(7)) 并且你还想让它与 git 提交(1).

© www.soinside.com 2019 - 2024. All rights reserved.