我有一个项目a,它是一个库,它被用于一个项目B。

项目A和B在github上都有一个单独的存储库,但在B内部我们有A的子模块。

我在库上编辑了一些类,它在repo A中,我在远程repo上推了一下,所以库(repo A)更新了。

这些更新不会反映在“引用”(子模块)上,子模块引用了以前的提交....我应该怎么做才能更新git上的子模块?


当前回答

上面的答案对我都没用。

这是解决方案,从父目录运行:

git submodule update --init;
cd submodule-directory;
git pull;
cd ..;
git add submodule-directory;

现在你可以使用git commit和git push

其他回答

如果你更新了一个子模块并提交给它,你需要到包含的或更高级别的repo,并在那里添加更改。

git status

将显示如下内容:

modified:
   some/path/to/your/submodule

子模块不同步的事实也可以看出

git submodule

输出将显示:

+afafaffa232452362634243523 some/path/to/your/submodule

加号表示your子模块指向的位置比顶部repo期望它指向的位置要早。

只需添加以下更改:

git add some/path/to/your/submodule

并承诺:

git commit -m "referenced newer version of my submodule"

当您向上推更改时,请确保首先在子模块中向上推更改,然后在外部回购中向上推引用更改。这样,更新的人总是能够成功运行

git submodule update

关于子模块的更多信息可以在这里找到http://progit.org/book/ch6-6.html。

自从git 1.8你就可以做到了

git submodule update --remote --merge

这将把子模块更新为最新的远程提交。然后你需要添加并提交更改,这样父库中的gitlink就会更新:

首先,git添加它

git add project/submodule_proj_name

然后git提交

git commit -m 'gitlink to submodule_proj_name was updated'

git推它

git push

然后推送更改,因为如果没有这个,指向子模块的SHA-1标识将不会更新,因此更改对任何人都不可见。

我的项目应该为子模块使用'latest'。在Mac OSX 10.11, git版本2.7.1上,我不需要“进入”我的子模块文件夹来收集它的提交。我只是做了常规

git pull --rebase 

在顶层,它正确地更新了我的子模块。

上面的答案对我都没用。

这是解决方案,从父目录运行:

git submodule update --init;
cd submodule-directory;
git pull;
cd ..;
git add submodule-directory;

现在你可以使用git commit和git push

单行版本

git submodule foreach "(git checkout master; git pull; cd ..; git add '$path'; git commit -m 'Submodule Sync')"