GIT - 使用未提交的更改防止标记

时间:2014-11-07 20:29:20

标签: git

如果有未提交的更改,我试图查看是否可以阻止git进行修订(或至少暂停)?

我正在努力证明我们的生产剧本。我们的生产发布脚本中有一行会在git中添加一个标记,表示当前状态和我们正在发布的计算机。然而,我们最近发生了一个事件,其中somone从git中检出了一个vesion,在暂存区域对文件进行了手动修改。然后他运行我们的发布脚本,将文件复制到我们的prod系统,然后尝试在git中标记它。问题在于,由于他进行了手动修改,因此git标记版本与真正发布的版本不匹配。

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

我们的想法是,工作流程可以让我们跟踪我们打算发布的特定版本与复制到我们的产品系统的版本相匹配。

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

如果有未完成的更改,我不希望标记发生..虽然我可以使用

但我没有看到git手册中的意见

2 个答案:

答案 0 :(得分:0)

简单:只从一个裸出版的存储库中执行您的生产版本,只从该存储库中提取您的预发布测试,并且仅标记该版本并将标记从您的预发布测试存储库中推回。 (编辑:除了测试您的测试仓库之外什么都不做 - 修复是在开发存储库中进行的,而不是从测试存储库中推出的。)

答案 1 :(得分:0)

引入像hudson / jenkins这样的非个人CI服务器有助于防止这种类型的“手动干预”错误。 CI服务器永远不会决定在git clone和amp;之间编辑文件。释放。

所以你的(修改过的)工作流程变为:

  1. 在我们的桌面上对本地存档进行更改
  2. 准备好发布时,我们创建一个标签YYYY.MM.DD.VERSION并用标签推送到原点。
  3. hudson / jenkins CI服务器(远程unix盒;可能是主/从)有一个配置为执行下面的工作(可能由git push w / tag触发):
    • git clone / checkout标签 - YYYY.MM.DD.VERSION
    • 运行发布脚本,该脚本创建包含机器名称和版本的第二个标签 - 即MACHINE_YYYY.MM.DD.VERSION