2014-08-29 65 views
0

这里是我的项目结构你如何与git子模块一起开发?

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

当我开发MainProject,我还将开发lib/,我的意思MainProject/lib/

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

之后,我将在MainProject/lib/远程做一个子模块更新为最新。

然后,我将致力于在MainProject推变化。

罹患此病。你如何与git子模块一起发展?

ADD

我想在lib/推到远程lib库中的所有变化。 和所有在MainProjectlib/旁边变化推到远程MainProject

所以,如果我直接把远程lib仓库内MainProject/lib 然后在MainProject远程添加和提交并推送变化lib/旁边。

如果别人克隆MainProject,做submodule update,他会获得最新的来源是什么?

.gitmodules

[submodule "lib"] 
    path = lib 
    url = [email protected]:XXX/YYY.git 
    branch = master 

回答

1

你不应该复制您的更改:您可以直接从MainProject/lib推到比在发现上游回购(git remote origin)同上游回购(一种在git remote originMainProject/../lib

MainProject/lib是在自己的权利的嵌套式回购:您可以添加提交和直接从它推他们。

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


添加并提交和MainProjectlib/旁边变化远程

号:当你的lib提交anyhting,这将改变gitlink(以下简称 'LIB' 在项index)

通过“回到MainProject”(意思是说,你在MainProject/lib,你做的是cd ..),你可以做一个git add。,这将:

  • 添加LIB旁/所有更改
  • 纪录lib/子模块(以下简称 'lib' gitlink条目)

相关的新的SHA1但推MainProject,完成与更新的gitlink'lib'条目,你要确保克隆你的MainProject的任何人都会在那个确切更新的SHA1处取回lib

+0

谢谢。你是什​​么意思“回到MainProject /,添加,提交和推送......”?我在帖子中添加了一些内容。请阅读并提供帮助。谢谢。 – Sato 2014-08-29 06:22:11

+0

@Sato我编辑了我的答案。从其父代回购MainProject的角度来看,如何查看'lib'是非常重要的:作为索引中的gitlink条目,以便记录子模块检出的确切SHA1。如果您在子模块中创建一个新的提交,您需要推送它,但也要回到主项目并添加/提交该gitlink条目。 – VonC 2014-08-29 06:49:02

+0

所以当其他人克隆'MyProject'并做一个'submodule update'时,它会得到确切的SHA1(记录在'MainProject'中的gitlink条目)而不仅仅是HEAD? – Sato 2014-08-29 07:19:44