我必须编写一个自动从mercurial repo中提取的脚本。无论如何我可以执行hg pull -u
,包括在同一命令中传递请求的用户名和密码?我知道有一个交互式方法是默认行为,我不想在hgrc或其他地方保存用户名和密码,因为它将由多个用户使用,所以有没有办法通过用户名和密码传递命令行?
我尝试在PHP中使用proc_open
,但这并不像回应STDIN那样有效。
答案 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
和类似的方式查看密码。你应该做的是:
与您从hg
返回的管道上的proc_open
进行通信。您需要仔细解析Mercurial的输出并在stdin上输入用户名和密码。将Mercurial运行为:
hg --config ui.interactive=yes
确保它会与你交谈 - 否则我担心它会检测到没有TTY并且根本不会提示你。
使用[auth]
section编写临时配置文件。它看起来像这样:
[auth]
x.prefix = output of "hg paths default"
x.username = USERNAME
x.password = PASSWORD
(x
并不重要,它可以是任何东西。)
确保该文件只能由您运行脚本的用户读取。然后将HGRCPATH
环境变量设置为指向该文件并执行Mercurial。完成后删除文件!
libhg PHP library有command 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
我个人从未这样做过,但希望这会有所帮助。