使用git获取最新版本

yui*_*uit 348 git

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

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

我不打算提交补丁,我不需要历史记录.我只想要像颠覆这样的最新版本.

这可能在git中吗?

Gre*_*ill 508

使用以下--depth选项git clone:

创建一个浅层克隆,其历史记录被截断为指定的提交数.

例: git clone --depth=1 <remote_repo_url>

  • 例如:`git clone --depth = 1 <remote_repo_url>` (84认同)
  • 自git 1.9中的[commit 82fba2b](https://github.com/git/git/commit/82fba2b9d39163a0c9b7a3a2f35964cbc039e1a)以来,这些限制不再存在. (13认同)
  • @Triangles:限制(不再是最新的):一个浅的存储库有许多限制(你不能克隆或获取它,也不能从中推入或推入它),但如果你只对最近的大历史感兴趣就足够了项目历史悠久,并希望将修补程序作为补丁发送. (4认同)

Jak*_*ski 75

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

$ git archive --format=tar --remote=<repository URL> HEAD | tar xf -
Run Code Online (Sandbox Code Playgroud)

或者,如果有问题的远程存储库可以使用某些Web界面(如gitweb或GitHub)进行浏览,那么它有可能具有"快照"功能,您可以从Web界面下载最新版本(无版本控制信息).

  • 此解决方案不满足此要求:"我希望能够从远程项目更新到新版本".由于它基本上下载了存档,因此无法快速前进一两次提交."浅克隆"允许这样做.不过,我猜这个解决方案有它的用例,值得一提. (4认同)

小智 23

如今,在大多数情况下不推荐浅克隆

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

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

git clone --filter=tree:0 <url>
Run Code Online (Sandbox Code Playgroud)

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

  • 好信息!值得一提的是,链接文章的作者表示,他“**强烈建议**开发人员不要在日常工作中使用无树克隆”。相反,使用无 blob 克隆:`git clone --filter=blob:none &lt;url&gt;` (7认同)