运行“git commit”时清除敏感信息

时间:2014-11-21 18:33:17

标签: git version-control

我正在处理包含大量敏感信息(例如密码)的文件。

我正在使用版本控制,并且每次提交并推送此文件时都会发现删除这些密码很麻烦。

当我运行" git commit"?

时,有什么方法可以在某个地方写一个脚本来清除所有这些敏感信息

换句话说,如果我的文件是这样的:

var password = "test123"

当我提交时,我希望我的文件看起来像这样:

var password = ""

1 个答案:

答案 0 :(得分:2)

标准(以及正确的,真正的)建议是将这些密码保存在其他地方,例如,从不同的,不受版本控制的文件(~/.netrc等)中读取它们。

也就是说,您可以使用预提交挂钩来检查索引 1 中的密码并中止提交(如果存在)(这也是标准建议:不要修改pre中的内容-commit hooks,告诉用户有些东西不对,并停止)。或者,你甚至可以让预提交钩子调整索引,以便密码不存在。

请注意,用户可以绕过预提交挂钩,因此无论您如何设置(作为验证程序或作为修饰符),这都不是万无一失的。


1 请记住,新提交将来自索引的内容,而不是工作目录的内容。例如:

$ echo this is what will be committed > foo.txt
$ git add foo.txt                 # put current foo.txt into the index
$ echo the current contents are completely different > foo.txt
$ git commit -m 'demonstrate index vs work dir'

这次创建的提交中foo.txt的版本读取“这是将要提交的内容”,即使“当前内容完全不同”也是foo.txt中的内容,如果你看一下现在。要查看索引中的实际内容,请使用,例如:

$ git cat-file -p :0:foo.txt

请参阅gitrevisions了解:0:foo.txt的含义。