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