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

时间:2012-08-29 19:20:08

标签: php mercurial

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

5 个答案:

答案 0 :(得分:21)

我找到了两个解决方案:

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

  

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

2。使用 - 作为前缀(来自Victor的答案)提供--config凭证:

  

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

答案 1 :(得分:5)

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

  1. 与您从hg返回的管道上的proc_open进行通信。您需要仔细解析Mercurial的输出并在stdin上输入用户名和密码。将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。完成后删除文件!

  3. libhg PHP librarycommand server,但我在该库中没有看到有关拉或克隆的用户名或密码的信息。该库正在进行中,但是当它更成熟时,我建议使用它。但是现在上述方法可以帮助你。

答案 2 :(得分:5)

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

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

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

答案 3 :(得分: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

答案 4 :(得分:-1)

您可以使用--config开关执行此操作:

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

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