具有多个文件夹分支的单个Git存储库

时间:2013-12-30 07:10:02

标签: git

我似乎无法找到正确的搜索字词来回答这个问题所以我会写一个新问题。如果在某个地方有一个类似的问题有一个好的答案,我会很乐意接受/关闭这个。

这将是我的项目结构

/Project/
    /Project1
    /Project2
    /Project3

Project2依赖于Project1,Project3依赖于Project2,但我不认为这完全相关。

现在,Project1,Project2和Project3中的每一个都有自己独立的Git存储库。这很好,除了管理起来很麻烦,因为我因为依赖而同时对所有三个进行并行开发。

我想要的是将单个存储库放在Project/文件夹中,并且有3个单独的分支,每个分支都跟踪它们自己的文件夹的更改。因此,当我提交对Project2和Project3的更改时,Project2和Project3的提交历史都会受到影响。

我正在寻找的主要优势是,在GitExtensions中,我将能够看到并添加到各个项目的提交历史记录中,而不是必须打开3个窗口,每个回购一个窗口。这可能吗?

2 个答案:

答案 0 :(得分:2)

我建议你重新考虑你想要做的事情。

您需要确定这些项目是否真正独立。如果它们实际上是分开的,那么只需使用不同的存储库。如果它们不是分开的,那就不要那样对待它们;只需在根Project/文件夹中创建一个存储库。您的分支机构应该用于跟踪单独的功能,而不是项目。 Git中的存储库被设计为特定于单个项目,与Subversion不同,在Subversion中您可以将许多不同的项目放在单个存储库中。

你问题的以下部分引起了一个红旗:

  

我想要的是在Project /上放置一个存储库   文件夹,并有3个单独的分支,每个分支跟踪自己的分支   文件夹的更改。所以,当我对Project2和Project3进行更改时,   Project2和Project3的提交历史都会受到影响。

您要求3个单独的分支单独跟踪每个项目的更改,但之后您说您希望项目x的历史记录影响项目y的历史记录。再说一遍,你真的想在这里实现什么?这些项目要么是单独的,要么不是。

我建议反对使用单独的分支来单独跟踪您的项目。对单独的项目使用单独的存储库,并仅使用分支来处理最终将合并回主分支的特定功能。

最后,您可以在Project/级别创建“主”存储库,然后使用git submodules来跟踪子项目。 Git子模块可能会引入unnecessary complexity,因此请将它们作为最后的手段使用。

答案 1 :(得分:0)

问题中提出的上述情况在以下情况中非常有效。

微服务:以AWS Lambda开发为例,例如在lambda上进行一两个开发工作,据说总共有70个lambda。因此,包含test和code_folder的70个文件夹。如果是单片系统,则必须通过零合并问题来确保系统的所有部分一起工作。但是这里70个文件夹中的每一个都是独立的,除了很少的全局配置和共享的文件夹。

Monorepo :大型公司使用monorepo来管理大型项目的所有子项目,包括移动应用程序,网站,后端和其他相关内容。

如果每个分支轨道仅在其文件夹中更改,则Master分支可能具有或没有全部代码。

一种实现方法,首先为共享模块创建一个共享分支。然后,创建多个分支,每个分支均以空文件夹开头。永远不要将您的分支与主分支合并,只能拉共享分支在本地合并您的分支并推送到远程分支。

因此,远程服务器上的每个分支都有共享模块和您的代码。