【问题标题】:How to ensure commit policy of "code must be compile" when using git staging?使用 git staging 时如何确保“代码必须编译”的提交策略?
【发布时间】:2021-11-12 00:01:55
【问题描述】:

假设场景,我修改了两个源文件,但只暂存其中一个,并执行提交(本地)这个特定的提交将代表文件系统中不存在的源状态,所以我无法测试是否它是否编译。 (这是提交策略所必需的)

在本地恢复到该特定提交(然后编译)将导致未暂存文件的更改丢失。 如果不将其推送到远程,我无法将其克隆到其他文件夹以测试是否编译,但是将其推送到远程将使未经验证的源可供团队使用,所以让事情变得更糟。

我能找到的唯一工作流程是,创建当前源的本地(备份)副本,然后将本地存储库恢复为提交,(接受丢失的未提交更改(未暂存的源文件)),编译,如果没有编译,则从备份中复制回来,修改,猜测,修改,仍然没有暂存我最初不想提交的内容,然后重复此循环直到恢复文件正在编译。

问题

这听起来太复杂了,要么

  • a) 我想念一些东西,
  • b) 暂存需要彼此严格一致的文件(源文件),暂存不是一种可用的做法。对多个文件的修改必须是原子的(a la ACID)。

【问题讨论】:

  • 进行尽可能多的 本地提交,即使它们没有构建 - 唯一重要的是您的代码构建在 压缩提交 将从您最终提交的 PR 中合并。
  • 您误解了提交策略的性质:它们(旨在)仅用于来自功能分支的合并提交。提交政策与您的本地提交有关(否则任何人将如何完成任何事情?)
  • ……也就是说,你为什么不压缩/追加/重新定位?
  • 确实,本地提交不会破坏其他人的工作,但是它仍然存在,甚至进一步的提交将被编译,远程仓库仍然会被不可用的不编译提交污染。不暂存文件的目的是什么,在一系列 local 提交期间保留该文件更改,然后最终在提交中发布它,然后将所有提交推送到远程?如果整个都在本地,那么整个不登台并保留一些更改以查看其他人变得毫无意义。此外,必须编译是每次推送的提交都必须进行的,除了在私有分支中。
  • “远程仓库仍然会被不可用的不编译提交污染”——这就是我说压缩提交的原因。

标签: git policy


【解决方案1】:

您可以使用git stash push -ak 撤消对工作目录尚未提交或暂存的所有更改。然后您可以进行测试,提交您的分阶段更改,然后git stash pop 以恢复您正在进行的工作。 git stash 文档甚至建议了这个用例(示例下的“测试部分提交”)。

【讨论】:

  • 非常感谢。如果我理解正确的话,重点是 -k(--keep-index)
  • @g.pickardou 是的,--all 甚至将更改隐藏到未跟踪和忽略的文件中,因此您正在测试的内容就是您将提交的内容。
  • 再次感谢.......
猜你喜欢
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 2014-10-15
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2019-03-05
相关资源
最近更新 更多