我刚刚将我的Git工具升级到最新版本( TortoiseGit 1.8.8.0 , PuTTy 0.63 和 Git Bash for Windows 1.9.0 )并应用fix for Git Bash hanging forever after git pull
。我按照内部公司的说明克隆了新的本地存储库,但我没有安装Gerrit的commit-msg
钩子。
在Git Bash中执行scp -p -P 29418 [USERNAME]@[HOST]:hooks/commit-msg .git/hooks/
后,我收到错误Permission denied (publickey)
。但是,使用我的SSH密钥和其他组件似乎一切正常,因为我可以git pull
/ git push
没有任何问题Git Bash不反对任何有关丢失或不正确的身份验证的事情,并继续进行所有其他操作,这需要身份验证。
导致这个奇怪错误的原因是什么(这是我的本地计算机还是Gerrit安装的东西)?如何解决这个问题呢?并且 - 最重要(或最好奇) - 如何可能,安装commit-msg
挂钩时验证失败,而推/拉/其他需要验证的命令工作正常?
我设法通过从另一个存储库复制commit-msg
找到了一个丑陋的解决方法(在所有这些问题开始出现之前已经有一段时间了,因为我无法安装/覆盖commit-msg
钩在这个回购中 - 出于同样的原因)。但是我想知道,这里发生了什么或者我对这个案例缺少什么?
答案 0 :(得分:7)
Git有一个选项,指定使用哪个ssh,它使用Plink而不是Bash ssh。当你使用scp时,它使用Bash ssh。您也可以通过commit-msg
https://yourserver/r/tools/hooks/commit-msg
挂钩
如果您一直在使用Gerrit,我建议您将commit-msg挂钩复制到C:\Program Files (x86)\Git\share\git-core\templates\hooks
。这样,克隆存储库时,commit-msg
挂钩将始终放在您的.git\hooks
文件夹中。当我90%的时间在Gerrit存储库上工作时,我发现当我不需要它时更容易删除它,然后在需要时添加它。
否则,您可以生成一个新的ssh密钥并添加它。然后你有一个用于命令行目的的键使用ssh和scp,一个用于Git使用PLink。
实际上,对于我的公司,我现在确保新安装总是指定使用SSH而不是PLink,因为它可以防止这样的问题。