我在个人项目中使用了Mercurial,每次我想将某些内容推送到服务器时,我一直在输入用户名和密码。
我尝试将以下内容添加到主目录中的.hgrc
文件中,但似乎完全被忽略了。
[ui]
username = MY_USER_NAME
password = MY_PASSWORD
如何以正确的方式做到这一点?
答案 0 :(得分:322)
您可以在.hgrc
或Mercurial.ini
文件中创建一个身份验证部分,如下所示:
[auth]
bb.prefix = https://bitbucket.org/repo/path
bb.username = foo
bb.password = foo_passwd
'bb'部分是一个任意标识符,用于将前缀与用户名和密码匹配 - 方便用于管理不同站点(前缀)的不同用户名/密码组合
您也可以只指定用户名,然后只需在推送时输入密码即可。
有关详细信息,请参阅:http://hgtip.com/tips/advanced/2009-10-01-configuring-user-auth-https/
我还建议您查看keyring extension。因为它将密码存储在系统的密钥环而不是纯文本文件中,所以它更安全。它与Windows上的TortoiseHg捆绑在一起,目前正在讨论如何在所有平台上将其作为捆绑扩展分发。
答案 1 :(得分:167)
适合我的格式(在我的〜/ .hgrc文件中)是这个
[ui]
username=Chris McCauley <chris.mccauley@mydomain.com>
[auth]
repo.prefix = https://server/repo_path
repo.username = username
repo.password = password
您可以通过添加唯一标记添加更多前缀,用户名和密码三元组来配置任意数量的repos。
这仅适用于Mercurial 1.3,显然您的用户名和密码是纯文本 - 不好。
Mercurial完全支持SSH,因此我们可以利用SSH无需密码登录服务器的能力 - 您可以进行一次性配置以提供自行生成的证书。这是迄今为止最安全的做法。
您可以找到有关配置passwordless login here
如果您想要一个安全的选项,但不熟悉SSH,为什么不尝试这个呢?
来自文档...
第一次拉/推时,扩展名会提示输入HTTP密码 来自/来自给定的远程存储库(就像它默认完成),但是 保存密码(由用户名和远程组合键入 存储库url)在密码数据库中。在下一次运行中它会检查 对于.hg / hgrc中的用户名,然后输入合适的密码 密码数据库,如果找到则使用这些凭证。
有更详细的信息here
答案 2 :(得分:64)
没有人提到密钥环扩展。它会将用户名和密码保存到系统密钥环中,这比将密码存储在静态文件中要安全得多,如上所述。执行以下步骤,您应该很高兴。我在大约2分钟内完成了Ubuntu的运行。
>> sudo apt-get install python-pip
>> sudo pip install keyring
>> sudo pip install mercurial_keyring
**Edit your .hgrc file to include the extension**
[extensions]
mercurial_keyring =
答案 3 :(得分:30)
一个简单的黑客就是在项目的.hg/hgrc
文件中为推送网址添加用户名和密码:
[paths]
default = http://username:password@mydomain.com/myproject
(请注意,这样以纯文本形式存储密码)
如果您正在处理同一域下的多个项目,则可能需要在~/.hgrc
文件中添加重写规则,以避免对所有项目重复此操作:
[rewrite]
http.//mydomain.com = http://username:password@mydomain.com
同样,由于密码以纯文本格式存储,我通常只存储我的用户名。
如果你在Gnome下工作,我会解释如何在这里集成Mercurial和Gnome Keyring:
http://aloiroberto.wordpress.com/2009/09/16/mercurial-gnome-keyring-integration/
答案 4 :(得分:23)
NOBODY上面向新手用户解释/澄清了条款。他们对术语
感到困惑.hg / hgrc - 此文件用于存储库,位于本地/工作空间位置/实际存储库的.hg文件夹中。
〜/ .hgrc - 此文件与下面的文件不同。该文件位于〜或主目录。
myremote.xxxx = ..... bb.xxxx = ......
这是[auth] section / directive下的一行,同时使用mercurial keyring扩展名。确保你放在那里的服务器名称,与你在做“hg clone”时使用的服务器名称匹配,否则密钥环会说,用户找不到。在下面的行中的bb或myremote是你在做“hg clone http:/.../../ repo1 bb或myremote”时必须给出的“别名”,否则它不会工作或你必须确保你的本地repository的.hg / hgrc文件包含相同的别名,即(你在做hg clone时作为最后一个参数给出了什么)。
PS以下链接以获取详细信息,对不起快速书面语法。
例如:如果位于〜/ .hgrc(Linux / Unix中的用户主目录)或Windows用户主目录中的mercurial.ini,则包含以下行,如果你这样做
`"hg clone http://.../.../reponame myremote"`
,然后每个http repo链接不会多次提示您输入用户凭据。在[extensions]下的〜/ .hgrc中,有一行“mercurial_keyring =”或“hgext.mercurial_keyring = /path/to/your/mercurial_keyring.py”..其中一行应该在那里。
[auth]
myremote.schemes = http https
myremote.prefix = thsusncdnvm99/hg
myremote.username = c123456
我正在尝试找出如何设置PREFIX属性,以便用户可以在没有用户名/密码提示的情况下克隆或执行任何Hg操作,而不必担心他在http://..../中提到的内容。 ..使用Hg repo链接时的servername。它可以是IP,服务器名称或服务器的FQDN
答案 5 :(得分:3)
使用MacPorts在Mac OSX上安装mercurial_keyring:
sudo port install py-keyring
sudo port install py-mercurial_keyring
将以下内容添加到〜/ .hgrc:
# Add your username if you haven't already done so.
[ui]
username = email@address.com
[extensions]
mercurial_keyring =
答案 6 :(得分:2)
如果您使用的是TortoiseHg,则必须执行附加屏幕截图中显示的这三个步骤,这将为您正在使用的特定存储库添加凭据。
要添加全局设置,您可以访问文件 C:\ users \ user.name \ mercurial.ini 并添加
部分[auth]
bb.prefix=https://bitbucket.org/zambezia/packagemanager
bb.username = $username
bb.password = $password
希望这有帮助。
答案 7 :(得分:0)
虽然它可能适用于您的情况,但我发现使用Putty的Pageant生成公钥/私钥很有用。
如果您还使用bitbucket(.org),它应该能够为您的用户帐户提供公钥,然后将自动保护到存储库的命令。
如果重新启动时,Pageant没有为您启动,则可以向Windows“开始菜单”添加Pageant的快捷方式,并且快捷方式可能需要填充私有位置的“属性”(。 ppk)文件。
有了这个,Mercurial和你的本地存储库将需要设置为使用SSH格式推/拉。
以下是Atlassian针对Windows或Mac / Linux的网站的详细说明。
你不必接受我的话,毫无疑问是其他方法。也许这些步骤described here更适合您:
- 从开始启动PuttyGen - &gt; PuTTY-&GT;的puttygen
- 生成新密钥并将其另存为没有密码的.ppk文件
- 使用Putty登录要连接的服务器
- 将PuttyGen中的公钥文本附加到〜/ .ssh / authorized_keys
的文本中- 从“开始”创建.ppk文件的快捷方式 - &gt;腻子开始 - &gt;启动
- 从“启动”菜单中选择.ppk快捷方式(这将在每次启动时自动发生)
- 查看系统托盘中的Pageant图标?右键单击它并选择“新会话”
- 在“主机名”字段
中输入username @ hostname- 您现在将自动登录。
醇>
答案 8 :(得分:0)
使用密匙环扩展名。将下面的条目添加到mercurial.ini文件。
[扩展名] mercurial_keyring =