我为指定标签创建一个浅克隆:
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/