【问题标题】:GIT - Preventing Tagging with uncommited changesGIT - 防止使用未提交的更改进行标记
【发布时间】:2015-01-04 17:39:49
【问题描述】:

如果有未提交的更改,我正在尝试查看是否有可能阻止 git 标记修订(或至少将其修改)?

我正试图证明我们的 prod relase 脚本是白痴。我们的生产发布脚本中有一行代码会在 git 中添加一个标签,该标签代表当前状态和我们将发布移动到的机器。然而,我们最近发生了一个事件,somone 从 git 中检查了一个版本,对暂存区域中的文件进行了手动修改。然后他运行我们的发布脚本,将文件复制到我们的产品系统,然后尝试在 git 中标记它。问题是,由于他进行了手动修改,git 标记的版本与真正发布的版本不匹配。

我们的正常工作流程是 1)在我们桌面上的本地存储库中进行更改 2)当准备发布时,我们创建一个标签 YYYY.MM.DD.VERSION 并将标签推送到原点。 3)在远程 unix 机器上,我们执行我们的发布,我们将执行以下操作: a) 在标签上运行 git checkout - YYYY.MM.DD.VERSION 2) 运行发布脚本,该脚本又会创建包含机器名称和版本的第二个标签 - 即 MACHINE_YYYY.MM.DD.VERSION。

当时的想法是,工作流将允许我们跟踪我们打算发布的特定版本是否与复制到我们的产品系统的内容相匹配。

今天我有人在暂存区签出一个版本,然后在运行发布脚本之前手动对其进行更改(我认为他们用旧版本的文件复制了它)。当他们运行发布脚本时,它会创建一个与最后提交的版本匹配的标签,而不是修改文件的状态

如果有未提交的更改,我不希望标记发生.. 我没有在 git 手册中看到我可以使用的意见

【问题讨论】:

  • 如果我整个上午都在研究新东西,边做边提交,然后突然意识到我应该在十几个提交后添加一个标签怎么办?为什么我不能在不提交当前工作目录中的混乱情况的情况下添加标签?

标签: git


【解决方案1】:

简单:仅从裸发布存储库中进行生产发布,仅通过从该存储库中提取来进行预发布测试,并且仅标记发布并将标记从您的预发布测试存储库推回。 (编辑:除了在您的测试存储库上进行测试之外,从不做任何事情——修复是在开发存储库中进行并从开发存储库中推送的,而不是测试存储库)。

【讨论】:

    【解决方案2】:

    引入像 hudson/jenkins 这样的非个人 CI 服务器将有助于防止、避免这些类型的“人工干预”错误。 CI 服务器永远不会决定在 git clone 和 release 之间编辑文件。

    因此您的(修改后的)工作流程变为:

    1. 在我们桌面上的本地存储库中进行更改
    2. 准备发布时,我们创建标签 YYYY.MM.DD.VERSION 并将标签推送到源。
    3. hudson/jenkins CI 服务器(远程 unix 机器;可能是主/从)有一个工作配置为执行以下操作(可能由带有标签的 git push 触发):
      • git clone / 签出标签 - YYYY.MM.DD.VERSION
      • 运行发布脚本,它会创建包含机器名称和版本的第二个标签 - 即 MACHINE_YYYY.MM.DD.VERSION

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      相关资源
      最近更新 更多