【问题标题】:why post-merge git hook not running?为什么合并后的 git hook 没有运行?
【发布时间】:2015-02-09 20:11:36
【问题描述】:

我只是想运行一个 git hook(post-merge) 来验证最近的 pull 中发生了哪些变化。

这是我的合并后脚本

#/usr/bin/env bash

echo "======> following are changes made to local repo <======"

git fetch && git log ..origin/master --pretty=format:"%s - %ar by %an (%h)"

echo "=======> ****************** <========"

我已授予必要的文件权限chmod +x post-merge

命令git fetch &amp;&amp; git log ..origin/master --pretty=format:"%s - %ar by %an (%h)" 在我手动运行时运行完美。

但是当我执行git pull origin master 时,它只显示

echo "======> following are changes made to local repo <======"
echo "=======> ****************** <========" 

因为git pull 执行git fetchgit merge 我试过了

#/usr/bin/env bash

    echo "======> following are changes made to local repo <======"

    git log ..origin/master --pretty=format:"%s - %ar by %an (%h)"

    echo "=======> ****************** <========"

我哪里出错了?

git 版本 1.9.1

谢谢

【问题讨论】:

    标签: git github merge githooks


    【解决方案1】:

    因为post-merge是在git pull之后执行的,也就是说post-merge执行的时候,你的HEAD和origin/master是一样的,所以你得到了空输出。

    试试这个:

    #/usr/bin/env bash
    
    echo "======> following are changes made to local repo <======"
    
    git fetch && git log ORIG_HEAD..origin/master --pretty=format:"%s - %ar by %an (%h)"
    
    echo "=======> ****************** <========"
    

    key是ORIG_HEAD,是危险操作前HEAD的最后一个值(包括merge)

    有关ORIG_HEAD的更多信息,请阅读HEAD and ORIG_HEAD in Git

    【讨论】:

    • 我是这个概念的新手,你能解释一下吗?
    • that because post-merge is executed after git pull, that is when post-merge is executed 我想检查一下 pull 后都发生了什么变化。这意味着合并后我只需要这样做吗?因为 git pull 会同时执行 git fetch 和 git merge 对吗?
    • @h.APP.y git pull will do both git fetch and git merge --> 是的。
    • 那我该怎么克服呢?
    • @h.APP.y changed_files=$(git fetch &amp;&amp; git log ORIG_HEAD..origin/master --pretty=format:"%s - %ar by %an %h") = 周围没有空格
    猜你喜欢
    • 2022-12-18
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2011-07-07
    • 2013-07-16
    • 1970-01-01
    相关资源
    最近更新 更多