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

“运行时清除敏感信息”;git commit";,git,version-control,Git,Version Control,我正在处理一个包含大量敏感信息(例如密码)的文件 我正在使用版本控制,发现每次提交和推送此文件时都要删除这些密码是一件很麻烦的事情 当我运行“git commit”时,有没有办法在某个地方编写一个脚本来清除所有这些敏感信息 换句话说,如果我的文件如下所示: var password = "test123" 我希望在提交文件时,其外观如下所示: var password = "" 标准(也是正确的)建议是将这些密码保存在其他地方,例如,从不同的、不受版本控制的文件中读取它们(~/.netrc等

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

我正在使用版本控制,发现每次提交和推送此文件时都要删除这些密码是一件很麻烦的事情

当我运行“git commit”时,有没有办法在某个地方编写一个脚本来清除所有这些敏感信息

换句话说,如果我的文件如下所示:

var password = "test123"
我希望在提交文件时,其外观如下所示:

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

也就是说,您可以使用预提交钩子检查index1中的密码,如果存在密码,则中止提交(这也是标准建议:不要修改预提交钩子中的内容,只需告诉用户存在错误,然后停止)。或者,您甚至可以让pre-commit钩子调整索引,使密码不存在

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


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
有关
:0:foo.txt
的含义,请参见