繁体   English   中英

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

[英]Mercurial (HG) pull parameters: username and password

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

我找到了两个解决方案

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和类似的东西看到它。 你应该做的是:

  1. 在从proc_open返回的管道上与hg通信。 您需要仔细解析Mercurial的输出并在stdin上输入用户名和密码。 将Mercurial运行为:

     hg --config ui.interactive=yes 

    确保它会与你交谈 - 否则我担心它会检测到没有TTY并且根本不会提示你。

  2. 使用[auth]部分编写临时配置文件。 它看起来像这样:

     [auth] x.prefix = output of "hg paths default" x.username = USERNAME x.password = PASSWORD 

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

有一个libhg PHP库用于命令服务器 ,但我没有看到任何关于该库中的pull或clone的用户名或密码。 该库正在进行中,但是当它更成熟时,我建议使用它。 但是现在上述方法应该可以帮助你。

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

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

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

这工作:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM