如何在git子模块中“提交”更改?
如何在git子模块中"commit"更改?
问题的原因是:在使用git子模块时,如果想要提交更改,需要分别在子模块和主项目中进行操作。
解决方法如下:
1. 首先,在子模块中进行commit操作:
$ cd path/to/submodule $ git add$ git commit -m "comment" $ git push
2. 然后,更新主项目以跟踪子模块的更新版本:
$ cd /main/project $ git add path/to/submodule $ git commit -m "updated my submodule" $ git push
需要注意的是,有时候git会将子模块放在一个匿名分支中,此时需要先checkout到某个分支再进行添加和提交操作。
另外,如果在创建子模块时,从github的超级项目中使用文件树,可能会遇到"HEAD detached at ..."的问题,此时需要使用`git checkout master`命令解决。
还有一种解决方案是让子模块跟踪主分支的最新版本,而不是默认的跟踪某个提交。具体可以参考这个链接。
此外,如果你没有对子模块仓库的权限,git将不允许你对其进行push操作。解决方案是fork该仓库并进行push。
最后,如果在子模块中进行了push操作,然后在父项目中进行push操作,那么父项目将会更新用于跟踪子模块的提交。这意味着,下次有人克隆你的父项目时,他们将会得到更新后的子模块。
希望这篇文章对你有帮助!
问题的原因是想要在git子模块中提交更改,但不知道如何操作。解决方法是使用git push命令的--recurse-submodules选项来一次性提交所有子模块的更改。
在git1.7.11版本中,新增了--recurse-submodules选项来实现这一功能。该选项可以查看绑定到父仓库的子模块的历史记录,并将其推送到远程仓库。
具体的使用方法是使用git push命令加上--recurse-submodules=on-demand选项。这样,所有在要推送的修订版本中发生更改的子模块都将被推送。如果无法推送所有必要的修订版本,则会中止并以非零状态退出。
需要注意的是,这个选项只适用于一层嵌套。无法推送另一个子模块中的子模块的更改。
如果以上方法不起作用,还可以尝试使用git submodule foreach命令来逐个推送子模块的更改。具体的命令是:git submodule foreach git push -u origin master
总结一下,要在git子模块中提交更改,可以使用git push命令的--recurse-submodules选项来一次性提交所有子模块的更改。如果不起作用,可以尝试使用git submodule foreach命令逐个推送子模块的更改。