由于瓷命令是用管道命令构建的,我很想知道add
和commit
是如何构建的。
例如,add
命令当然使用hash-object
命令,但我认为它也使用其他命令(可能是update-index
(。有人能给我指一个详细解释这一点的资源吗?
由于瓷命令是用管道命令构建的。。。
不幸的是,这个前提并不完全正确(j6t也注意到了这一点(。我认为应该是真的,但由于各种原因,它不是。特别是,git log
执行没有管道命令可用的操作,git status
也执行,但git status
本身可以通过--porcelain
标志成为管道命令。
例如,add命令当然使用hash对象命令,但我认为它也使用其他命令(可能是更新索引(。有人能给我指一个详细解释这一点的资源吗?
您正确地认为,典型的git add
使用内部等效的git hash-object -w
,然后是git update-index
。然而,git add
具有例如-p
或--patch
模式,该模式当前是Perl脚本,并且正在被重写为C代码。
有人能给我指一个详细解释这一点的资源吗?
找到这些信息的唯一保证准确的地方是Git源代码本身。幸运的是,这是免费的:只需为Git克隆Git存储库。请注意,任何详细问题的答案都可能取决于特定的Git版本。
[来自评论:是否有会议、论文等讨论Git的历史演变?
2020年3月似乎有一个相当大的会议。我确信早些时候还有其他论文,但我没有参考资料。
如今,git add
和git commit
已内置到git
中,并且未编写脚本。我认为git add
从未被编写过脚本,但git commit
确实是。您可以在contrib/examples
中找到Git存储库的旧提交的旧实现。
CCD_ 22是围绕CCD_ 23和CCD_ 24编写的。CCD_ 25基本上是CCD_ 26的美化版本。