首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Git中只下载远程项目的必要部分?

如何在Git中只下载远程项目的必要部分?
EN

Stack Overflow用户
提问于 2010-11-16 07:28:37
回答 2查看 271关注 0票数 3

如果您正在处理一个大型远程存储库,并且希望将下载限制到您正在处理的几个分支,那么如何配置git-clone命令(假设它是本例中的正确命令)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-16 07:51:42

如果您在两个单独目录中的两个分支上工作,则可以将其中一个设置为另一个的克隆:

代码语言:javascript
复制
git clone http://remote/repo.git branch-a
git clone branch-a branch-b

然后,在branch-b中修复origin remote

代码语言:javascript
复制
cd branch-b
git remote add origin http://remote/repo.git

(您可能需要先删除以前的origin )。这样,本地存储库信息将由两个目录之间的硬链接共享,与创建两个单独的远程数据库克隆相比,可以节省一些空间。

或者,去买一个1TB的驱动器,它们很便宜。

票数 1
EN

Stack Overflow用户

发布于 2010-11-16 07:48:09

真正问题的答案

使用git的本地克隆通常不会占用大量额外空间,因为git会使用硬链接来共享对象文件。这一点很难注意到-如果您在每个代码库上运行du,您将获得完整的大小,但如果您同时在这两个代码库上运行它,您应该会看到节省的空间。我假设你已经出于某种原因认为这还不够好。也许你在一个不支持硬链接的文件系统上,或者克隆在不同的驱动器上,或者别的什么……谁知道呢。

无论如何,如果你想创建一个轻量级的克隆,节省一些空间,为什么不节省所有的空间呢?在git的contrib目录中有一个可爱的脚本,叫做git-new-workdir (链接指向git.git中的当前版本)。它从存储库创建一个新的工作目录,其中的.git目录基本上都是通过符号链接共享的--几乎唯一不共享的就是HEAD。将脚本放在路径中的某个位置,您就可以像运行普通的git命令一样运行它:

代码语言:javascript
复制
git new-workdir <original-repo> <new-workdir-path>

瞧!您现在有了两个工作树,并共享了一个.git目录,因此您占用的唯一额外空间就是工作树文件。如果你想继续工作,那是没有办法的!

您必须注意的一件事是在两个代码库中签出相同的分支。如果您随后提交到一个存储库中分支,则另一个存储库中的分支将变得不同步-工作树和索引将与分支现在所在的提交不匹配。否则,您可以在这两个存储库中愉快地工作!

原始答案

让我首先声明,您基本上没有机会这样做。我是认真的。它几乎不会为您节省任何磁盘空间,而带有硬链接对象的存储库(这是默认的!你甚至不需要做任何事情就能得到它!)会帮你省下一大笔钱。

在几乎所有的情况下,分支机构都分享了他们的大部分历史。节省空间的潜力只存在于它们最近出现分歧的一小部分。看看git log branchA..branchB吧。这些提交就是您将避免复制其对象的那些提交。里面有没有很大的二进制文件?有1000行的差异吗?不是吗?那就别为这个操心了。这对你没有任何帮助。

还在看书吗?好吧,好吧,我不认为git-clone允许你弄乱refspec (除了--mirror,但这显然不是我们想要的)。如果这样做真的很重要,你可以通过创建一个空的存储库并拉取它,然后仔细地完成克隆应该完成的其余设置来管理它:

代码语言:javascript
复制
mkdir foo && cd foo && git init
git remote add origin <url>
# set up a refspec to get the branch(es) you want
git config remote.origin.fetch "+refs/heads/foo:refs/remotes/origin/foo ..."
git fetch origin

您仍然缺少一些配置-特别是,您有一个不跟踪任何内容的本地主分支。

这是一个非常奇怪的设置,不是从原点抓取所有分支,但我认为它应该可以工作。当然,正如我在我的评论中所说的,你可能不会为自己省去很多麻烦。获取其他远程分支并不意味着您必须创建相应的本地分支,除非这些排除的分支与您抓取的分支非常不同(即包含许多独特的内容),否则您不会节省太多带宽或磁盘空间。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4189869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档