[英]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
和類似的東西看到它。 你應該做的是:
在從proc_open
返回的管道上與hg
通信。 您需要仔細解析Mercurial的輸出並在stdin上輸入用戶名和密碼。 將Mercurial運行為:
hg --config ui.interactive=yes
確保它會與你交談 - 否則我擔心它會檢測到沒有TTY並且根本不會提示你。
使用[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.