解决 hint to automatically insert change-id install the hook 问题

commit-msg hook 简介

这个 hook 由 git commit 触发, 且可以通过 --no-verify 来略过。它接受一个参数,包含 commit msg 的文件的路径。如果以非 0 状态退出,git commit 将会被取消。这个 hook 可以用于修改message(信息)文件, 用来匹配项目的规范格式(如果有的话)。也可以用于校验 commit msg,并在必要时拒绝提交。缺省的 commit-msg hook,当启用时,将检查重复的 Signed-off-by 行, 如果找到,则取消commit。

问题情景

当执行 git add “file” 添加到暂存器,然后执行 git commit 提交到本地库的时候,git 需要在commit 的时候在日志中写入一个唯一标识提交的 SHA-1 值,即是 Change-Id 的值。 git commit 时会调用 commit_msg 脚本检查提交信息,以便在 git push 的时候能正常推送到远程库。此时调用默认目录下的 commit_msg hook 脚本,默认目录为 “.git/hooks/commit_msg”。如果此目录下无 commit_msg 脚本则 commit 时提交日志中无 ChangeId 信息,则在 git push 的时候出错,无法正常把改动上传到远程服务器。
如下为 git push 提交不成功时出现的错误信息示例:

Total 10 (delta 5), reused 0 (delta 0)
remote: Processing changes: refs: 1, done    
remote: ERROR: missing Change-Id in commit message footer
remote: Suggestion for commit message:
remote: XOXOXOXOXOXOXOXOXO
remote: 
remote: Change-Id: Ifbc96b87965ba13fdf6c9cabadfbb4c4a6474
remote: 
remote: Hint: To automatically insert Change-Id, install the hook:
remote:   gitdir=$(git rev-parse --git-dir); scp -p -P 29422 toby@test.personal.com:hooks/commit-msg ${gitdir}/hooks/
remote: 
remote: 
To ssh://toby@test.personal.com:29422/test/test0
 ! [remote rejected] HEAD -> refs/for/master (missing Change-Id in commit message footer)
error: 无法推送一些引用到 'ssh://toby@test.personal.com:29422/test/test0'

解决方法

  1. 复制上述错误信息中的如下 Change-Id 到剪贴板
Change-Id: Ifbea87a6358d55a189528a5f501492c37bdfec21
  1. 在命令行中执行上述错误信息中的如下命令
gitdir=$(git rev-parse --git-dir); scp -p -P 29422 toby@test.personal.com:hooks/commit-msg ${gitdir}/hooks/ 

从服务器拷贝commit-msg 脚本到 .git/hooks/ 目录下

  1. 在命令行中执行 git commit --amend 重新修复提交,把第一步中复制的 Change-Id: Ifbea87a6358d55a189528a5f501492c37bdfec21 粘贴到提交日志的下一行。注意这个 Change-Id 最好是独占一行。
  2. 重新执行 git push 推送本地改动到远程服务器。

参考文章:git学习--commit-msg缺失导致的missing Change-Id问题分析

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • git中提供了一组hook,规定了每个hook的名字,以及hook接收的参数个数和每个参数的含义。用户如果要使用h...
    ElpieKay阅读 14,063评论 0 5
  • 本片内容转自CSDN http://blog.csdn.net/ithomer/article/details/7...
    五娃儿阅读 10,350评论 2 87
  • 1.什么是 Git Hooks 如同其他许多的版本控制系统一样,Git 也具有在特定事件发生之前或之后执行特定脚本...
    就叫yang阅读 8,620评论 3 11
  • 什么是Git Hooks? 话说,如同其他许多的版本控制系统一样,Git也具有在特定事件发生之前或之后执行特定脚本...
    茗涙阅读 13,903评论 0 7
  • ”小白“是谁? 是71岁的白金芹老人。 小白没有特别伟大的成就,也不是网红,赚钱应该也不多,最...
    胖胖李阅读 2,844评论 0 0