git clone 和 checkout 有什么区别?

384

git clonegit checkout有什么区别?


1
相关:https://dev59.com/53A75IYBdhLWcg3wYH3I - Mat
5个回答

374

checkout 的 man 手册:http://git-scm.com/docs/git-checkout

clone 的 man 手册:http://git-scm.com/docs/git-clone

简而言之,clone 用于获取你没有的代码库,checkout 用于在你已经拥有的代码库中切换分支。

注意:对于那些具有 SVN/CVS 背景并且刚接触 Git 的人,git clone 在 SVN/CVS 中等价于 checkout。这种相同概念不同术语的说法常常令人困惑。


42
“checkout”也可以用于其他事情,比如使用另一个版本库中的某个文件覆盖您工作副本中的同名文件。 - svick
8
什么情况下使用 "pull" 和 "checkout"? - Kokodoko
28
Pull是获取加合并操作,checkout是一个本地操作,仅对已经获取的数据进行操作。因此它与svn checkout完全不同。 - August Lilleaas
14
作为从SVN世界而来的人,我也感到困惑。哇,这真是一团糟。在理想的情况下,我希望能要求每个源代码管理系统制造商使用相同的术语。 - Zoltán Tamási
6
Fork 是 GitHub 上的术语,与 Git 本身无关。 - August Lilleaas
显示剩余4条评论

131

git clone 是从远程 git 服务器获取你的代码仓库。

git checkout 是检出你想要的代码仓库状态(如分支或特定文件)。

例如,你当前在主分支上,想要切换到开发分支。

git checkout develop_branch

比如说,你想将代码库中某个文件的状态切换到特定的版本

git checkout commit_point_A -- <filename>

这里有一个很好的参考资料可以帮助您学习Git,让您更容易理解。


20
“从远程 Git 服务器”- 服务器不一定需要是远程的。git clone 也可用于本地仓库。 - SET001
1
感谢提供 Git 可视化参考链接! - David Pointer
@Kit Ho:这个链接可以作为参考,但对于像上面那个人一样有基本问题的人来说并没有太大帮助。正如文章本身所说,“一旦你了解了git的工作原理,这个网站可能会巩固你的理解”。 - Motorhead
1
循环定义并不是很有帮助。用“fetch”来描述克隆是有用的,可以增加意义,但是“checkout is to checkout...”这个短语既没有增加意义,也没有实际上帮助区分这两个操作的差异。 - C Perkins
1
@Kit ho,你提供的“好的参考”链接已经失效了,也许你是想提供这个链接 - https://marklodato.github.io/visual-git-guide/index-en.html - Indrajeet Gour

11

需要注意的一点是,在Git中没有任何“Copyout”的概念。这是因为你已经在本地仓库中拥有了一个完整的副本 - 你的本地仓库是你选择的上游仓库的克隆。所以你实际上拥有一个个人的检出,而不必在参考仓库中的那些文件上加锁。

Git提供SHA1哈希值作为验证文件/目录树/提交/仓库的副本是否与能够在信任层次结构中宣布“Master”的人使用的副本完全相同的机制。这避免了所有那些导致大多数版本控制系统崩溃(例如私有副本、大规模合并以及源代码缺乏真正的控制和管理)的“锁”问题。


4
问题没有提及锁定,当前应默认假设一个人不熟悉这个概念,因此只有在明确要求时才应解释旧版本控制系统与此处的差异。 - wRAR

8

简单来说,git checkout 有两个用途:

  1. 在现有的本地分支之间切换,例如: git checkout <existing_local_branch_name>
  2. 使用 -b 参数从当前分支创建一个新分支。假设您在 master 分支上,那么 git checkout -b <new_feature_branch_name> 将创建一个包含 master 内容的新分支,并切换到新创建的分支。

您可以在官方网站上找到更多选项。


不错。这个 -b 选项很棒,可以在单个命令中创建一个新的本地分支并将其检出。太喜欢它了! - RBT

3

checkout 可用于以下多种情况:

第一种情况:在本地代码库中切换分支 例如: git checkout 存在的要切换的分支

您也可以通过使用-b在此情况下创建并切换到新分支

git checkout -b 要切换到的新分支

第二种情况:从x版本恢复文件

git checkout 版本号 要恢复的文件 ...


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