为什么git checkout这样命名?

时间:2016-03-22 18:58:51

标签: git

据我所知,git checkout将当前目录中的文件状态更改为树中特定点的状态。因此,它可以用于切换分支或访问先前的提交。

为什么为此操作选择了名称checkout

这个类比是“我要去检查一下”吗? 是从图书馆查看书籍吗?

我不是在问这个名字是不是一个好主意,或者试图对自己做出判断 - 我只是想知道这个名字的历史起源是什么。

3 个答案:

答案 0 :(得分:6)

这大部分都是历史性的。 pre-git版本控制系统(VCSes)也使用动词签入签出

我正在撰写的一本书的摘录:

  

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

     

另一个动词,签入,   表示存储到VCS 。   正如您所料,如果我们可以签入,   我们还可以结帐,   意思是从VCS中提取。   一些VCS将动词添加到更新,   他们可能会用来区分   提取旧版本(您签出)   并提升到最新和(我们希望)最大的   (更新)。   Mercurial使用更新   作为结帐的纯粹同义词。

答案 1 :(得分:5)

它是common vocab版本控制系统的一部分,虽然它的行为与第一个基于锁定的版本控制系统不同,但它似乎是一种自然的演变。

2005

 man git checkout
  

NAME          git-checkout - 签出一个或多个工作树的路径   [...]

     

说明      更新工作树中的文件以匹配索引中的版本或          指定的树。如果没有给出路径,git checkout也会          更新HEAD以将指定的分支设置为当前分支。

2000

 svn help checkout
checkout (co): Check out a working copy from a repository.

1986

 man cvs 
checkout
   Check out sources for editing
[...]

         Create or update a working directory containing copies of the  source
         files  specified  by modules.  You must execute checkout before using
         most of the other cvs commands, since most of them  operate  on  your
         working directory.

         The  modules  are either symbolic names for some collection of source
         directories and files, or paths to directories or files in the repos‐
         itory.  The symbolic names are defined in the modules file.  See node
         'modules' in the CVS manual.

         Depending on the modules you specify, checkout may recursively create
         directories and populate them with the appropriate source files.  You
         can then edit these source files at any time (regardless  of  whether
         other  software  developers  are  editing  their  own  copies  of the
         sources); update them to include new changes applied by others to the
         source  repository;  or commit your work as a permanent change to the
         source repository.

1982 RCS

man co
  

从每个RCS文件中检索修订并将其存储到相应的工作文件中。

     

匹配RCS后缀的路径名表示RCS文件;所有其他人都表示工作文件。如ci(1)中所述,名称配对。

     

可以检出锁定或解锁的RCS文件的修订。锁定修订可防止重叠更新。不需要锁定检出以进行读取或处理(例如,编译)的修订。必须锁定已签出以进行编辑并稍后签入的修订版。如果要检出的修订版本当前被其他用户锁定,则带锁定的结帐会失败。 (可以使用rcs(1)断开锁定。)带锁定的检出还要求调用者位于RCS文件的访问列表中,除非他是文件的所有者或超级用户,或者访问列表为空。没有锁定的Checkout不受访问列表限制的约束,并且不受锁的存在的影响。

1972

SCCS没有结账,它有一张支票。 也许有人可以确认它是否从那里接受了这个想法。

man SCCS
  

检查类似信息,但如果没有编辑任何内容则不打印任何内容,如果正在编辑任何内容,则返回非零退出状态。目的是将其包含在“安装”中。在makefile中输入以确保在安装版本之前所有内容都包含在SCCS文件中。

答案 2 :(得分:2)

我假设可以告诉您名称来自哪里的人是 Linus Torvalds 谁开发了git。

基于checkout所做的操作 - 切换工作目录的内容我只能假设这个单词的来源与你所描述的一样

<强> Checking out book from the library

从文件中:
https://www.kernel.org/pub/software/scm/git/docs/git-checkout.html

  

git-checkout - 结帐 到工作树的

Links: