有许多 git 命令,例如git clone --depth 10 <repo>
,需要给出修订数 [ git help revisions
]。
提交和修订之间有什么区别(在 git 中,而不是说 svn)?
还是仅在尝试计算修订/提交时以复数形式显示,例如必须通过遍历提交及其父项的 DAG(有向无环图)或其他一些仔细的区别来计算修订?
有许多 git 命令,例如git clone --depth 10 <repo>
,需要给出修订数 [ git help revisions
]。
提交和修订之间有什么区别(在 git 中,而不是说 svn)?
还是仅在尝试计算修订/提交时以复数形式显示,例如必须通过遍历提交及其父项的 DAG(有向无环图)或其他一些仔细的区别来计算修订?
请参阅git rev-parse的“指定修订” :
修订参数
<rev>
通常但不一定会命名提交对象。
它使用所谓的扩展 SHA1 语法,[并包括]各种拼写对象名称的方法。
所以“revision”是指可以用作参数来引用git 中的对象(通常是提交)的 id。
HEAD@{5 minutes ago}
是引用 5 分钟前提交的修订版。
gitrevision
提到:
[...] 一些 Git 命令(例如
git show
)还采用修订参数,这些参数表示除提交之外的其他对象,例如blob(“文件”)或树(“文件目录”)。
例如,以下 rev 参数不引用提交:
<rev>:<path>, e.g. HEAD:README, :README, master:./README
后缀
:
后跟路径命名树状对象中给定路径上的 blob 或树,该对象由冒号之前的部分命名。
Git 中的“提交”通常指定一个“提交对象”(例如,如中所述git commit-tree
):
提交封装:
- 所有父对象 ID
- 作者姓名、电子邮件和日期
- 提交者姓名和电子邮件以及提交时间。
所以:
在您的情况下 ( git clone
)--depth <n>
会:
创建一个浅克隆,其历史被截断为指定的修订数。
它适用于在该深度可访问的所有提交,直至n
DAG 中每个路径的修订。
由于结果可能不仅仅是n
提交,因此此处更适合使用修订一词,以强调您不只想要n
提交,而是任何n
可访问的最大修订引用的提交。
但是,在这种情况下,修订明确地引用了可访问的提交(如下图所示)(正如您在“ (浅克隆)比它做出来的更有用吗?”git clone --depth 1
中提到的)。
问题是“从什么可以到达”?
您引用了这个线程,其中包括:
IIRC,
--depth=<n>
不是“加深<n>
”,而是“确保我至少<n>
有更新的提示”。如果您过去以浅克隆方式并在另一方添加比 更多的提交后
获取,那么浅克隆 hack 会给您带来非常无用的语义(即使它可能是内部一致的),因为您无法猜测正确的值应该没有实际获取没有.--depth
<n>
<n>
--depth
有趣的。我以前没有遇到过这种区别,但是从浏览文档和我自己的经验来看,git 中的提交是一个指向项目历史中特定时间点的对象(以及有关它如何到达那里的信息) . 修订版是它的超集,它讨论了引用提交或一系列提交的不同方式。