2012-08-29 34 views
11

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

+0

为什么不使用SSH密钥? –

回答

15

我发现了两个解决方案:

1。明确提供的网址,其中包括完整的凭据:

hg pull -u https://user:[email protected]/path

2.提供--config凭证,使用*作为前缀(从维克多的答案):

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

+1

不错,这两个工作:) – radtek

-1

您可能能够使用--config开关是这样做的:

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

我个人从来没有这样做,但希望这有助于。

+4

没有不工作,忽略无效的[认证]键'用户名' 忽略无效[认证]键'密码' – radtek

4

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

  1. 沟通与hg你得到proc_open回水管。您需要仔细分析Mercurial的输出,并在stdin上提供用户名和密码。运行水银为:

    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。完成后删除文件!

没有为command server一个libhg PHP library,但我没有看到有关用户名或密码在该库拉或克隆任何东西。图书馆工作正在进行中,但是当它更成熟时,我建议使用它。但现在上述方法应该可以帮助你。

5

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

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

使它适用于所有的存储库。另外,如果你把它放在“〜/ .hgrc”中,并给出600的权限,你就不必执行HGRCPATH技巧。只要把它留在那里。

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