我有一个项目a,它是一个库,它被用于一个项目B。
项目A和B在github上都有一个单独的存储库,但在B内部我们有A的子模块。
我在库上编辑了一些类,它在repo A中,我在远程repo上推了一下,所以库(repo A)更新了。
这些更新不会反映在“引用”(子模块)上,子模块引用了以前的提交....我应该怎么做才能更新git上的子模块?
我有一个项目a,它是一个库,它被用于一个项目B。
项目A和B在github上都有一个单独的存储库,但在B内部我们有A的子模块。
我在库上编辑了一些类,它在repo A中,我在远程repo上推了一下,所以库(repo A)更新了。
这些更新不会反映在“引用”(子模块)上,子模块引用了以前的提交....我应该怎么做才能更新git上的子模块?
当前回答
单行版本
git submodule foreach "(git checkout master; git pull; cd ..; git add '$path'; git commit -m 'Submodule Sync')"
其他回答
单行版本
git submodule foreach "(git checkout master; git pull; cd ..; git add '$path'; git commit -m 'Submodule Sync')"
进入子模块目录:
cd projB/projA
从你的项目A中取出回购(不会更新你的父项目B的git状态):
git pull origin master
回到根目录并检查更新:
cd ..
git status
如果子模块之前更新过,它将显示如下内容:
# Not currently on any branch.
# Changed but not updated:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: projB/projA (new commits)
#
然后,提交更新:
git add projB/projA
git commit -m "projA submodule updated"
更新
正如@paul指出的,自从git 1.8以来,我们可以使用
git submodule update --remote --merge
将子模块更新为最新的远程提交。在大多数情况下都很方便。
解决方案1
简单点说。
运行此命令获取子模块的最新信息:
git submodule update --remote --merge
or
git submodule update --remote
现在,我们需要更新父repo中的引用,可以使用以下命令完成:
git add <<submodulesfoldername>>
注意:<> ==我的子模块文件夹名称git添加子模块(记得提交和推送你的代码,最新提交的引用将被添加)
解决方案2
如果上面的解决方案不是最新的,试试这个:
git submodule update --init --recursive
其他一些答案建议在子模块的目录中合并/提交,IMO可能会变得有点混乱。
假设远程服务器名为origin,我们想要子模块的主分支,我倾向于使用:
Git子模块foreach“Git取回&& Git重置——硬源/主”
注意:这将对每个子模块执行硬复位——如果你不想这样做,你可以将——hard改为——soft。
上面的答案对我都没用。
这是解决方案,从父目录运行:
git submodule update --init;
cd submodule-directory;
git pull;
cd ..;
git add submodule-directory;
现在你可以使用git commit和git push