我正在编写一个服务来更新 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/