解决 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 [email protected]:hooks/commit-msg ${gitdir}/hooks/
remote: 
remote: 
To ssh://[email protected]:29422/test/test0
 ! [remote rejected] HEAD -> refs/for/master (missing Change-Id in commit message footer)
error: 无法推送一些引用到 'ssh://[email protected]:29422/test/test0'

解决方法

  1. 复制上述错误信息中的如下 Change-Id 到剪贴板
Change-Id: Ifbea87a6358d55a189528a5f501492c37bdfec21
  1. 在命令行中执行上述错误信息中的如下命令
gitdir=$(git rev-parse --git-dir); scp -p -P 29422 [email protected]: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问题分析

你可能感兴趣的:(解决 hint to automatically insert change-id install the hook 问题)