2016-03-27 89 views
0

我在Python中編寫了一個Git接口,它允許我將事情提交到我的GitHub和Bitbucket回購站。在我的本地存儲庫的配置文件中,我將遠程URL更改爲用Regex去掉URL的某些部分

https://(Username):(Password)@bitbucket.org/... 

這樣我就不必一直輸入密碼了。這工作得很好,但不幸的是,當我推到回購,Git的形式

To https://(Username):(Password)@bitbucket.org/...../repo.git 
    3f6ac75..16c47c9 master -> master 

,每個人都尋找我的屏幕可以查看我的密碼在控制檯上輸出一條消息。我現在想替換使用正則表達式星號密碼,讓我得到:

To https://(Username):*****@bitbucket.org/...../repo.git 
    3f6ac75..16c47c9 master -> master 

我已經與re.sub(r'//.*:.*@.*\..*/', '//(URL hidden)', msg)嘗試過,但,這是醜陋的。我如何使用正則表達式替換帶星號的密碼?

+0

爲什麼不使用提供的API爲此生成適當的訪問令牌? – idjaw

+0

事實上,我可以將證書存儲在全局git配置文件中,但我不喜歡這樣做,因爲我有幾個不同的帳戶,並且在使用全局配置時有時會遇到麻煩。我不完全明白你提供的API的含義? –

+1

你實際上是在使用位桶[API](https://confluence.atlassian.com/bitbucket/use-the-bitbucket-cloud-rest-apis-222724129.html)和GitHub [API](https:// developer.github.com/v3/)?另外還有已經編寫的Python模塊可以與GitHub進行通信。閱讀這些內容,您可以看到如何生成適當的訪問密鑰來使用API​​,而不是直接使用這些憑據。 – idjaw

回答

0
https:\/\/[^:]*:([^@]*)@.*?$ 

請看看在DEMO

+0

嗯,'print(re.sub(r'https:\/\/[^:] *:([^ @] *)@。*?$','abc',「https:// ):(密碼)@ bitbucket.org /...../ repo.git「))'只是給我」要abc「而不是」要https:// .......「。難道我做錯了什麼? –

+0

這應該給你的密碼,你可以用'*****'替換它 –

0

你可以試試下面的正則表達式:

import re 

url = u"https://(Username):(Password)@bitbucket.org/...../repo.git" 

pattern = re.compile(ur'(http.*:)\(.*?\)(\S*)', re.MULTILINE) 
result = re.sub(pattern, "\\1********\\2", url) 

它會變成

https://(Username):(Password)@bitbucket.org/...../repo.git 

https://(Username):********@bitbucket.org/...../repo.git 

查看演示at regex101

0

最後一個答案給了我一個正確的想法。我現在使用下面的Python代碼工作得很好,可靠:

PASS_REGEX = r"(\b(?:[a-z]{,5})://.*:)(.*)(@[^ \b]+)" 
PASS_REPLACEMENT = r"\1----------\3" 
ret = re.sub(PASS_REGEX, PASS_REPLACEMENT, ret, flags=re.MULTILINE) 

簡短說明:啓動一個字邊界上(例如線或空間等的開始),然後最多5個字符跟隨(GIT,HTTP ,https),然後冒號和兩個斜槓,一些任意的字符串,並再次冒號。這是第一組。然後,接下來是一個任意的字符串(這是組2),後面跟着一個@和一些非空格字符,後面跟着一個字邊界(這是組3)。然後將此模式替換爲組1的內容,接着是----------,隨後是組3的內容。可以很好地工作並修復所發生的任何URL。

信息我需要的是:我爲Sublime Text編寫了一個Git插件。我通常會在.git/config文件中保存資源庫的用戶名和密碼,因爲我有不同的帳戶,當我使用 git config --global時可能會導致問題。問題是,當我推入回購協議時(無論是從Sublime還是直接從終端完成),密碼都由git顯示(「推送至https://...username:[email protected] ....」),並且任何正在屏幕上查看的人都可以看見。