【问题标题】:Using git to get just the latest revision使用 git 获取最新版本
【发布时间】:2010-11-15 15:36:43
【问题描述】:

我想跟踪一个使用 git 的项目。我不想克隆完整的存储库和完整的历史记录,我只想要最新的修订版,并且我希望能够从远程项目更新到新的修订版。

我曾尝试使用 git clone,但这会创建整个存储库的副本(文件很大),并且跟踪更改会使磁盘空间变得更大(现在 100mb 的文件占用超过 2gb)。

我不会提交补丁,也不需要历史记录。我只想要 subversion 中的最新版本。

这在 git 中可行吗?

【问题讨论】:

标签: git


【解决方案1】:

使用 git clone 并将 --depth 选项设置为 1 创建一个浅克隆,其历史记录被截断为最新提交。

例如:

git clone --depth 1 https://github.com/user/repo.git

要初始化和更新任何嵌套的子模块,也要传递--recurse-submodules,要浅层克隆它们,还要传递--shallow-submodules

例如:

git clone --depth 1 --recurse-submodules --shallow-submodules https://github.com/user/repo.git

【讨论】:

  • 示例:git clone --depth=1 <remote_repo_url>
  • 自从commit 82fba2b 在 git 1.9 中这些限制不再存在。
  • 有什么限制?
  • @Triangles:限制(不再是当前的):浅存储库有许多限制(您不能克隆或从中获取,也不能从中推送或推入),但如果您只是对历史悠久的大型项目的近期历史感兴趣,并希望将修复作为补丁发送。
【解决方案2】:

如果远程端支持它,则执行浅克隆 (git clone --depth=1 <URL>) 的替代解决方案是使用 git archive--remote 选项:

$ git archive --format=tar --remote=<repository URL> HEAD | tar xf -

或者,如果有问题的远程存储库可以使用 gitweb 或 GitHub 等 Web 界面 浏览,那么它有可能具有“快照”功能,您可以下载最新版本 (没有版本信息)从网络界面。

【讨论】:

  • 此解决方案无法满足此要求:“我希望能够从远程项目更新到新修订版”。由于它基本上是下载存档,因此无法快速推进一两次提交。 “浅克隆”允许这样做。不过,我猜这个解决方案有它的用例,所以值得一提。
【解决方案3】:

这些天,shallow clones are recommended against in most cases

虽然,对于您提到的用例(下载最新版本并且再也不要碰它),git clone --depth=1 有效,但在更一般的情况下,它可能会产生问题。例如,如果您想让您的克隆与上游保持同步,git fetch 在浅层克隆上的成本要高得多。

如果您想要下载更少的数据,部分克隆更适合一般情况:

git clone --filter=tree:0 <url>

这仍将下载提交历史记录,但不会下载先前提交的文件树和文件内容。获取上游提交仍然很便宜。

【讨论】:

  • 好消息!值得一提的是,链接文章的作者表示他“强烈建议开发人员不要在日常工作中使用无树克隆。”。相反,使用 blobless 克隆:git clone --filter=blob:none &lt;url&gt;
猜你喜欢
  • 2016-04-26
  • 2012-11-21
  • 2011-02-25
  • 2017-01-17
  • 2013-01-13
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多