20

我必须编写一个脚本来自动从一个 mercurial repo 中提取。无论如何我可以执行一个hg pull -u包括在同一命令中传递请求的用户名和密码的操作吗?我知道有一个交互方法是默认行为,我不想将用户名和密码保存在 hgrc 或其他地方,因为它将被多个用户使用,所以有没有办法通过传递用户名和密码命令行?我尝试proc_open在 PHP 中使用,但效果不如标准输入。

4

5 回答 5

26

我找到了两个解决方案:

1. 明确提供 URL,包括完整凭据:

hg pull -u https://user:pass@host/path

2. 使用 --config 提供凭据,使用 * 作为前缀(来自 Victor 的回答):

hg pull -u --config auth.x.prefix=* --config auth.x.username=user --config auth.x.password=pass

于 2014-03-02T10:22:11.057 回答
6

解决方案 2 特定于存储库。做

[auth]
x.prefix = *
x.username = USERNAME
x.password = PASSWORD

使其适用于所有存储库。此外,如果你把它放在“~/.hgrc”中并给予 600 的权限,你就不必使用 HGRCPATH 技巧。把它留在那里。

于 2013-02-05T19:46:34.697 回答
5

在命令行上传递密码是不安全的,因为其他用户可以看到它使用ps和类似的。你应该做的是:

  1. hg与您返回的管道进行通信proc_open。您需要仔细解析 Mercurial 的输出,并将用户名和密码输入标准输入。将 Mercurial 运行为:

    hg --config ui.interactive=yes
    

    确保它会和你说话——否则我担心它会检测到没有 TTY 并且根本不会提示你。

  2. 编写一个带有[auth]section的临时配置文件。它看起来像这样:

    [auth]
    x.prefix = output of "hg paths default"
    x.username = USERNAME
    x.password = PASSWORD
    

    x不重要,它可以是任何东西。)确保文件只能由您运行脚本的用户读取。然后设置HGRCPATH环境变量指向该文件并执行 Mercurial。完成后删除文件!

命令服务器有一个libhg PHP 库,但我在该库中看不到任何有关拉取或克隆的用户名或密码的信息。该库正在进行中,但当它更成熟时,我建议使用它。但是目前,上述方法应该可以帮助您。

于 2012-08-29T21:47:20.347 回答
2

那行得通:

hg --config auth.rc.prefix=http://host/ --config auth.rc.username=user --config auth.rc.password=password pull -u http://host/full/path/to/repo
于 2013-02-14T14:39:30.417 回答
-1

您也许可以--config像这样使用开关来执行此操作:

hg --config auth.username=USERNAME --config auth.password=PASSWORD pull -u

我个人从未这样做过,但希望这会有所帮助。

于 2012-08-29T19:35:32.390 回答