问题标签 [shallow-clone]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
180 浏览

git - 通过 https 克隆最新版本的 git 仓库

我想从项目中获取一些文件:我不需要克隆整个存储库:我只需要来自 master 分支的最新快照。这对我来说很重要,因为我的带宽非常低,下载所有内容都需要一些时间。

在另一个 SO 问题上,我看到可以使用“git archive”来这样做,不幸的是,它似乎不适用于 https:

此命令适用于 ssh:// 但不适用于 https://

对于 github,我可以在 Web 界面上下载提供的 zip 文件,但对于不提供它的其他存储库,我如何从 git 存储库 https URL 获取简单快照?

0 投票
2 回答
894 浏览

git - 使浅层 GIT 存储库不那么浅

我为指定的标签创建了一个浅克隆:

在此之后,克隆的 repo 中仅包含标签 v0.1.3(和相关文件)。它没有该标记之前或之后的所有更改的历史记录(据我所知 - 如果有错误,请纠正我。)接下来我想更新克隆以包含 v0.1.4。如果我使用“git fetch --unshallow”命令,那么我会得到我不想要的完整历史记录。有没有办法扩展我的克隆以包含来自主人的新历史(如 v0.1.4 和 0.1.5),但不包括旧历史(如 0.1.2)?(我看到一个名为 update-shallow 的选项,但不明白它的作用或是否相关。)

这样做的目标是:

1) 通过不克隆整个 repo,使远程服务器上的存储库的初始设置快速而小。(我们的 repo 主要是二进制文件:DLL、EXE。)

2) 可以将远程 repo 升级到更高版本(由标签给出),但不能升级到更早版本。这样的升级只会转移存储库的一小部分,所以它也应该很快。

注意:我的 Git 版本是 Windows 7 上的 1.9.2.msysgit.0。这包括最近对浅克隆的增强。我们可能会在 Linux 上托管主存储库,但我们部署的代理运行 Windows。目的是使用 puppet 企业管理结帐。

更新:尝试了 VonC 的建议。

虽然该命令似乎做了一些事情,但我在目标仓库中没有看到标签 v0.1.4。但是,如果我使用 --tags 选项,我会得到所有的标签,还有所有的历史!另外,我不理解 git fetch 命令输出中的符号“FETCH_HEAD”。

更新:进一步的研究表明,这个 SO 问题是在一个类似的目标之后: git shallow clone to specific tag

0 投票
2 回答
1907 浏览

git - 一种让浅层 git 克隆保持最新状态的方法?

我的目标是能够构建具有悠久历史的项目的最新版本并为该项目做出贡献 - 并且在不使用本地存储复制许多历史分支和十多年前的历史的情况下做到这一点(无论如何,如果我需要,我总是可以在项目中央存储库的 Web UI 中查找,我可能不会)。

我的第一次尝试似乎很幸运:

这给了我一个只有 ' master' 分支的 'what' 的整洁本地克隆,并且有足够的提交来覆盖最近的两个标记版本。
然后我可以做' git checkout latest-release-tag'并构建最新版本。伊皮!

正如我所预料的那样,我需要做一个补丁。一切都很顺利:' git checkout -b my-patch-branch',进行更改,提交,我能够将 my-patch-branch 推回 github 上的克隆,以便项目可以拉取它。简单的!
我想我在那里很幸运,因为从我读到的内容来看,例如,在这里,在 git 1.9 之前我无法做到这一点。
但是安装的版本竟然是1.9,所以我侥幸成功了。

现在我想做的下一个明显的事情是从远程获取并获取 master 上的最新活动(包括我的补丁的上游合并,所以我不再需要那个分支)。我尝试了“git fetch --dry-run upstream”,惊恐地看着它下载了无穷无尽的兆字节,然后给了我一个可以追溯到乳齿象时代的新标签列表。我很高兴我说--dry-run

我真的希望它会master从我的克隆的 HEAD 开始在 ' ' 上接收十几个新的提交,然后也许我会有一个深度 52 的克隆而不是 40,但这就是我想要的......从我参与之前的大量近期历史开始,然后从那时开始跟踪和发展,并能够构建、分支和推送补丁。似乎如此接近。

有什么简单的方法可以让 git 做我想做的事情吗?我试图做的事情不合理吗?

编辑:更多信息。
(1) 上游实际上领先于我接近一百个提交,我估计的十几个提交被取消了。
(2) 结果证明,我使用克隆获得的原始 40 次提交都是单亲提交。我试图获取的后面的一堆是在我的克隆不包括的某个分支中与第二个父级合并提交。这些是否会因为我的克隆中最早的提交不是共同的祖先而导致 git 引入他们所有的古代历史?
有没有办法告诉它我不想要那个?

更多新信息:
(1)我突然想到我之前使用的是 http 协议,它实际上并没有与服务器上的 git 进程交互,因此它没有机会调整下载大小。
但是,当我重试使用 git-over-ssh 时,我仍然获得了巨大的收益。
然后
(2) 像动物一样手动点击 github 的“newtork”显示中显示的合并提交,找到涉及在我的浅切之前开始的分支的提交,并将它们的 parent-2 SHA 添加到我的.git/shallow文件中,然后尝试'git fetch' 再次通过 ssh。效果很好,下载了一个小包文件,可以快进我的本地master分支。我认为这正是我希望 git 能够自动执行的操作,但我还没有找到方法。手动的,挺麻烦的。:)

0 投票
1 回答
3749 浏览

git - Git浅获取新标签

如果我在标签处克隆一个最大深度为 1 的存储库,它会起作用并拉下它。如果我想对新标签进行深度为 1 或不为 1 的提取,它会进行一些处理,但该标签永远不会出现在“git tag”下。如果我提供 --tags 选项,它会下载整个存储库,而不仅仅是新信息。我不介意存储库获得更多历史记录,我只想避免下载时间。有没有办法在不从浅克隆存储库中获取所有标签的情况下获取新标签?

现在,我在文档中注意到了这一点:“--depth ...未获取深化提交的标签。”

这是我遇到的吗?除了下载所有标签之外,有没有办法做到这一点?

0 投票
2 回答
2921 浏览

git - 如何获取足够的提交以在浅克隆中进行合并

我正在尝试做的事情:测试来自 github 的拉取请求。我想在本地将拉取请求合并到 master 并在结果上运行一些测试。由于存储库很大,我做了一个浅克隆。

为了能够进行合并,我获取越来越多的提交(git fetch随着增加--depth),直到我拥有merge-commitmaster 之间的拉取请求。

但是,它并非每次都有效。看起来我不仅需要合并基础,还需要master..merge_base 范围内的每个提交。但是我不确定该怎么做。

所以,问题是:我如何获取足够的历史来进行合并?

0 投票
1 回答
167 浏览

git - 克隆一个没有历史记录的 git repo 并让原始 repo 能够将更改推送到浅 repo

这是场景。我有一个存储库A,它有大量的历史和修订,我不希望在另一个存储库B中。如何在不移动整个历史记录的情况下同步两者。

0 投票
1 回答
3489 浏览

git - git中带有子模块的浅克隆,如何使用有针对性的提交而不是最新的提交?

我知道使用--depth带有git submodule update.

但是,如果我跑

在我有几个子模块的项目中,我得到了一个fatal: reference is not a tree. 所以我再次尝试了

它工作正常,但是我想将深度保持在 1。

在我看来,--depth 1拉取子模块中的最新提交,而不是主存储库指向的提交,这就是为什么将其设置为 100 解决了问题,因为它拉取了更长的提交列表,包括指向的提交。

不幸的是,如果是这种情况,那么我通常不能确定最近的 100 次提交包括我需要的那一次。

我如何告诉 git 使用指向的提交而不是带有子模块的浅克隆中的最新提交?

我在 Windows 上使用 git 1.9.4。

0 投票
1 回答
666 浏览

git - 如何在git中维护一组分支的浅克隆

我想维护一个浅的、镜像的、裸露的几个分支的克隆。我将从本地克隆到不同的项目分支。例如

所以我可以像这样制作 repo2

然后我认为 repo3 和 4 真的很容易——他们可以从 repo2 克隆他们想要的所有东西,它们会受到 repo2 的浅薄限制。

但是让 repo2 从 repo1 保持最新,同时保持它的浅薄是我坚持的(理想情况下,我想保持自某个提交以来的所有内容,但我知道这是不可能的)。看来我每次都必须执行多个 git fetch 命令,对吗?有没有办法在配置文件中弹出它,这样我就可以做到git fetch并且它知道我的意思?

0 投票
1 回答
45 浏览

git - 在浅 git fetch 之后,无法部署(结帐)代码和分支仍然丢失

我已经快速设置了存储库:

然后,当我试图获取代码时:

我得到:

我已经检查过,尽管有git fetch日志输出,但分支似乎在本地不可用:

什么都不返回。我希望仅从单个分支获取最新代码(没有理由全部提取) - 我可以不这样做吗?

0 投票
3 回答
26591 浏览

git - 如何在没有整个历史记录的情况下克隆种子/启动项目?

请注意,使用--depth=1参数会阻止将项目推送到新的存储库