4

在一个项目中,我必须组织项目的多个部分。一个用php编写的web应用程序,用nodejs编写的api服务器以及android和ios应用程序。将这些分成多个回购协议是个好主意吗?或者在单个 git repo 中单独的文件夹?

4

4 回答 4

3

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

git submodule update

或“递归”命令,如

git submodule foreach make

您可以在线找到文档和某种教程

这是一个设置包含多个子模块(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
于 2013-07-26T07:14:09.533 回答
2

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

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

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

于 2013-07-26T07:16:50.520 回答
2

我已经为一个由前端 Web 应用程序、后端应用程序、Chrome 扩展程序、网站和一些共享库组成的项目尝试了“每个部分一个 repo”方法。这主要是因为这些库在 GitHub 上是开源的,而其余代码是专有的。

虽然这显然对开源库很有效,但结果却给私有仓库带来了几个问题:

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

我为这种模式找到的唯一好的用例:

  • 需要不同权限的存储库,例如开源组件与专有存储库,显然应该是分开的。但是,一个私有 repo 可以包含项目的多个私有部分(例如,前端和后端可以是同一个 repo 中的目录)
  • 在 GitHub 上拥有单独的问题跟踪器意味着您不必在每个问题开始时都使用“在 ...,这发生了”。
于 2015-08-26T22:25:04.140 回答
0

我会将它们作为单独的项目保留。如果你需要结合 git repos 你总是可以使用git submodules

于 2013-07-26T07:14:40.137 回答