如何在git仓库中组织项目的不同部分?

4

在一个项目中,我需要组织多个部分。包括用 PHP 编写的 Web 应用程序、用 Node.js 编写的 API 服务器以及 Android 和 iOS 应用。将它们分开成多个仓库或者是单个 Git 仓库中的不同文件夹里,哪种方法更好呢?

4个回答

3
如果单个模块相对独立,您可以使用git子模块来融合这两种方法。您将得到一个单一的文件夹/存储库,其中每个子项目都有一个文件夹。每个子项目都是一个单独的存储库,可以像这样使用,但是您还可以从根存储库跟踪每个项目的版本,并发出“联合”命令到子模块中。
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

2
我曾尝试“每个部分一个仓库”的方法来管理一个项目,这个项目包括一个前端Web应用程序、一个后端Web应用程序、一个Chrome扩展程序、一个网站以及几个共享库。这主要是因为这些库在GitHub上是开源的,而其余的代码则是专有的。
虽然这显然对开源库非常有效,但它也会给私有库带来一些问题:
  1. 更新速度较慢。WebStorm(和可能其他的IDE)必须检查这么多额外的仓库(对于大约10个仓库,在同步VCS时检查需要30秒左右,且没有更新)。最终我创建了Shell脚本,在当前项目(前端/后端/等)的依赖目录中执行git pull。
  2. 在相互依赖的项目部分之间恢复到给定的提交(例如,在API更改之前)不是那么容易——您需要在不同的仓库中检出不同的提交,或者始终使用标签。查看提交时间戳是最简单的方法。
我发现这种模式的唯一好处是:
  • 需要不同权限的仓库(例如开源组件与专有仓库)应该分开。但是,一个私有仓库可以包含多个私有项目的部分(例如前端和后端可以是同一仓库中的目录)。
  • 在GitHub上拥有单独的问题跟踪器意味着您不必在每个问题中都以“在......中,发生了这种情况”开头。

2
如果您计划重复使用这些单独的“项目”,则应该使用git子模块。但是,如果您不需要这样做,我建议您只需在一个唯一的git下将它们分开放置在不同的文件夹中。
git子模块非常适用于可以在任何其他(更大的)项目中“克隆”并保持最新状态的项目。
请注意,处理子模块时会增加一些复杂性层次。

0

我会将它们作为独立的项目保留。如果需要合并 git 仓库,您可以随时使用git 子模块


"一部分一个repo"的方法存在一些严重的缺点,我不确定这种方法的优势是否值得。" - Dan Dascalescu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接