为啥 git developer 为命令 git checkout 选择了 checkout 这个词?

Posted

技术标签:

【中文标题】为啥 git developer 为命令 git checkout 选择了 checkout 这个词?【英文标题】:Why did git developer choose the word checkout for the command git checkout?为什么 git developer 为命令 git checkout 选择了 checkout 这个词? 【发布时间】:2021-12-06 20:55:54 【问题描述】:

我试图理解为什么 git 开发人员为命令“git checkout”选择“checkout”这个词。将结帐一词翻译成葡萄牙语(我的母语)并没有阐明“结帐”一词的含义。虽然我了解该命令对我的 git 项目的影响,但如果该命令是 git abrakadabra,对我来说听起来是一样的。

【问题讨论】:

@meagar 这不是基于意见的,版本控制条款有明确的历史记录。它源于 1982 年的 rcs corcs ci。签入和签出修订版,就像一本书和一个图书馆。 【参考方案1】:

实际上,你需要在使用 git 时使用 git checkout,因为这个命令会告诉你你现在在哪个分支上

试试:

git checkout

输出:

Your branch is up to date with 'origin/Master by example'

如果这对你有帮助,请告诉我

【讨论】:

【参考方案2】:

签出文件的想法并非起源于 Git。

在英语中(至少),当你从图书馆借一本书时,你被称为“check the book out”:你从图书馆取了这本书,并承诺稍后归还。当您拥有这本书时,其他人就无法使用这本书,因为图书馆不再提供它。

其他源代码控制系统的工作方式类似。签出文件意味着只有您可以编辑该文件。任何其他尝试签出文件的人都必须等到您重新签入才能对其进行编辑。

这种类型的独占访问不适用于 Git(作为分布式源代码控制系统),但保留该术语来描述从存储库中选择一个分支来填充工作目录的想法(实际上,检查许多不同的一次编辑所有文件,直到您通过检查另一个分支将它们“放回去”)。

【讨论】:

AFAIK 版本控制系统的第一次使用是 1982 年的 rcsrcs co(签出)和 rcs ci(签入,已转向“提交”)。跨度> 【参考方案3】:

我将从我的原型书中复制一些内容。不过,该术语并非特定于 Git(如 chepner already said)。

因此,[版本控制系统或] VCS 充当源文件的数据库,以某种方式 检索特定版本的文件。这个数据库被称为repository。当您添加源文件的更新版本时,数据库会将更新的源存储在存储库中。文件的每个版本也称为修订版,因此如果您修复拼写错误并将更新后的文件输入到存储库中,您现在拥有该文件的另一个修订版。

用作动词,to version表示置于 VCS 的控制之下。用作名词时,version 表示取自 VCS 的特定版本(一个文件或一组文件)。名词形式通常带有附加修饰语,如短语kanga.c的旧版本或roo.c的2.1版。如果没有列出特定文件,我们通常指的是所有内容,或者至少是最近讨论的所有内容:2.1 版(存储库中的所有内容,或我们正在讨论的特定文件和/或目录) . revision 这个词总是一个名词,但在其他方面与 version 含义相同。

另一个动词,to check in,意思是存储到VCS中。如您所料,如果我们可以签入,我们也可以签出,意思是从VCS中提取。一些 VCS 添加了动词 to update,它们可以用来区分提取旧版本(您签出)和升级到最新版本和(我们希望)最好的(您更新)。 Mercurial 使用 update 作为 checkout 的纯同义词。

签入有时用连字符(签入),或写成一个词,签入。这些可以避免歧义:我将签入roo.c(查看代码以查看是否有小袋鼠进入)vs. 我将签入roo.c(存储新修订)。 Check out 同样经常写成一个词,checkout,或连字符,但动词形式仍然是 check out,读起来比结帐

较新的 VCS 添加了更多的名词和动词词:

提交签入的含义大致相同,但我们稍后会看到一些技术差异。作为名词,a commit 也指一个版本,但特别是一个以 commit 的动词形式存储的版本。 克隆基本上是一个花哨的术语,用于复制整个存储库,通常是通过计算机网络从不同的机器上复制,例如,从网站。作为名词,克隆是通过克隆制作的存储库。 To fork 在功能上与克隆相同,但通常使用 不同的意图。因此,名词形式 a fork 与 clone 相同,但那些制作 fork 的人可能打算让他们的工作在很少或没有重新同步的情况下发散(可能永远或可能在有限的时间内) ,和/或让其他人通过他们的分叉而不是原始版本进行协作。

解决Schwern's comment 关于rcs corcs ci,值得注意的是一些历史项目:

RCS 的结帐动词默认情况下 锁定(版本存储)文件:它在工作树中为您提供了一个只读文件。你必须使用co -l 来获得一个锁,它为你提供了一个可以更新的读/写文件。

RCS 的 coci 过期 SCCS 的结帐/签入。但是,在sccs 中,我们有两个单独的提取动词:get 表示获取只读副本edit 表示锁定文件并获取读/写副本时间>。有关详细信息,请参阅例如 the Oracle documentation。 “签入”命令拼写为delta

我认为,RCS 是第一个使用沿用至今的术语的版本控制系统。它的动词保留在 CVS(并发版本系统)和 Subversion(“CVS 做得更好”)中,并从那里传播到所有现代版本控制系统(请参阅 Wikipedia 以获得相当大的表)。现代 SCCS 是早期 Unix SCCS 的重新实现,它本身可能最多松散地基于早于它的 IBM SCCS。

【讨论】:

以上是关于为啥 git developer 为命令 git checkout 选择了 checkout 这个词?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我根本没用到Git Shell命令行

Git拉取远程分支命令

idea中的git操作

Windows命令行下启动git extensions,然后运行git命令报错,为啥

git命令学习

为啥git创建版本库时 没有在文件夹下自动生成.git文件夹?