2012-03-04 113 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