Mercurial(HG)拉参数:用户名和密码

Sta*_*wed 18 php mercurial

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

Dre*_*mer 24

我找到了两个解决方案

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


Mar*_*ler 5

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

  1. hg您返回的管道进行通信proc_open。您需要仔细解析Mercurial的输出,并在stdin上输入用户名和密码。以以下方式运行Mercurial:

    hg --config ui.interactive=yes
    
    Run Code Online (Sandbox Code Playgroud)

    以确保它会与您对话-否则,它会检测到没有TTY,并且根本不会提示您。

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

    [auth]
    x.prefix = output of "hg paths default"
    x.username = USERNAME
    x.password = PASSWORD
    
    Run Code Online (Sandbox Code Playgroud)

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

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


Vic*_*out 5

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

[auth]
x.prefix = *
x.username = USERNAME
x.password = PASSWORD
Run Code Online (Sandbox Code Playgroud)

使其适用于所有存储库.此外,如果你把它放在"〜/ .hgrc"并给予600的许可,你就不必做HGRCPATH技巧了.把它留在那里吧.