[submodule]git submodule(contrib/**)的更改一直在工作区无法丢弃 submodule clone 参数

显示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都是文件夹没法删除,所以就留着了。这种情况手动删了就行。请添加图片描述
手动删了这些因为checkout带来的脏文件

如果是有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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值