为什么检查文件被称为“提交(commit)”?

13
在像git,mercurial或svn这样的源代码控制仓库中检入文件的行为被称为“commit”。有人知道为什么称它为“commit”而不仅仅是“check in”吗?
英语不是我的母语,所以可能有一些语言方面我理解不太好,但我实际上提交了什么?(希望我没有犯罪,但你永远不知道。)
这是否意味着“委托保存”?它是否与事务(在事务结束时提交)有关?
5个回答

16

“Commit”这个词也可以表示将某物保留下来以供将来使用或保存。例如,“他将密码记在了脑海中。” 当你“commit”你的更改时,你正在将它们锁定为现在的状态以供将来保存。


5
考虑到版本控制存储库是类似于数据库的引用,提交更改的术语commit来自于数据管理,将一组临时更改变为永久更改。(请注意,在git中这非常有意义,在使用git commit将它们记录在存储库之前,您需要使用git add将临时更改添加到索引中。)
在这些版本控制系统的上下文中,提交指“将源代码的最新更改提交到存储库,并使这些更改成为存储库的主要修订版本的一部分。因此,当其他用户从存储库进行UPDATEcheckout时,除非他们指定要检索存储库中源代码的先前版本,否则他们将收到最新提交的版本。”

2
从我的 Mac 的 lex 盲目复制,难道 3 不足以解释它吗?
commit |kəˈmɪt|
verb ( commits, committing, committed ) [ with obj. ]
1 ...
3 (commit something to) transfer something to (a state or place where it can be kept or preserved): he composed a letter but didn't commit it to paper | she committed each tiny feature to memory.
• consign (someone) officially to prison, especially on remand: he was committed to prison for contempt of court.
• send (a person or case) for trial in a higher court: the magistrate decided to commit him for trial .
• send (someone) to be confined in a psychiatric hospital.
• refer (a parliamentary or legislative bill) to a committee.

2
“Check In”、“Check Out”这个术语起源于至少20世纪80年代的UNIX RCS(版本控制系统),其命令字面上是“ci”和“co”。在这个和其他早期的系统中,一个文件一次只能由一个用户编辑,所以“Check Out”类似于从图书馆借书。您有独占编辑文件的权利,直到它被退回为止。
当CVS(并发版本控制系统)出现时,即使该系统被设计用于并发编辑,文件很少需要锁定,但它仍保留了这个术语。
但是,对于像GIT这样的系统,您将整个目录树作为一个集合来处理,并且每个人都有自己的存储库,而在发送提交(更改)方面具有极大的灵活性。您可以选择将一个服务器设置为中央存储库,但不必。因此,检入或检出文件不再有意义。更重要的是,git的作者选择放弃该术语。

-4
主要是区分集中式版本控制系统(如Subversion)和分布式版本控制系统之间的差异。集中式系统使用“签出”和“签入”的术语。这些术语有助于表明存在某个中心枢纽或经纪人来控制这些操作。它具有“保险箱”的含义,可以打开然后关闭。当文件上有锁时,尤其是在Subversion / TFS等软件上也可能有锁时,这一点尤为真实。
而分布式版本控制系统更喜欢使用更中性的术语,比如“提交”和“更新”,因为这体现了这些操作中没有涉及到中心经纪人。
如果“签入”了某个东西,但仍然需要将其“推送”到远程服务器,那将会很困惑。“签入”在版本控制系统中特别有结束到结束的过程的意味。而在分布式版本控制系统中显然不是这样。
你可以在你的分布式版本控制系统中创建一个命令别名,比如叫做“签入”,它可以执行提交后紧接着的推送操作。例如。

3
这是完全错误的。两个最受欢迎的集中式版本控制系统 CVS 和 Subversion 几乎完全使用"commit"一词。 - user4815162342
1
Subversion只保留了提交(commit)功能,因为它是直接替代CVS的。TFS称之为check in和check out。我不明白这怎么能说是“完全错误”的。这个问题需要一个回答来解释各种术语之间微妙的差别(用英语表达),而这个回答提供了这方面的信息。 - nbevans
1
“Subversion only retained commit” — 这正是我的观点,事实上,“commit”这个术语在集中式版本控制系统中已经使用了几十年。你的回答声称“commit”这个术语是由分布式版本控制系统引入的,以区别于旧术语“check in”,但事实并非如此。 - user4815162342
你的前两句话非常强烈地暗示了这一点。你说提交这个术语主要是用来区分集中式版本控制系统(如Subversion)和分布式版本控制系统之间的差异。这并不正确,因为在分散式系统出现之前,提交这个术语就已经被广泛使用,并且在集中式系统中仍然具有与以往相同的含义。 - user4815162342
顺便说一句,因为你似乎不知道,Subversion客户端的ci命令行参数代表“check in”。 - nbevans
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接