【git】git子模块操作-从子模块的远端拉取上游修改 & 从项目远端拉取更改
1.从子模块的远端拉取上游修改
1.1 在项目子模块目录中,运行git fetch与git merge更新本地代码
(1) 这种方法在获取子模块非master分支的更新时,没成功获取更新,没搞清楚原因;
(2) 如果现在返回主项目并运行git diff --submodule,可以看到子模块被更新的同时,获得了一个包含新添加提交的列表; 如果不想每次运行git diff时都输入--submodule,可以将diff.submodule设置为"log"来将其作为默认行为,即"git config --global diff.submodule log";
1.2 在项目目录中,运行git submodule update --remote;
(1) git会进入子目录然后抓取更新;
(2) 该命令默认user想要更新并检出子模块仓库的master分支,可以通过设置更新并检出子模块的其他分支;
(3) "git config -f .gitmodules submodule.submodule名字.branch submodule分支名"可以实现(2)中目的;
(4) 当运行git submodule update --remote时,git默认会尝试更新所有子模块,如果有很多子模块的话,可以传递想要更新的子模块的名字(未实践);
(5) 可以通过执行"git config --global diff.submodule log"实现,执行git diff命令时,达到git diff --submodule的效果;
(6) 可以通过执行"git config status.submodulesummary 1",实现执行git status时,显示更详细的内容;
(7) 提交改动后,可以使用git log -p --submodule查看子模块中的提交日志;
2.从项目远端拉取更改
(1) 默认情况下,git pull命令会递归地抓取子模块的更改,但是它不会更新子模块; 此时,执行git status,会显示子模块"已修改",但没有更新;为了完成更新,需要运行git submodule update,最好运行git submodule update --init --recursive;