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

解决 hint to automatically insert change-id install the hook 问题,第1张

这个 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 提交不成功时出现的错误信息示例:

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

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

git push 到远程仓库时候

之后出现修改找不到的问题

又出现文件修改颠倒问题。

原理:

当执行git add “file”添加到暂存器,然后执行git

commit提交到本地库的时候,git需要在commit的时候在日志中写入一个唯一标识提交的SHA-1值,即是Change-Id值. git

commit时会调用commit_msg脚本检查提交信息,以便在git

push的时候能正常推送到远程库。此时调用默认目录下的commit_msg钩子脚本,默认目录为“.git/hooks/commit_msg”.

如果此目录下无commit_msg脚本则commit时提交日志中无ChangeId信息,则在git

push的时候出错,无法正常吧改动上传到远程服务器

    如果 git log --graph 看不到commit的话

可以 git reflog  查看过去的提交。找到那个commit ID 

再用 git reset --hard ID 回到那个版本。 

    之后如果push 提示一个 no change-ID问题

 解决方法1:

方法一:

1>复制Change-Id:Ifbea87a6358d55a189528a5f501492c37bdfec21

2>执行gitdir=$(gitrev-parse--git-dir)scp-p-P29418HostName@192.168.77.11:hooks/commit-msg${gitdir}/hooks/  从服务器拷贝commit-msg脚本到.git/hooks/目录下

3>执行gitcommit--amend重新修复提交,把第一步中的Change-Id:Ifbea87a6358d55a189528a5f501492c37bdfec21黏贴到提交日志的下一行。

4>重新执行gitpush推送本地改动到远程服务器

方法二:

如果上面你的git commit --amend 进入vim出现一个e325

目前我还没解决,这样只能找到以前的一个版本了。比较早回退到那里 。

git reset --soft id

git stash 

git pull

git stash pop

git gui

进入gui 再把修改的文件重新commit一下

最后git push。

在gerrit审核中,经常会遇到开发人员提交的代码审核不通过的情况。

那么开发人员这时有两个选择:

按照要求修改代码,然后重新提交一次代码

修改原来的Change

第一种方法会产生多次commit,而这些commit实际上是没有太多意义的,所以不推荐使用。

所以推荐第二种方法。下面讲解如何做:

安装 commit-msg hook

安装gerrit的commit-msg hook的目的是为了能够在每次提交的时候在你的本地产生一个Change-Id,这个Change-Id是将gerrit的Change和你的commit联系起来的纽带。

# 到项目的根目录下执行

curl -Lo .git/hooks/commit-msg

chmod u+x .git/hooks/commit-msg

这样的话,你每次提交的时候,这个hook都会在commit message的后面添加一行Change-Id:

$ git log -1

commit 29a6bb1a059aef021ac39d342499191278518d1d

Author: A. U. Thor

Date: Thu Aug 20 12:46:50 2009 -0700

Improve foo widget by attaching a bar.

We want a bar, because it improves the foo by providing more

wizbangery to the dowhatimeanery.

Bug: #42

Change-Id: Ic8aaa0728a43936cd4c6e1ed590e01ba8f0fbf5b

修改已经提交至gerrit的commit

$ git checkout 有问题的commit

$ <修改>

$ git commit --amend

$ git push origin HEAD:refs/for/master

Counting objects: 5, done.

Delta compression using up to 8 threads.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 546 bytes, done.

Total 3 (delta 0), reused 0 (delta 0)

remote: Processing changes: updated: 1, done

remote:

remote: Updated Changes:

remote: gerrithost:8080/68

remote:

To ssh://gerrithost:29418/RecipeBook.git

* [new branch] HEAD ->refs/for/master

注意到上面的Updated Changes字样了吗?这说明我们是更新了gerrit上的Change,而不是一般情况下的New Changes。

然后你到gerrit上查看自己的Change,是不是有变化了?

windows下怎么弄?

commit-msg hook在windows下可能无法起作用,但我们依然有办法解决这问题。

我们还是按照前面讲的步骤来:

$ git checkout 有问题的commit

$ <修改>

$ git commit --amend

注意,这个时候你需要手工添加Change-Id了,到gerrit上找到自己的Change的Change-Id:

上图的最后一样就是Change-Id,然后手工添加到commit注释的最后一行上:

Change-Id: I347f61e90f259c78fcaaa8367b804941005a9b2b

然后

$ git push origin HEAD:refs/for/master

Counting objects: 5, done.

Delta compression using up to 8 threads.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 546 bytes, done.

Total 3 (delta 0), reused 0 (delta 0)

remote: Processing changes: updated: 1, done

remote:

remote: Updated Changes:

remote: gerrithost:8080/68

remote:

To ssh://gerrithost:29418/RecipeBook.git

* [new branch] HEAD ->refs/for/master


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11448128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存