子树是我正在寻找的工作流程吗?

Are subtrees the workflow I am looking for?

我正在尝试设置一个在项目的不同工作环境之间移动的工作流。所有这三个区域都是它们自己单独的文件夹(它们是网站),我希望能够在开发时间表上工作,直到我准备好进行 QA 测试,然后将我的版本推到 QA 时间表。完成质量检查后,我想将其推向生产以供一般使用。因为它们是网站,所以每个时间线都是自己单独的文件夹。我在 Visio 中画了一张图来说明我脑海中的工作流程。我正在寻找的是使用子树吗?还是有更好的方法来做到这一点?谢谢!注意:我是 运行 Windows 服务器 2012 R2,IIS 8,开发、测试和生产他们自己独特的网站,现在有他们自己的数据库服务器实例和 FTP 服务器。

只是从一个非常小的团队角度分享我的经验。我们的生产和测试环境在同一个主分支上,但通过分支名称(master、qc)和标签(master.01.date、qc.01.date 等)分开。我们做了很多 rebase/cherry-pick/merge 开发提交到主分支,然后相应地发布到网站(QC/Production)。

开发人员 A 和 B 在当前或以前的生产提交中的某处分支。

Dev A 完成,重新定位到主分支,发布到 QC 站点,并发送给 QC 团队。

这可能不适用于较大的团队或复杂的项目。但这对我们来说很容易理解。我希望我们在合并之前压缩提交,虽然我有太多的提交,但它们更容易追踪。

您可以只在存储库中使用单独的分支,让每个文件夹克隆存储库并检出适当的分支。这将使您可以根据需要轻松合并和分支(根据您希望历史记录的外观进行变基或不变基;根据您的描述,我认为您想在不进行变基的情况下进行合并,因为那样您将只有一次提交,例如 "merging QA into production" 而不是引入所有 QA 提交)。在每个文件夹中都有 .git 目录会带来一些开销,但这似乎是值得的。

还有可能检出文件夹中的错误分支。如果您担心这一点,您可以改为将每个文件夹设为自己的空(或大部分为空)存储库,其中将您的实际代码作为子模块包含在内。这将使您将文件夹锁定到特定的提交(以及分支)。例如,在将 QA 合并到生产分支后,您可以将生产回购与子模块的联系推进到那个新提交。

可能最好避免挑选樱桃,因为这会导致各种奇怪的问题,并使历史更难追踪。