在git-review的提交消息页脚中缺少Change-Id

时间:2016-11-15 12:21:44

标签: git gerrit

我从Gerrit克隆了一个空的存储库。我创建了一个名为“new_files”的新分支,并向上游引入了一个分支。当我试图运行git-review时,我收到了这样的错误:

The outstanding commits are:

6d5d8ac (HEAD, new_files) Change-Id: If528f4dd29638e8c2a8d18a624a289afe390e6e2
cc81223 Merge branch 'master' of UPSTREAM into new_files
d787290 (upstream/master) rename properties to dat
32d76cf rename properties to dat
73d8e05 rename data to properties
e46416e Add file.
8bfcab5 referencing properties
e8b03fc rename data

Do you really want to submit the above commits?
Type 'yes' to confirm, other to cancel: yes
2016-11-15 12:09:54.407178 Running: git branch --color=never
2016-11-15 12:09:54.411090 Running: git log HEAD^1..HEAD
Using local branch name "new_files" for the topic of the change submitted
2016-11-15 12:09:54.416984 Running: git push gerrit HEAD:refs/publish/master/new_files
remote: Processing changes: refs: 1, done
remote: ERROR: missing Change-Id in commit message footer
remote:
remote: Hint: To automatically insert Change-Id, install the hook:
remote:   gitdir=$(git rev-parse --git-dir); scp -p -P 29418 user@:hooks/commit-msg ${gitdir}/hooks/
remote: And then amend the commit:
remote:   git commit --amend
remote:
To ssh://
 ! [remote rejected] HEAD -> refs/publish/master/new_files (missing Change-Id in commit message footer)
error: failed to push some refs to 'ssh://'
2016-11-15 12:09:54.655379 Running: git rev-parse --show-toplevel --git-dir

我试图安装钩子并使用修改,但没有区别。

1 个答案:

答案 0 :(得分:3)

我很想建议没有正确安装提交挂钩。此外,我建议从等式中删除git review,直到您可以自己使用git commit --amendworking,在这种情况下意味着更改ID出现在提交消息之后修改提交)。

以下是对提交消息钩子进行故障排除的方法: (我注意到以下很多假设commit-msg钩子脚本是一个shell脚本。如果这个假设不正确,请告诉我)

第1级:基础

  1. 检查提交消息挂钩是否安装在您希望的位置: $ ls -la .git/hooks/commit-msg -rwxr-xr-x 1 az staff 4407 15 Nov 19:00 .git/hooks/commit-msg
    请注意提交消息挂钩的非零大小以及('-rwx')脚本可执行的事实。

  2. 尝试.git/hooks/commit-msg执行commit-msg脚本。这应该失败了: sed: : No such file or directory 由于钩子脚本假定它是由git运行而不是独立的,所以这是正常的和预期的。保持冷静并继续。

  3. .git/hooks/commit-msg的顶部(unset GREP_OPTIONS之前)添加以下内容:
    echo "Executing basename“$ 0”with args: $@"

  4. 现在尝试做git commit --amend,对我来说,正确安装挂钩的输出如下:
    $ git commit -m "Test commit-msg hook" Executing commit-msg with args: .git/COMMIT_EDITMSG

  5. 如果您在任何步骤中都没有看到上面发布的预期输出,那么您的钩子脚本未正确安装。您可以手动将钩子脚本scp到.git/hooks目录并检查它是否可由正确的用户执行(前者是输出中的git命令)。

    第2级:要求GIT更加冗长

    如果你只是很好地问它,GIT会透露更多。请注意,这也显示正在执行的钩子脚本:

    $ GIT_CURL_VERBOSE=1 GIT_TRACE=2 git commit --amend 19:13:26.836236 git.c:349 trace: built-in: git 'commit' '--amend' 19:13:27.025894 run-command.c:336 trace: run_command: '/usr/bin/vim' '/Users/some-git-dir/.git/COMMIT_EDITMSG' 19:13:27.026454 run-command.c:195 trace: exec: '/usr/bin/vim' '/Users/some-git-dir/.git/COMMIT_EDITMSG' 19:13:28.497117 run-command.c:336 trace: run_command: '.git/hooks/commit-msg' '.git/COMMIT_EDITMSG' Executing commit-msg with args: .git/COMMIT_EDITMSG 19:13:28.504150 git.c:349 trace: built-in: git 'stripspace' 19:13:28.507498 git.c:349 trace: built-in: git 'config' '--bool' '--get' 'gerrit.createChangeId' [some-branch-blah 1f205cb] Test commit-msg hook Date: Tue Nov 15 19:00:59 2016 +0000 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 a

    第3级:像shell脚本一样调试钩子

    我怀疑这是需要查看的脚本本身,但是如果事实证明是这样的话,那么下一步就是按照通常的方式调试shell脚本(因为那是默认的) commit-msg hook is)。

    我首先将she-bang行从#!/bin/sh更改为#!/bin/sh -xv,然后在执行git commit --amend时执行脚本,然后重新编写uber-verbose输出p>