如果它们密切相关,将单独的项目保存在同一个存储库中是一个好主意吗?

时间:2012-01-20 06:48:56

标签: git node.js project-management

我处于Web应用程序的早期阶段,该应用程序将包含部署到客户端浏览器的客户端JavaScript应用程序以及驻留在我的服务器上的服务器端REST类型API。这两个将使用Ajax和JSON数据进行通信。

现在是这样的;它们是完全独立开发的,甚至不共享一行代码或一个资源。两者都是node.js应用程序。服务器端使用express和sequelize用于所有服务器端的东西,客户端使用带有手写笔和咖啡脚本的下摆开发服务器开发,并将编译为3个文件(index.html,application.js和application.css) )最终将由服务器作为静态数据部署。

这部分我不确定如何版本控制它。例如,他们是否应该共享或分开版本号。另外git repo应该怎么样。 git repo根文件夹是否通常包含两个或多个具有单独但密切相关的项目的文件夹?或者我应该通过分支将它们分开,一个叫做服务器,一个叫做客户端?或者我应该将它们分成两个独立的存储库? (因为我正在使用github私有回购,这会更贵)

我不是在找任何人告诉我该怎么做,而是告诉我替代方案的利弊。根据您的经验,最佳的行动方案和原因。如果您认为他们是好的,请随意提出其他行动方案。

谢谢!

3 个答案:

答案 0 :(得分:13)

一般的经验法则是,"同时改变的事物应该一起版本化。"

如果后端需要支持多个客户端并且将独立于您的前端进行更改,就像您在使用基于服务的体系结构时那样,那么值得考虑将这些内容分成单独的项目。< / p>

然而,由于听起来这两个项目将相当紧密耦合,并且您的Web应用程序只有在适当的位置才有意义,我建议您首先将它们保存在同一个存储库中。这是一种摩擦较小的开发体验,如果它变得很痛苦,或者如果不同的团队需要处理它们,你可以随后将它们分开。

答案 1 :(得分:7)

分支用于制作通用代码库的并行版本(请参阅“When should you branch”)。
因此,它不适合跟踪两个不同但密切相关的模块。

Git仓库中的简单目录就足够了,并且将确保您在该仓库上设置的任何标记都将引用这两个模块。

答案 2 :(得分:5)

从我的观点来看,我会将clientserver分成root下的两个主要文件夹。这有几个原因:

  1. 客户端和服务器版本将相互关联(物理上)。正如他们所做的那样,因为你的客户将与你的服务器软件提供的api密切相关。因此,如果您将存储库标记为发布,您将确保这两个工件可以顺利地协同工作。

  2. 实施大规模集成测试以及推出持续集成基础架构将会减少您的痛苦。使用其他选项也可以实现这一点,但是您必须提供更多的开销。

  3. 一般分支用法:

    • master通常用作应用程序(包括客户端,服务器)的一致稳定“快照”
    • 分支可用于表示新功能开发。通常它们以这种方式使用。因此,您可能最终拥有包含软件附加内容的1..n分支。如果你对它感到满意,它将被合并回你的主人。