我为指定标签创建浅克隆:
git clone --branch v0.1.3 --depth 1 file:///c/usr/sites/smc .
此后,克隆的存储库中仅包含标签 v0.1.3 (和相关文件)。
它没有该标签之前或之后的所有更改的历史记录(据我所知 - 如果错误请纠正我。)
接下来我想更新克隆以包含 v0.1.4。
如果我使用“git fetch --unshallow”命令,那么我会得到完整的历史记录,这是我不想要的。
有没有办法扩展我的克隆以包含来自主服务器的较新历史记录(例如 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。
目的是使用傀儡企业管理结帐。
更新:
尝试了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浅克隆到特定标签 https://stackoverflow.com/questions/8932389/git-shallow-clone-to-specific-tag