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

时间:2011-02-16 02:48:41

标签: git git-branch

对于我的一个CS类,我和一个小组正在使用客户端/服务器架构编写应用程序。我很好奇在Git存储库中组织项目的最佳实践是什么。我的意思是,我们是否应该像这样构建目录:

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

并跟踪同一个git分支上的所有内容,或者我们是否应该为客户端和服务器创建单独的分支,例如:

分支Server上的

Project/
    Server/
        # files...
分支Clients上的

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

我不知道它是否有很大的不同,但这将是我使用git进行的第一个项目,其中团队由超过几个人组成,我想确保拉动和合并是如此尽可能简单......

2 个答案:

答案 0 :(得分:2)

我不确定你的背景是什么,但是我听到了来自SVN等中央VCS的人们一遍又一遍地问过同样的问题。 SVN(集中式)和Git之间的分支之间的根本区别在于Git分支非常轻且易于比较。毕竟,在Git中,分支只不过是一个标记的提交(并且提交指向提交,指向提交,直到分支收敛为止)。

在SVN中,通常在同一存储库中作为单独的子目录托管完全独立的项目。这些不是分支,但在SVN中,它们看起来与分支无法区分(在SVN分支中并不比子目录多)。但是,您应该understand what a branch is。分支是同一软件的两个近似副本,这些软件正在被并行修改和开发。如果您不确定自己是否有分支机构,请问自己这些分支机构是否会或可能会收敛。如果让分支收敛是没有意义的,那么它们可能根本就不是分支。

在您的客户端 - 服务器程序中,我建议您的客户端&服务器不是分支机构。相反,它们是独立的存储库。如果您重视将历史记录分开,请将它们放在单独的存储库中。如果您想要一起查看它们的历史记录,请将它们放在同一个存储库中,但是在不同的目录下。

Git的一个有趣特性是,由于它的分布式特性,您可以将客户端和服务器维护在单独的存储库中,然后将它们推送到与不同分支相同的存储库中。除了疯狂尝试理解之外,没什么区别。

答案 1 :(得分:0)

我认为您肯定希望保持客户端和服务器库的平等,但有两种不同的方法可以做到这一点:

  • 如您所示,有一个存储库,两个子目录。这当然是最简单的路径,而且可能已经足够了。听起来你不会让某些团队成员同时处理这两个组件,这应该使合并变得简单,尽管如果你们都受到纪律处分并通过明智地使用功能分支来隔离你的提交,那么这几乎不是问题。 / p>

  • 两个单独的存储库,一个用于客户端,另一个用于服务器代码库。如果您期望在应用程序之间共享大量代码,这会变得更加麻烦,尽管对于非常大的组件来说可能更加正确/可扩展(您可以使用第三个存储库来存储公共库代码)。子模块的使用在这里有很大帮助。

我建议针对客户端和服务器应用程序的单独分支的原因是它们从SCM的角度来看基本上是无关的:每个部分的历史和源代码不会彼此重叠或变化,因此分支如果您需要在没有最近或有意义的共同提交的情况下比较或合并其中两个,那么就不会给您带来任何东西,并且会导致潜在的麻烦。

要么将它们保持在一起,因为差异将显示每个提交中受影响的组件,然后您将能够在更高(源 - 树)级别上整体处理项目,或者去一直保持它们完全分离 - 相对来说,git中的存储库是轻量级的,所以这并不表示完全中断是执行单独的开发过程。