你如何与git子模块一起发展?

时间:2014-08-29 05:45:10

标签: git github git-submodules git-flow

这是我的项目结构

MainProject
|  README.md
|  src/
|  lib/      # this is a submodule

当我开发MainProject时,我也会开发lib/,我的意思是MainProject/lib/

当我推送时,我会将MainProject/lib/*中的所有更改复制到MainProject/../lib/,这是一个单独的git目录,然后推送。

之后,我将在MainProject/lib/中进行子模块更新,从远程更新。

然后我将提交并推送MainProject中的更改。

它受苦了。你如何与git子模块一起发展?

添加

我希望lib/中的所有更改都推送到远程lib存储库。 lib/ MainProject旁边的所有更改都推送到远程MainProject

因此,如果我直接放入lib内的远程MainProject/lib存储库 然后在lib/中的MainProject旁边添加并提交并推送更改到远程。

如果其他人克隆MainProject并执行submodule update,他会获得最新消息来源吗?

我的.gitmodules

 [submodule "lib"]
    path = lib
    url = git@github.com:XXX/YYY.git
    branch = master

1 个答案:

答案 0 :(得分:1)

您不必复制您的更改:您可以直接从MainProject/lib推送到与上游仓库(git remote origin)相同的上游仓库(git remote origin中的那个)在MainProject/../lib

MainProject/lib本身就是一个嵌套的repo:你可以添加commit并直接从它中推送它们。

但是,你必须回到MainProject/,添加,提交和推送才能记录新的gitlink(the special entry in the index of the parent repo which records the SHA1 of the submodule lib


  

添加并提交并将lib/MainProject旁边的更改推送到远程

否:当您在lib中提交任何内容时,将更改 gitlink MainProject索引中的'lib'条目)

通过“返回MainProject”(意思是,您在MainProject/lib并执行cd ..),您可以执行git add。,它将:

  • 在lib /
  • 旁边添加所有更改
  • 记录与lib/子模块关联的新SHA1('lib'gitlink条目)

但推送MainProject,完成更新的gitlink'lib'条目后,您确保克隆MainProject的任何人都会在确切更新的SHA1上找回lib。< / p>