【问题标题】:GIT HOOK to check keyword "PROMOTE" in message when GIT MERGE is executedGIT HOOK 在执行 GIT MERGE 时检查消息中的关键字“PROMOTE”
【发布时间】:2015-08-26 00:50:05
【问题描述】:

每当与 master 和其他分支合并时,我需要检查消息中的“PROMOTE”关键字

例如:如果 git 命令是:
git merge -m "MERGE COMMIT 1 FROM BRANCH1 TO MASTER" f145cd536463e595f1e4306eeec6f92a9cd6c734 合并应该退出并出现错误“PROMOTE key word not set in merge message”

git merge -m "PROMOTE COMMIT 1 FROM BRANCH1 TO MASTER" f145cd536463e595f1e4306eeec6f92a9cd6c734 合并应该是成功的。

【问题讨论】:

    标签: git github git-merge tortoisegit


    【解决方案1】:

    merge 命令的问题在于,除非您使用--no-ff,否则不能保证创建提交。例如,您可能会从命令中得到以下结果。

    git merge  -m "MERGE COMMIT 1  FROM BRANCH1 TO MASTER"
    Updating f145cd5..cd6c734
    Fast-forward (no commit created; -m option ignored)
    

    查看postPDF,了解合并时快进与不快进的很好解释。有些人认为-no-ff 混淆了历史,它肯定会打破git-bisectgit blame。然而,其他人喜欢--no-ff,因为它允许合并 cmets 和可视化功能分支中发生的事情。

    如果您决定使用--no-ff,您可以将 git 配置为仅在全局或每个分支上执行 --no-ff。使用此命令仅在 master 上配置 --no-ff

    git config branch.master.mergeoptions  "--no-ff"
    

    让我们回到最初的问题。

    Git 支持hooks,可用于验证和工作流。挂钩可以在开发人员推送更改的本地客户端或服务器上运行。使用客户端钩子commit-msg 的正则表达式,例如one,看起来很完美。但是 git 没有可用于拒绝合并的 pre-merge 钩子。请参阅here 获取挂钩列表及其触发命令。更糟糕的是,您会注意到 git merge 不会触发任何钩子,即使您使用 --no-ff 强制提交也是如此。

    所以你有两个选择。它们与 post 中提到的相同,后者进一步探索了该主题,但没有更好的解决方案。

    • 在开发人员推送的 git 服务器上放置一个更新挂钩,例如 one。这种方法的问题在于它并不能阻止他们制造糟糕的 cmets。这种方法只是使坏的 cmets 远离服务器。如果第一次没有正确执行,开发人员将不得不做大量工作来修复历史记录,然后才能推送到服务器。
    • 编写(并分发和维护...)一个 git-merge 包装器,它将在本地 repo 级别进行控制。 Michael J Gruber 在他的 git fork here 中有一个 pre-merge hook。

    【讨论】:

      猜你喜欢
      • 2016-01-30
      • 2015-07-18
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      相关资源
      最近更新 更多