2013-07-26 40 views
4

在一个项目中,我必须组织项目的多个部分。用php编写的web应用程序,用nodejs编写的api服务器以及android和ios应用程序。将它们分成多个回购区是不错的主意?或单独的文件夹在一个单一的git回购?如何在git repo中组织项目的不同部分?

回答

2

如果您打算重新使用这些单独的“项目”,您应该使用git子模块。但是,如果你不这样做,我会简单地在不同的文件夹中将它们分开在一个独特的git下。

git子模块非常适合可以“克隆”并在任何其他(更大)项目中保持最新状态的项目。

请注意,它在处理子模块时会添加一些复杂层。

3

如果单个模块相当独立,您可以使用git submodule来混合这两种方法。你最终会得到一个单独的文件夹/ repo,其中每个子项目都有一个文件夹。每个子项目都是独立的存储库,可以这样使用,但您可以从根存储库跟踪每个项目的版本,并向子模块发出“联合”命令,如

git submodule update 

或 “递归” 命令,在

git submodule foreach make 

找到documentation和某种tutorial在线。

这是建立包含几个子模块的存储库(NCS,...,test_network)

git init 
git submodule add ssh://.../ncs 
... 
git submodule add ssh://.../test_network 
vim Makefile #write the Makefile for the whole project 
git add Makefile 
git commit -i -m "Makefile added" 
git submodule foreach autoreconf -i 
git submodule foreach ./configure 
make test 
0

我会保持这些作为单独的项目的例子。如果你需要结合git仓库,你总是可以使用git submodules

+0

有一些严重的[缺点](http://stackoverflow.com/questions/17875040/how-to-organize-different-parts-of-project-in-git-repo/32237710#32237710)到“每个零件的一次回购”方法,我不确定这些优势是否值得。 –

0

我试过一个项目,包括前端的网页应用程序,后端一个,一个Chrome扩展,一个网站和一些共享库的“一个回购每件”方法。这主要是由于这些库是在GitHub上开源的,而其余的代码是专有的。

虽然这显然对于开源库伟大的工作,它变成了创造私人回购几个问题:

  1. 更新较慢。 WebStorm(可能还​​有其他IDE)必须检查这个额外的回购(大约10回购大约需要30秒来检查什么时候同步VCS,并且没有更新)。我最终创建了在当前项目(前端/后端/ etc)依赖的每个目录中创建git pull的shell脚本
  2. 恢复到相互依赖的项目部分之间的给定提交(例如,之前API更改)并不那么容易 - 您需要检查不同repos中的不同提交,或者始终使用标签。查看提交时间戳是最容易的。

我发现此模式的唯一不错的效果:即需要不同的权限

  • 回购,例如一个开放源码组件与专有回购协议显然应该是分开的。然而,一个私人回购可以持有私人项目的多个部分(例如,前端和后端可以是同一个仓库中的目录)
  • 在GitHub上有独立的问题跟踪器意味着您不必通过“In ...,发生这种情况”来启动每个问题。