保持git secret配置文件不被推送

时间:2018-02-22 20:13:28

标签: git github

我有一个文件secret.yml,其中包含一些应保密的变量:

token: SUPER-SECRET-TOKEN
another_secret_variable: abcdef

我怎么能这样做,当我推它时,模板被推,而不是:

token: #INSERT YOUR TOKEN HERE
another_secret_variable: #INSERT YOUR SECRET VARIABLE HERE

3 个答案:

答案 0 :(得分:1)

我认为没有办法做到这一点。如果您希望将文件推送到远程存储库,则必须通过git跟踪它,如果git正在跟踪它,它将保存您对其所做的任何更改。

您可以手动将其从每次提交中删除(或手动暂存除此之外的每个文件),但这将是一个真正的痛苦。

做你想要做的事情的最好方法可能是有一个名为secret.yml.template的第二个文件,或者你将拥有模板的文件,然后在自述文件中(或者你指示的任何地方)用户将其令牌添加到secret.yml) instruct them to change the name of the file to secret.yml`。

然后你只需将secret.yml添加到.gitignore,一切都应该是好的。

答案 1 :(得分:1)

以下是可能的解决方案。我并不是说它很棒(参见CAVEATS),但它有效,我很高兴看到更值得的东西。

你可以使用git client-side hook。

创建一个名为secret-template.yml的文件,并确保它是gitignored

echo secret-template.yml >> .gitignore

使用此内容在{projectRoot}/.git/hooks/pre-commit中创建文件

if [[ ! -f secret.yml ]] || [[ ! -f secret-template.yml ]]; then
    echo commit canceled. You should have both secret.yml and secret-template.yml in order to commit
    exit 1  
fi
mv secret.yml tmp_secret
cp secret-template.yml secret.yml
git add secret.yml

使用此内容在{projectRoot}/.git/hooks/post-commit中创建文件

mv tmp_secret secret.yml

在您的终端中输入

chmod +x .git/hooks/pre-commit
chmod +x .git/hooks/post-commit

你应该好好去

说明:

预提交将在您提交之前每次运行,确保您提交模板而不是secret.yml,因此即使您执行了git add secret.yml,它也会覆盖添加模板。如果这些文件中的任何一个不存在,则整个提交都会被取消,并且会收到一条简短的消息,说明您无法提交的原因

post-commit确保在你的提交开始之前保留你的文件(他们每次都会一个接一个地运行,所以这不是你需要担心的事情)

chmod +x使这些文件可执行(这是git hooks的要求)

注意事项: 你的git将永久显示你在git status上有一个修改过的文件,它是secret.yml文件。如果你有一个终端提示,不断地显示一些git信息(如分支,状态,......),就像我一样

,这可能会特别烦人

答案 2 :(得分:0)

创建一个名为template的其他文件是一个不错的解决方案,如果你想在存储库中跟踪原始文件,你可以加密该文件以使shure没有人可以读取它。保留模板未加密!!!

//使用git和.yml文件的解决方案 https://github.com/crohr/ebarnouflant/issues/3