277

我在个人项目中使用了 Mercurial,每次我想将某些内容推送到服务器时,我都会输入我的用户名和密码。

我尝试将以下内容添加到.hgrc我的主目录中的文件中,但它似乎被完全忽略了。

[ui]
username = MY_USER_NAME
password = MY_PASSWORD

如何以正确的方式做到这一点?

4

8 回答 8

336

您可以在.hgrcorMercurial.ini文件中创建一个 auth 部分,如下所示:

[auth]
bb.prefix = https://bitbucket.org/repo/path
bb.username = foo
bb.password = foo_passwd

'bb' 部分是一个任意标识符,用于匹配前缀与用户名和密码 - 方便管理不同站点的不同用户名/密码组合(前缀)

您也可以只指定用户名,然后在推送时只需输入密码。

我还建议看看keyring extension。因为它将密码存储在系统的密钥环而不是纯文本文件中,所以更加安全。它在 Windows 上与 TortoiseHg 捆绑在一起,目前正在讨论将其作为捆绑扩展在所有平台上分发。

于 2010-04-07T00:12:25.373 回答
170

有三种方法可以做到这一点:使用 .hgrc 文件、使用 ssh 或使用密钥环扩展名


1. 不安全的方式 - 更新你的 ~/.hgrc 文件

适合我的格式(在我的 ~/.hgrc 文件中)是这样的

[ui]
username=Chris McCauley <chris.mccauley@mydomain.com>

[auth]
repo.prefix = https://server/repo_path
repo.username = username
repo.password = password


您可以通过添加更多前缀、用户名、密码的三元组来配置任意数量的存储库,方法是在前面添加一个唯一标签。

这仅在 Mercurial 1.3 中有效,显然您的用户名和密码是纯文本 - 不好。


2. 安全方式 - 使用 SSH 避免使用密码

Mercurial 完全支持 SSH,因此我们可以利用 SSH 无需密码即可登录服务器的能力- 您只需进行一次配置即可提供自行生成的证书。这是迄今为止做你想做的最安全的方法。


您可以在此处找到有关配置无密码登录的更多信息


3.密钥环扩展

如果您想要一个安全的选项,但不熟悉 SSH,为什么不试试这个呢?

从文档...

扩展在第一次向/从给定的远程存储库中拉/推时提示输入 HTTP 密码(就像默认情况下所做的那样),但将密码(由用户名和远程存储库 url 的组合键入)保存在密码数据库中。在下一次运行时,它会检查 .hg/hgrc 中的用户名,然后在密码数据库中检查合适的密码,如果找到则使用这些凭据。

这里有更详细的信息

于 2010-04-06T11:31:14.587 回答
65

没有人提到密钥环扩展。它将用户名和密码保存到系统密钥环中,这比将密码存储在如上所述的静态文件中要安全得多。执行以下步骤,您应该一切顺利。我在 Ubuntu 上启动并运行了大约 2 分钟。

>> 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 = 

https://www.mercurial-scm.org/wiki/KeyringExtension

于 2011-01-11T01:03:45.173 回答
30

一个简单的技巧是将用户名和密码添加到项目.hg/hgrc文件中的推送 url:

[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/

于 2010-04-06T11:39:27.283 回答
23

上面没有人向新手用户解释/澄清了条款。他们对条款感到困惑

.hg/hgrc -- 此文件用于存储库,位于本地/工作区位置/实际存储库的 .hg 文件夹中。

~/.hgrc -- 这个文件与下面的不同。该文件位于 ~ 或主目录。

myremote.xxxx=...... bb.xxxx=......

这是 [auth] 部分/指令下的行之一,同时使用 mercurial 密钥环扩展。确保您放在那里的服务器名称与您在执行“hg clone”时使用的名称匹配,否则密钥环会说,找不到用户。下面一行中的 bb 或 myremote 是您在执行“hg clone http://.../../repo1 bb 或 myremote”时必须提供的“别名”,否则,它将不起作用,或者您必须确保您的本地存储库的 .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 回购链接时的服务器名称。它可以是 IP、服务器名或服务器的 FQDN

于 2013-01-11T02:24:23.090 回答
4

使用 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 =
于 2012-09-21T09:38:41.827 回答
2

如果您使用的是 TortoiseHg,则必须执行所附屏幕截图中显示的这三个步骤,这将为您正在使用的特定存储库添加您的凭据。

在此处输入图像描述

要添加全局设置,您可以访问文件C:\users\user.name\mercurial.ini并添加部分

[auth]
bb.prefix=https://bitbucket.org/zambezia/packagemanager
bb.username = $username
bb.password = $password

希望这可以帮助。

于 2017-07-19T06:50:05.677 回答
0

虽然它可能适用于您的情况,也可能不起作用,但我发现使用 Putty 的 Pageant 生成公钥/私钥很有用。

如果您还使用 bitbucket (.org),它应该使您能够为您的用户帐户提供公钥,然后访问存储库的命令将自动得到保护。

如果重新启动后 Pageant 没有为您启动,您可以将 Pageant 的快捷方式添加到您的 Windows“开始菜单”,并且该快捷方式可能需要使用您的私有 (.ppk) 文件的位置填充“属性” .

有了这个,Mercurial 和您的本地存储库将需要设置为使用 SSH 格式推送/拉取。

以下是Atlassian网站上适用于 Windows 或 Mac/Linux的一些详细说明。

你不必相信我的话,毫无疑问还有其他方法可以做到这一点。也许这里描述的这些步骤更适合您:

  1. 从开始 -> PuTTY-> PuttyGen 启动 PuttyGen
  2. 生成新密钥并将其另存为 .ppk 文件,无需密码
  3. 使用 Putty 登录您要连接的服务器
  4. 将来自 PuttyGen 的公钥文本附加到 ~/.ssh/authorized_keys 的文本中
  5. 从 Start -> Putty to Start -> Startup 创建 .ppk 文件的快捷方式
  6. 从“启动”菜单中选择 .ppk 快捷方式(这将在每次启动时自动发生)
  7. 看到系统托盘中的选美图标了吗?右键单击它并选择“新会话”</li>
  8. 在“主机名”字段中输入用户名@主机名
  9. 您现在将自动登录。
于 2016-08-24T11:52:39.090 回答