git - 无法安装 Gerrit 的 commit-msg 钩子(Hook);身份验证似乎很好

标签 git bash gerrit githooks

我刚刚将我的 Git 工具升级到最新版本(TortoiseGit 1.8.8.0PuTTy 0.63Git Bash for Windows 1.9.0) 并应用了 fix for Git Bash hanging forever after git pull .我按照公司内部关于克隆新本地存储库的说明进行操作,但未能安装 Gerrit 的 commit-msg Hook 。

在 Git Bash 中执行 scp -p -P 29418 [USERNAME]@[HOST]:hooks/commit-msg .git/hooks/ 后,出现错误 Permission denied (公钥)。但是,我的 SSH key 和其他组件似乎一切正常,因为我可以 git pull/git push 没有任何问题 Git Bash 不反对任何丢失或不正确的事情身份验证并继续进行所有其他需要身份验证的操作。

是什么导致了这个奇怪的错误(这是我本地计算机或 Gerrit 安装的问题)?如何解决这个问题呢?而且——最重要的(或最好奇的)——安装 commit-msg Hook 时身份验证失败,而在推送/pull/其他需要身份验证的命令时运行良好,这怎么可能?

我设法通过从另一个存储库复制 commit-msg 找到了一个丑陋的解决方法(它存在了一段时间,在所有这些问题开始出现之前,因为我无法安装/覆盖commit-msg 也在这个 repo 中 Hook ——出于同样的原因)。但我想知道这里发生了什么,或者我错过了这个案例的什么?

最佳答案

Git 有一个选项指定使用哪个 ssh,它使用 Plink 而不是 Bash ssh。当您使用 scp 时,它使用 Bash ssh。您还可以通过 https://yourserver/r/tools/hooks/commit-msg

直接从 gerrit 服务器下载 commit-msg Hook

如果您总是使用 Gerrit,那么我建议您将 commit-msg Hook 复制到 C:\Program Files (x86)\Git\share\git-core\templates\hooks。这样,当您克隆存储库时,commit-msg Hook 将始终放置在您的 .git\hooks 文件夹中。因为我 90% 的时间都在 Gerrit 存储库上工作,所以我发现在不需要时删除它然后在需要时添加它更容易。

否则,您可以生成一个新的 ssh key 并添加它。然后你有一个用于命令行目的的 key ,使用 ssh 和 scp,另一个用于 Git,使用 PLink。

实际上,对于我的公司,我现在确保新安装始终指定使用 SSH 而不是 PLink,因为它可以防止出现此类问题。

关于git - 无法安装 Gerrit 的 commit-msg 钩子(Hook);身份验证似乎很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23108848/

相关文章:

linux - shell 中简单 bash 命令的问题

git - 如何阻止樱桃选择到 gerrit 上的特定分支

git diff 查看 merge 会引入什么

android - Github 上的问题

java - Play Framework 2.2 子项目

git - 在 git 分支中无法看到 gh-pages 分支?

bash - 如何使用变量来指示 bash 中的文件描述符?

键入 "first command"时 Bash 可编程完成

git - 使用 gerrit 链接从 git 获取最新的补丁集

eclipse - 在 Eclipse 中禁用存储库的 Gerrit