显示constrib/protocal变化,但是git丢弃不掉工作区变化,说明要更新了
git submodule update
# git submodule update --init如果以前没有init过就init
如果执行完更新出现以下报错:
$ git submodule update
Submodule path 'contrib/xx1': checked out '59108f3d96'
Submodule path 'contrib/xx2': checked out '5df3037d10556bf'
fatal: Unable to find current revision in submodule path 'contrib/protocol'
输入指令:
$ git lfs install
Updated Git hooks.
Git LFS initialized.
还有可能是因为切换到脏分支,然后切回来的时候因为这些多余的submodule都是文件夹没法删除,所以就留着了。这种情况手动删了就行。
如果是有submodule的项目,clone的时候需要加参数,不然可能build不起来,显示有依赖没有,比如:
# una @ VM in ~/Engine/build o [17:55:56]
$ cmake .. -DENABLE_THINLTO=0 -DENABLE_TESTS=0 && ninja
CMake Error at /data/home/una/toolchain/share/cmake-3.22/Modules/CMakeDetermineSystem.cmake:130 (message):
Could not find toolchain file:
contrib/mk/cmake/linux/toolchain-x86_64.cmake
Call Stack (most recent call first):
CMakeLists.txt:3 (project)
为了防止这种情况出现,应该在clone的时候就全部拉下来:
git clone git@git.woa.com:danielhuang/TSearchEngine.git --recursive
一个完整的submodule指令
git submodule sync && git submodule update --init --recursive
vscode可能遇见的submodule无权限解决方案:https://editor.csdn.net/md/?articleId=135386707
如果submodule更新了,项目应该build rs(重新编译) 不能build rl(增量编译)
submodule版本控制
submodule update --remote
可以将submodule更新到远端最新版本
submodule update --remote contrib/re2
指定更新某个库版本
指定某子模块版本
cd path/to/submodule
git checkout <commit_hash_or_tag>
查看子模块版本
git submoulde status
强制更新
git submodule sync --recursive
git submodule update --init --force --recursive
git submodule foreach --recursive git config gc.auto 0
git submodule foreach --recursive git lfs pull
现在的问题是,merge进来的master无法同步submodule更新信息。rebase待实验。现在的处理方式是,手动到子模块checkout到master的submodule版本。
在某些commit里,会指定更新版本
有个很trick的方法,可以把出问题的submodule在contrib中删除后重新submodule update
如果某次合并的时候发现一个和base相同版本的submodule变化提示
那么就要merge一下主分支再push