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

标签 git clone shallow-clone

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

git clone --branch v0.1.3 --depth 1 file:///c/usr/sites/smc .

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

这样做的目的是:

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

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

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

更新: 尝试了 VonC 的建议。

$ git fetch --update-shallow origin v0.1.4
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From file:///c/usr/sites/smc
 * tag               v0.1.4     -> FETCH_HEAD

paul.chernoch@USB-XXXXXXXXX /c/usr/sites/smc-clone3 ((v0.1.3))
$ git describe
v0.1.3

paul.chernoch@USB-XXXXXXXXX /c/usr/sites/smc-clone3 ((v0.1.3))
$ git tag --list
v0.1.3

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

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

最佳答案

似乎我有一个类似的问题,后来发现了这个。诀窍是在 fetch 命令的末尾和深度指定完整的 refspec。 refs/tags/v0.1.3:refs/tags/v0.1.3 或简称 tag v0.1.3

Git shallow fetch of a new tag

git fetch --depth 1 origin tag v0.1.4

关于git - 使浅层 GIT 存储库不那么浅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24294361/

相关文章:

git - Jenkins 管道 : scm checkout shallow copy fails

git - 将 Jenkins 与 Pipeline 脚本的本地 Git 存储库连接的文件路径结构是什么?

git - `git log` 输出与输入日期格式不同

ruby - dup 和 clone 都返回不同的对象,但是修改它们会改变原始对象

git - Jenkins 无法提取 20 GB 的 git 存储库

git - 如何从浅克隆中有效地获取 git

c# - 有什么方法可以使用 .NET 应用程序来处理 git 吗?

Git SSH 公钥被拒绝

javascript - 在克隆期间更改内部元素 ID

python - 如何克隆可迭代并递归替换特定值?