2011-11-29 60 views
11

問題保護git倉庫祕密的最佳做法是什麼?

考慮將此文件樹作爲我的開發存儲庫。

 
- foo/ 
    - .git/ 
    - [...] 
    - bar/ 
    - backupclient.py 
    - supersecretstoragecredentials.ini 

進行開發,supersecretstoragecredentials.ini需要用有效的憑證填寫 - 而我還是要保持一個乾淨的版本,它在資源庫中,以便其他用戶可以方便地設置他們的憑據。

可能的解決方案

  1. .gitignoresupersecretstoragecredentials.ini並創建一個supersecretstoragecredentials.ini-example
    1. 指示用戶supersecretstoragecredentials.ini-example複製到supersecretstoragecredentials.ini
  2. backup.py中添加一個覆蓋配置文件的位置,該位置被git忽略,例如,supersecretstoragecredentials_local.ini

作爲kan指出,這兩種解決方案類似,但不完全一樣,工作流明智的。

有沒有其他的選擇? git是否具備某種功能來幫助解決此類問題?

+2

+1對於選項1 – Thilo

回答

11

檢查supersecretstoragecredentials。ini文件和一些佔位符值,然後

git update-index --assume-unchanged supersecretstoragecredentials.ini 

Git將不會跟蹤此文件的未來更改。

可以使用

git update-index --no-assume-unchanged supersecretstoragecredentials.ini 
+1

這個解決方案的唯一問題是,另一個用戶的'git pull'會產生合併衝突。不過,只要您的消費者羣體有限,它就是一個很好的解決方案。 – joar

+0

@jwandborg好的注意點!只提出這個解決方案,因爲這個文件是用來存儲本地證書的。 – dexter

5

您在選項1中描述的內容基本上覆蓋smudge步驟的內容filter driver

filter driver

你必須在 「How to work on a drop-in library?」 問題提出了兩個選項。

塗抹腳本就會把你supersecretstoragecredentials.ini-example(版本),將其複製爲supersecretstoragecredentials.ini版本,由混帳忽略),並從其他來源填補其值。

但除了技術方面你將如何實施你的政策,主要措施是確保你的祕密價值不存儲在Git倉庫中,而是來自另一個參考。

3

我使用你的解決方案(你的兩個解決方案是相同的,只有文件名不同)。你有任何問題嗎?你會期望什麼樣的功能?

此外,還有一個更有趣的解決方案

git update-index --assume-unchanged supersecretstoragecredentials.ini 

希望這是你想要的。然而,如果上游文件改變了文件,並且你正在提交更改(不完全確定它是好還是不好),它會失敗。

1

以我的經驗,嘗試過在你的問題中列出的所有選項後,在到目前爲止的答案復位此,您的#2選項已被證明最簡單和乾淨。它可靠地解決了問題,用最少的魔力,並且最容易理解。這是最好的方式無聊。

+0

而且,在http://stackoverflow.com/a/8309450/202522中提到的解決方案是最簡單和最好的選擇IMO。 – joar

+0

不,你需要'_local.ini'文件的普通'.gitingore'。 –

0

我正在嘗試的東西是git-secrets。

https://github.com/awslabs/git-secrets

它掛接到git的提交過程和檢查模式,看起來像不應該在被檢查的憑據。

你必須確保它被安裝在每個開發者的系統和配置每個git倉庫。如果將檢查集成到構建過程中,這可以很容易地實現。

相關問題