如何在git中修改文件并仍然保留它

时间:2015-07-14 01:57:26

标签: git

假设我有一个带密码的文件,我将它们删空然后执行提交/推送。之后我想让git停止更新该文件,因为我将把我的密码放回我当地的git repo中,我不想在每次提交/推送时都删除它们。

有没有办法在git中解码文件但仍保留它?

我的回购结构是这样的:

> my-repo
    > folder1
        > ... other stuff
    > folder2
        > ... other stuff
    > folder3            
        > ... other stuff
        > launch.sh

我打开了.git / info / exclude并添加了这个(最后一行):

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
folder3/launch.sh

但没有任何反应,git会继续对文件及其所有更改进行版本控制,因此当我添加密码时,它会显示在git diff中。

2 个答案:

答案 0 :(得分:3)

有两种可能性:

更好的选择是git mv passwords.conf passwords.conf.example,然后将passwords.conf添加到.gitignore。也就是说,不要将实际的密码文件放在git repo中,只是在人们配置安装时可以使用的模板。您的安装脚本可能会在此处执行条件复制。

更糟糕的选择是使用git update-index --assume-unchanged。但严重的是,请不要。除了其他原因之外,因为你还必须教会每个人克隆你的回购。

答案 1 :(得分:1)

如果您希望文件在那里,修改它,并让git忽略更改,请使用git update-index --assume-unchanged $file

然而,一个重要的细节:如果您的密码当前在git存储库中,删除它们并提交是不够的。他们将留在git历史中。您需要清理整个历史记录。见https://help.github.com/articles/remove-sensitive-data/

重要的事情:如果这些密码曾经是可公开访问的存储库历史记录的一部分,即使只有一秒,也要考虑它们受到损害并尽快更改它们。