git - 如何将子模块设置为指向特定提交而不获取它?

标签 git git-submodules

我正在编写一个服务来更新 super 项目中每个子模块指向的提交。我天真的做法是运行 git fetch在子模块中,git reset --hard <hash> , 然后添加子模块并提交。

我想跳过 git fetch步骤并简单地强制子模块指向给定的哈希以获得更好的性能(跳过获取对象和占用磁盘空间)并处理可能不再存在于上游并且无论如何都无法获取的提交(如果它们被强制推送)。

最佳答案

解决方法是直接写入Git索引,对于子模块来说其实很简单。使用 Git 2:

git update-index --cacheinfo 160000,<Git hash of the submodule's tree>,<path to the submodule>


例如,如果您的项目目录结构如下所示:

.
├── .git
└── submodule

然后更新子模块以指向提交 2764a900748fbed7453f5839cb983503cee346d2 你将运行:

git update-index --cacheinfo 160000,2764a900748fbed7453f5839cb983503cee346d1,submodule

最后用 git commit 跟进和往常一样。

关于git - 如何将子模块设置为指向特定提交而不获取它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33514642/

相关文章:

c++ - 选择 C++ main 函数在 eclipse 中构建

git:所有更改文件的列表,包括子模块中的文件

c - 尝试自动化 git,只提交名为 "T"

git - 是否可以在 WSL 上运行 git submodule update --init ?

git - 将本地仓库重置为与远程仓库完全相同

git - 您如何将 AppleScript 脚本置于版本控制之下?

Git 不会初始化/同步/更新新的子模块

ios - Git 子模块与 iOS/Mac 框架

git - 当 git pull 导致冲突但 git pull --rebase 没有时,这意味着什么?

python - 使用 venv 虚拟环境时,我应该将哪些文件提交到我的 git 存储库?