我必须编写一个脚本,自动从一个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
在命令行上传递密码是不安全的,因为其他用户可以使用ps
和类似的方式查看密码。您应该做的是:
与hg
您返回的管道进行通信proc_open
。您需要仔细解析Mercurial的输出,并在stdin上输入用户名和密码。以以下方式运行Mercurial:
hg --config ui.interactive=yes
Run Code Online (Sandbox Code Playgroud)
以确保它会与您对话-否则,它会检测到没有TTY,并且根本不会提示您。
用[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库的命令服务器,但我没有看到有关用户名或密码在该库拉或克隆任何东西。该库正在开发中,但是当它更成熟时,我建议使用它。但是目前,以上方法应该可以帮助您。
解决方案2特定于存储库.做
[auth]
x.prefix = *
x.username = USERNAME
x.password = PASSWORD
Run Code Online (Sandbox Code Playgroud)
使其适用于所有存储库.此外,如果你把它放在"〜/ .hgrc"并给予600的许可,你就不必做HGRCPATH技巧了.把它留在那里吧.