我们有一个‘主’Mercurial服务器在我们的网络上,我们使用它作为一个本地暂存箱。我们的团队完成了与这个盒子的所有推送和拉出操作。我正在使用的实现遇到了问题,但我也在猜测我想要做的是不是一个好主意……
我们还希望开始使用BitBucket,但仅将其作为辅助服务器。我想使用钩子自动推送到Bitbucket,但我不能让它正常工作……
下面是“master”库中的HGRC:
[hooks]
changegroup =
changegroup.update = hg update
changegroup.bitbucket = hg push ssh://hg@bitbucket.org/account/repo如果我手动启动上面的推送,一切都会完美地工作。然而,作为一个钩子,它失败了:
warning: changegroup.bitbucket hook exited with status 255
我遵循下面的指南来让SSH正常工作:Set up SSH for Git and Mercurial on Mac OSX/Linux
我得到我的密钥生成,我运行ssh-agent,我ssh-add密钥。但是ssh-agent似乎没有做任何事情,我一退出SSH会话,它似乎就离开了内存。此外,当我用ssh -Tv hg@bitbucket.org测试它时,它会提示我输入密码。我以为这一切都是为了让它不那么做?
但退后一步,也许这是一个糟糕的想法。如果我把我的公钥给Bitbucket,理论上这不是意味着如果有人拿到它,他们就可以在没有密码的情况下SSH到我的邮箱吗?
如果是这样的话,我必须将提交转发到bitbucket吗?我不想使用HTTPS,因为它需要在.hg/hgrc文件中以纯文本的形式输入我们的bitbucket密码……
也许有一些更明显的方法来做这件事,我错过了?对于开发人员来说,我宁愿保持现在的状态(每个人都推送到master),而不是重新配置每个人的开发人员盒子,使其拥有私钥并推送到bitbucket……
一如既往,感谢你们能提供的任何帮助。
发布于 2013-12-21 03:29:00
哇,这里有很多问题。我会找到其中的几个:
,但是ssh-agent似乎没有做任何事情,而且我一退出SSH会话,它似乎就离开了内存。
你是对的。ssh-agent用于交互式会话,而不是自动化。在大多数情况下,当您注销时,它会被终止,但即使不是这样,它也不会像您想象的那样工作,因为当有人注销时,他们正在运行一个新的、非交互式的会话,它无论如何都无法访问ssh- hg push
此外,当我使用ssh -Tv hg@bitbucket.org测试它时,它会提示我输入密码。
像这样测试它是无效的。这就是说“我想用用户名hg登录bitbucket的交互会话”,但这不是他们授权你做的事情。如果您向他们发送您的公钥,他们只允许您在执行hg非交互式命令时以hg用户身份登录。
此外,当我使用ssh -Tv hg@bitbucket.org测试它时,它会提示我输入密码。
不,公钥应该是公开的--例如,您可以在github上列出任何人的公钥。公钥只是说“任何拥有与此匹配的私钥的人都有权……”,所以任何想要你的私钥的站点都是骗子,但是任何想要你的公钥的站点只是给你提供了一种比密码更好的使用方式。
关于钩子,您可能会遗漏一件事,那就是钩子是以“谁”身份运行的。当人们通过ssh推送到你的“集中式”存储库时,钩子是以他们的unix用户的身份运行的,如果他们是通过http推送的,那么钩子是作为web服务器的用户运行的。
如果你有:
那么你想要做的事情就会奏效。
https://stackoverflow.com/questions/20691200
复制相似问题