将完成一半的工作推到回购是一种不好的做法吗?

Is it a bad practice to push half done work to a repo?

今天我与一位同事进行了讨论,他批评我将破坏应用程序的代码推送到我们存储库中的功能分支。

基本上,我一直在替换一个在我们的应用程序中广泛使用的库。这是一个在几天内花费相当多小时工作的更改,所以我将它分成几个有意义的提交,但并不是所有的提交都使应用程序处于工作状态(例如,可能有一些损坏的单元测试或一些编译错误)。我通常会尽快将每次提交推送到服务器以保留备份。

今天发生的事情是一位同事错误地将我的分支合并到主分支,不出所料,应用程序对他不起作用。根据他的说法,我永远不应该将任何破坏应用程序的东西推送到 repo 中,即使它在功能分支中也是如此;相反,我应该只将它保存在我的计算机中,直到它稳定为止。

这违背了我之前工作过的公司的做法,所以我来向你请教。你认为这是一种不好的做法吗?如果是这样,您将如何处理可能几天都没有稳定代码库的情况?

没有。只要你不合并你的分支,你就可以推送所有内容。 一些重构需要 ci/cd 处理以进行测试等。 或者您需要推送才能开始基于工具的审核等。

如果您不想合并分支,您可以定义一个前缀,例如 "WIP" 并防止合并此类分支。

“让你电脑上的所有东西都保持正常运行——一旦其他开发人员在你的项目上开发,你就会下地狱。当你生病时,没有人可以接手,等等。

这最终取决于您团队的工作流程,允许或不允许的内容,但我想说这很常见:

  • 特征分支并非始终处于稳定状态
    如果他们是,他们就不会在开发中;否则您将不得不主动保留对上游存储库的更改。

  • Git作为备用
    如果将(不完整的)更改推送到远程存储库,则可以免费备份数据。

  • 特征分支清理完毕
    当经过大量开发后分支最终变得过于杂乱无章时,可以通过组合(压缩)或拆分它们来重写提交,然后强制推送(git push --force-with-lease)到功能分支以覆盖上游副本。

  • 有一个完成和合并特征分支的过程
    通常称为 pull requestmerge request,您作为功能分支的开发者 积极地 推广您的更改准备接受审查并可能包含在 master 分支中。

简单地假设你的分支已经准备好并在没有 test/review 的情况下将它合并到 master 中是相当粗心的。也就是说,除非这是您明确同意的工作流程——但我不会考虑这个行业最佳实践。

一些 Git 托管平台还允许强制更改通过 PR/MRs,有些甚至禁止合并遵循特定名称方案的分支(例如包含 "WIP" )。

A "feature branch" 可能会或可能不会共享,因此不清楚您的意思。

但基本上,只要你推送的分支被定义为不与任何人共享,那么你应该可以推送任何你想要的东西(通常它甚至允许强制推送到这样的分支) .

您可以推送您所做的任何更改并发布到您的远程分支。只要没有人合并你的分支,每个人都是安全的,你的备份也被保留了下来。但是对于用例(我遵循),假设您正在 module/feature 工作,其中功能不完整但您已将更改推送到远程。稍后您有另一个 change/addition 或完成了您的功能,现在出于某种原因,您需要知道您对现有代码所做的更改是什么。你会做什么?您必须遍历为单个功能所做的所有提交,如果您有多次 changed/edited 的代码片段,这将非常麻烦。 但是如果你只有一个提交,你会更容易修改你的更改并且耗时更少。