我知道可以使用浅层子模块--depth
选项与git submodule update
.
但是,如果我跑
git submodule update --init --recursive --depth 1
在我的带有多个子模块的项目中,我得到了fatal: reference is not a tree
。所以我又尝试了
git submodule update --init --recursive --depth 100
工作正常,但我想将深度保持为 1。
在我看来,这--depth 1
提取子模块中的最新提交,而不是主存储库指向的提交,这就是为什么将其设置为 100 解决了问题,因为它提取了更长的提交列表,包括指向的提交。
不幸的是,如果是这种情况,那么我通常无法确定最新的 100 次提交是否包含我需要的提交。
如何告诉 git 使用指向的提交,而不是带有子模块的浅层克隆中的最新提交?
我在 Windows 上使用 git 1.9.4。
不幸的是,似乎没有办法做到git fetch
仅具有特定的提交 ID。如果有的话我真的很想知道。然而,我用两种不同的方式处理了你的问题:一种,如果可能的话,是在远程存储库上创建一个标记或分支,它指向我想要的提交,假设我们称之为“ref”。这样我就可以获取远程引用和--depth
将适用于它,而不是最新的提示。代替git submodule update --init
I do:
git submodule init
git clone --depth 1 -b ref --separate-git-dir .git/modules/sub/ repository sub
其中“sub”是子模块的名称和路径(为简单起见,我们假设它们是相同的)
另一种方法,如果您无法在远程存储库中创建标签或分支,则可以循环搜索所需的提交:
git submodule init
id=$(git submodule status|sed -ne 's/.\([a-z0-9]*\) sub.*/\1/p'
git clone --depth 1 --separate-git-dir -n .git/modules/sub/ repository sub
cd sub
while ! git rev-list $id ; do
git fetch --depth $((i+=1))
done
git checkout $id
您可以一次增加不止一次提交,以使其运行得更快,但最终可能会得到一些比您想要的更早的提交。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)