如何在git回购中组织项目的不同部分?

如何在git回购中组织项目的不同部分?,git,Git,在一个项目中,我必须组织项目的多个部分。用php编写的web应用程序,用nodejs编写的api服务器,以及android和ios应用程序。将这些分为多个回购协议是个好主意吗?或者在一个git repo中分离文件夹?如果单个模块相当独立,您可以使用git子模块混合这两种方法。最终会得到一个文件夹/repo,其中每个子项目都有一个文件夹。每个子项目都是一个单独的存储库,可以这样使用,但您将能够从根存储库跟踪每个项目的版本,并向子模块发出“联合”命令,如中所示 git submodule updat

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

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

git submodule update
或“递归”命令,如

git submodule foreach make
你可以在网上找到一些新的信息

下面是一个设置包含多个子模块(ncs,…,test_network)的存储库的示例


我会把它们作为单独的项目。如果您需要合并git回购,您可以随时使用。

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

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

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

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

虽然这显然对开源图书馆非常有效,但却给私人回购带来了几个问题:

  • 更新速度较慢。WebStorm(可能还有其他IDE)不得不检查这么多额外的回购协议(大约10个回购协议在同步VCS时花了大约30秒进行检查,并且没有更新)。我最终在每个依赖于当前项目的目录(前端/后端/等等)中创建了shell脚本,这些脚本执行了git pull
  • 在项目中相互依赖的部分(例如,在API更改之前)恢复到给定的提交并不容易-您需要在不同的repo中签出不同的提交,或者始终使用标记。查看提交时间戳是最容易的
  • 我发现的唯一适用于此模式的好用例:

    • 需要不同权限的回购协议,例如开源组件和专有回购协议,显然应该分开。但是,一个私有回购协议可以包含项目的多个私有部分(例如,前端和后端可以是同一回购协议中的目录)
    • 在GitHub上有单独的问题跟踪程序意味着您不必在每个问题开始时都使用“In…,这会发生”
    对于“一部分一次回购”的方法,存在一些严重的问题,我不确定其优点是否值得。
    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