如何使用 Git 创建存储库层次结构?

Ami*_*ouk 3 git github

我有一个具有以下层次结构的项目:

Tharwa
|_tharwa-backend
|_tharwa-web
|_tharwa-mobile 
Run Code Online (Sandbox Code Playgroud)

每个 is 子文件夹本身就是一个存储库;我想创建将所有内容放在一起的存储库 Tharwa。

但是,我有以下限制:

  • 我不想将它们与子文件夹放在同一个 repo 中,因为每个文件夹都有自己的依赖项和配置文件,而且我也不希望它们的提交混淆。

  • 我不想将它们作为单独的存储库保留,因为我在父存储库上遇到了可能需要在后端和移动存储库上完成工作的问题,我希望问题也能得到解决分支,例如:

    __________________________ master
     \________________________ develop
           \______/ login
    
    Run Code Online (Sandbox Code Playgroud)

我的问题是,我怎样才能使这样的事情成为可能?我哪里错了?

如果我没有很好地解释自己,请告诉我。先感谢您

Pat*_*zek 5

基本上有3种方式可以看到它:

  1. 一个包含 3 个目录的存储库,每个项目一个
  2. 一个存储库,可能几乎是空的,有 3 个 git 子模块(因此每个存储库都是自己的存储库,但与主存储库相关联)
  3. 三个完全独立的存储库

我不知道您的约束“我不想让他们的提交混淆”。来自,也许只是因为你还不太了解git。现在请注意,您在 git 中有 powerfool 工具和选项来查看提交、按日期、作者、路径、内容等过滤。所以在我看来,这没什么好担心的。相反,这允许您通过唯一的提交清楚地显示第一个项目中的文件 X 与第二个项目中的文件 Y 同时更改(例如,因为您更改了 API,因此您需要同时更改API 的生产者和消费者的时间,这应该只反映在一次提交中)。

但是如果你想要严格的提交隔离,你可以在选项 3 和选项 2 中使用它。不在选项 1 中:在那里,一次提交可以涵盖任何子项目中的更改。

至于你的第二个约束,它在选项 1 中立即可能,在 2 中可能,但在 3 中肯定不是。

git 子模块有自己的限制,因此值得自己讨论。在大规模使用它们之前,请务必阅读并了解它们。这里有一些有趣的链接,除了官方文档(第一个链接)

至于你关于子模块和分支的具体问题,看看这个问题及其答案:Git submodules: Specify a branch/tag

就像我在评论中写的那样,事情还取决于您如何打包和分发此软件。是否总是按原样部署一段代码(选项 1 和 2 更有意义),或者您可以只发布一个与其他项目分开的项目(选项 3 更有意义)。请注意,我说的是“更有意义”,因为它不是非黑即白的,您总是可以在任何选项中实现您的目标,只是妥协不同。

这还取决于将在这些方面工作的开发人员队伍。他们对 git 的了解程度如何?submodules 不是我推荐给 git 初学者的东西。以及如何在远程存储库之间推送/拉动提交?在选项 1 中,您有一个存储库可以满足,在选项 2 中,您也需要更新子模块(请参阅文档),在选项 3 中,您有 3 个单独的存储库要处理。

可能还有其他方面需要考虑,但如果您从空白内容开始,它们可能无关紧要。喜欢大小。一些存储库有时可能包含很多历史记录,git clone例如这会产生影响(因此在这种情况下,如果一个存储库很大,则具有单独的存储库,这不会影响其他存储库)。

您似乎暗示了http://nvie.com/posts/a-successful-git-branching-model/中描述的工作流程,这是一个好的开始。如果你想坚持下去,在选项 1 中会很容易,大部分可能但在 2 中不精确,在 3 中不可能。(并查看https://www.atlassian.com/git/tutorials/比较其他一些可能的工作流程的工作流程)

在我看来,您的 2 个约束确实朝着相反的方向发展,因此您需要查看哪一个比另一个更重要。

至于我自己,但没有你的全貌,我更喜欢选项 1,因为它似乎是最灵活的(并且你可以在以后轻松切换到选项 2 或 3)。