我有一个文件secret.yml
,其中包含一些应保密的变量:
token: SUPER-SECRET-TOKEN
another_secret_variable: abcdef
我怎么能这样做,当我推它时,模板被推,而不是:
token: #INSERT YOUR TOKEN HERE
another_secret_variable: #INSERT YOUR SECRET VARIABLE HERE
答案 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