【问题标题】:Git, Two Repositories in One SolutionGit,一个解决方案中的两个存储库
【发布时间】:2018-09-27 05:36:11
【问题描述】:

我们在 Visiual Studio 上有两个用 c# 编写的项目,我们将它们命名为 A 和 B。这两个项目都可以用作单独的产品。 Bu B 可以作为一个模块集成到 A 或其他产品中。我们使用的是 SVN,但现在我们正在使用 VSTS(azure devops)切换到 Git。

我们主要开发 B 项目,同时开发 A 项目,在同一个解决方案中。

有什么方法可以单独设置这些存储库并在同一个分支中提交两个项目的更改而无需切换解决方案?

我们应该使用什么正确的策略来管理这种情况?

【问题讨论】:

    标签: c# git visual-studio azure-devops


    【解决方案1】:

    我们使用 git 子模块来解决这个问题。子模块是另一个 git 存储库中的一个单独的 git 存储库。您在两个存储库中分别提交,并且父存储库“记住”它当前指向的子模块存储库的哪个提交。

    您可以找到大量关于子模块的文档,例如在pro git book。有一些陷阱,但如果您一旦掌握了工作流程,它就是解决您问题的好方法。

    Git Subtrees 可能是另一种选择。

    【讨论】:

    • 除非您作弊并且能够并排克隆 2 个存储库(并且所有开发人员都执行相同的约定)并从 A 引用 B(不推荐解决方案),git submodules 是要走的路。这不是那么容易,但也不是那么难,所以通过一些训练,这是可行的。您还可以将 Gitextensions 用作具有良好子模块支持的 git GUI(避免使用 VS git 功能)。 Git 子树不是我的解决方案。
    【解决方案2】:

    作为子模块方法的替代方案,您可能需要考虑monorepo 方法;换句话说,将两个项目保存在同一个 git 存储库中。

    在使用存储库中的代码时,Git(或 Visual Studio)中没有任何内容要求您使用存储库的根文件夹作为工作目录,因此您当前在每个单独项目中的开发人员工作流程可能工作得很好。您还可以获得在同一个解决方案中处理 B 和 A 会感觉非常自然的好处。

    根据您的团队结构等,当然也有缺点(例如,如果没有良好的纪律,很多人在同一个存储库中工作可能会很麻烦),所以不要将此视为“银弹” - 将其视为解决您问题的众多可能解决方案之一;评估它们并根据看起来对您有用的方法来选择一种(如果不起作用,请再次切换)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 2014-10-02
      • 2017-06-02
      相关资源
      最近更新 更多