从远程存储库快速“git clone”?

Posted

技术标签:

【中文标题】从远程存储库快速“git clone”?【英文标题】:Quick "git clone" from remote repository? 【发布时间】:2011-11-09 17:48:31 【问题描述】:

我是 Git 新手。任何项目的开始工作似乎都是从“git clone”开始的。但这似乎需要很长时间 - 比等效的“svn checkout”要长得多。这是因为该项目自创世纪以来的整个历史都被复制了?是否可以跳过历史记录,只获取最新文件(但保留存储库信息,允许将来拉取等)。

【问题讨论】:

你怎么知道 SVN 结账会花费更少的时间? @Igor svn checkout 只复制存储库的头部版本,git clone 复制所有历史记录,因此通常需要更多时间 我想指出,与 SVN 结帐不同,您只需执行一次即可。您可以使用该单个克隆创建所需的所有分支、进行所有更改等。使用 SVN 进行分支通常需要再次签出,这会再次复制所有文件。 如果您可以通过git:// 协议进行克隆而不是http[s]://,则git 克隆速度要快几个数量级。此外,无论检查整个项目的历史记录需要多长时间,根据我的经验,它总是总是在本地拥有整个项目历史记录是值得的。 克里斯,我正在使用 SSH (github)。比较如何? 【参考方案1】:

您可以使用git clone --depth=$NUM_REVISIONS,它有以下注意事项:

创建一个浅克隆,其历史被截断为指定的修订数。浅层存储库有许多限制(您不能克隆或从中获取,也不能从中推送或进入),但如果您只对历史悠久的大型项目的近期历史感兴趣,并且想要将修复作为补丁发送。

【讨论】:

请记住,深度是从 repo 的当前状态测量的。随着更多提交添加到该存储库,您需要fetch 追赶的深度会有所不同。所以如果你使用浅克隆,不要让它太浅;或在下一个fetch/pull 之前检查您的开始提交在回购中的深度。 无法“推送”是严重的,相当于执行“svn export”而不是“svn checkout”。所以我猜答案是“不”——没有办法快速克隆。【参考方案2】:

不,这是不可能的。如果您想参与存储库的历史,您必须拥有整个历史来构建。虽然它确实比 SVN 结帐需要更长的时间,但它仍然非常快,除非您通过慢速连接和/或有一个非常庞大的项目。

【讨论】:

你知道这个限制是否是 Git 工作方式的基础吗?如果是这样,原因是什么?这对我来说并不直观(还)。 (是不是因为 Git 是 分布式 VC,它不允许您将上游存储库视为真相的权威来源 - 您必须拥有所有真相本地。) 恐怕我不知道详情。我自己想不出有说服力的理由。我只知道文档中的内容以及当您尝试从浅层克隆推送时会发生什么。 @Steve, darcs,其他分布式 VC 系统,允许“惰性”克隆,所以限制在其他地方。更有可能的限制是git使用基于快照的历史模型(en.wikipedia.org/wiki/…) 这不再正确,请参阅 ***.com/a/21217267/1986995

以上是关于从远程存储库快速“git clone”?的主要内容,如果未能解决你的问题,请参考以下文章

“在 git clone 期间无法找到 'https' 的远程助手”

git clone 更改文件修改时间

git clone

git clone

git clone

git clone了整个远程仓库分支