客户端和服务器的Git分支结构

5

我正在上一门计算机科学课程,我和一个小组正在使用客户端/服务器架构编写应用程序。我想知道在Git存储库中组织项目的最佳实践是什么。我的意思是,我们是否应该像这样结构化目录:

ProjectDir/
    Clients/
        Client1/
            # files...
        Client2/
            # files...
    Server/
        files....

我们需要确定是在同一个git分支上跟踪所有内容,还是应该像下面这样为客户端和服务器创建不同的分支:

Server分支上:

Project/
    Server/
        # files...

分支 Clients 上:

Project/
    Client1/
        # files...
    Client2/
        # files...

我不知道这是否会有很大的区别,但这将是我使用git进行的第一个项目,团队人数超过几个人,我希望确保拉取和合并尽可能简单...

2个回答

5
我不确定你的背景是什么,但我听到过许多来自像SVN这样的中央版本控制系统的人反复问同样的问题。 SVN(集中式)和Git之间分支的根本区别在于,相比之下,Git分支非常轻量级和易用。毕竟,在Git中,分支只是一个带标签的提交(并且提交指向一个提交,该提交指向另一个提交,直到分支汇聚)。
在SVN中,通常将完全独立的项目作为单独的子目录托管在同一存储库中。 这些不是分支,但在SVN中,它们看起来与分支无法区分(在SVN中,分支不过是子目录而已)。 但是,您应该了解分支是什么。 分支是同一软件的两个近似副本,正在并行修改和开发。 如果您不确定是否有分支,请问自己这些分支是否会或可能会汇聚。 如果永远不可能使分支汇聚,它们可能根本不是分支。
在你的客户端服务器程序中,我建议你的客户端和服务器不是分支,而是独立的代码库。如果你希望看到它们的历史记录分开,请将它们放在不同的代码库中。如果你想要看到它们的历史记录在一起,请将它们放在同一个代码库中但是放在不同的目录下。
Git 的一个有趣特性是,由于它的分布式性质,你可以将客户端和服务器维护在不同的代码库中,然后稍后将它们作为不同的分支推入到同一个代码库中。除了让人难以理解外,几乎没有什么区别。

1

我认为你一定想让客户端和服务器库保持平等地位,但有两种不同的方法可以做到这一点:

  • 一个存储库,两个子目录,就像你所说的那样。这绝对是最简单的路径,也是足够的。听起来你不会让某些团队成员同时在两个组件上工作,这应该可以使合并变得简单,尽管如果你们都很自律,通过使用精明的特性分支隔离提交,这几乎不是问题。

  • 两个独立的存储库,一个用于客户端,一个用于服务器代码库。如果你预计在应用程序之间共享大量代码,则会变得更加繁琐,尽管在非常大的组件方面,这可能更正确/可扩展(您将使用第三个存储库存储您的公共库代码)。在这里使用子模块可以大大帮助。

我反对为客户端和服务器应用程序创建单独的分支的原因是它们在 SCM 视角下本质上是不相关的:每个部分的历史记录和源代码都没有重叠或作为彼此的函数而改变,因此分支并没有给你带来任何好处,如果你需要比较或合并它们而没有最近的或有意义的共同提交,这可能会引起潜在的问题。

要么将它们保持在一起,因为差异会显示每个提交中受影响的组件,这样你就能够以更高的(源代码树)级别整体地处理项目,要么彻底分开它们 - 在Git中,仓库是轻量级的,相对而言,所以这不仅仅是完全断裂的迹象,也是对独立开发流程的强制执行。

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