2012-03-04 55 views
18

當您將代碼保存在公共git倉庫中時,如何處理敏感數據(如祕密API密鑰,哈希鹽)?如何處理公共git倉庫中的敏感數據?

顯然,將敏感數據保存在代碼中會影響它。

另一種解決方案是不對代碼中的祕密信息進行硬編碼,但將其存儲在獨立文件中並對文件進行gitignore。這有一個缺點,那就是當有人第一次提取你的代碼時,祕密信息將會丟失,並且不會用完。這可以通過在代碼中寫入「如果缺少初始化」例程來解釋,但是然後你讓git系統滑入你的代碼中,這不是一件好事。

另一種解決方案是製作一個「默認」祕密信息文件,在項目開始時提交它,然後使用您自己的信息而不提交它。但是這可能會讓git抱怨說,當你拉動的時候你有一些沒有提交的變化。

那麼處理這個問題的常用方法是什麼?

+0

可能重複的[Git:忽略公共存儲庫的文件,但不是私人](http://stackoverflow.com/questions/8721984/git-ignore-files-for-public-repository-but-not-for-私人) – CharlesB 2012-03-07 16:10:45

回答

2

最好的解決方案是私人的git submodule和一個公共的git倉庫。

有關更多信息,請參閱this quesiton;一個很好的報價給你:

當你排除或忽略你只是讓文件被添加到您的存儲庫。這些「敏感文件」文件都不在存儲庫中,就在您的工作目錄中。

0

「默認」祕密信息文件是一個好主意,但是,即使忽略該文件,也無法避免git警告。從github help page

git會不會忽略前規則是 添加到該文件忽視它一個已經被跟蹤的文件。在這種情況下,文件必須是 未跟蹤,通常git rm --cached filename

因此,增加一個「虛擬」或「默認」文件,然後忽略它不會阻止警告。雖然這種方法可行,但這樣做會很不方便,因爲您總是必須手動從每次提交中排除敏感文件。

解鎖該文件將其從github中刪除,這首先破壞了文件的目的。

也許子模塊的建議將起作用。

+0

'git update-index --assume-unchanged '可以用來忽略被跟蹤文件中的未提交更改。 – Andrew 2014-08-24 00:11:41

3

可以說,你不應該將這些屬性硬編碼到源代碼中,因爲管理員會希望在給定系統上更改它們。如果這些屬性位於屬性文件中(例如在您的主目錄中),則問題已解決。

對於可能遇到麻煩的用戶,您可以檢入可以複製到其主文件夾並進行修改的默認文件。如果錯誤消息和自述文件清除了這個特定文件的缺失,這個設置將很好地工作。

9

嘗試使用.gitattributes的路徑與配置的加密/解密過濾器:

*secure.yml filter=crypt 

而在git的/ config中添加配置的地穴過濾:

[filter "crypt"] 
    clean = openssl enc ... 
    smudge = openssl enc -d ... 
    required 
0

如果有人需要爲他們Android項目,我找到最簡單的方法:

第1步: 創建:res/values/secrets.xml與:

<!-- Inside of `res/values/secrets.xml` --> 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="parse_application_id">xxxxxx</string> 
    <string name="parse_client_secret">yyyyyy</string> 
    <string name="google_maps_api_key">zzzzzz</string> 
</resources> 

步驟2:在代碼或XML文件

getString(R.string.parse_application_id), 
getString(R.string.parse_client_secret) 

<meta-data 
    android:name="com.google.android.maps.v2.API_KEY" 
    android:value="@string/google_maps_api_key"/> 

步驟3使用它:添加此行進的.gitignore文件

**/*/res/values/secrets.xml 

這裏是完整的article