簡體   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