如何阻止Git跟踪来自此提交的文件的任何更改?

时间:2013-08-16 15:28:26

标签: git

我有一个数据库配置文件,其默认值不重要。但是,对此文件的任何更改都将包含不应在repo中跟踪的敏感信息。

我希望Git存储库的未来可以包含默认版本,但忽略任何用户所做的任何更改。

以下内容保留了本地配置,但是将删除推送到了repo,从而导致将来出现问题。

cat "app/dir/config.file" >> .gitignore
git rm --cached app/dir/config.file

以下工作可以完成,但不会持续超过推销回购。

git update-index --assume-unchanged app/dir/config.file

这似乎是围绕敏感信息进行版本控制的常见要求,但我似乎无法找到解决方案。

2 个答案:

答案 0 :(得分:145)

像往常一样,github有一个很棒的文档。

https://help.github.com/articles/ignoring-files#ignoring-versioned-files

以下是相关摘录:

  

忽略版本化文件

     

存储库中的某些文件经常更改,但很少提交。通常,这些是编辑的各种本地配置文件,但绝不应在上游提交。 Git允许您通过假设它们不变来忽略这些文件。

     
      
  1. 在终端中,导航到Git存储库的位置。
  2.   
  3. 在终端中运行以下命令:
  4.         

    git update-index --assume-unchanged path/to/file.txt

         

    一旦你标记了这样的文件,Git就完全忽略了对它的任何改变。它在运行git statusgit diff时永远不会显示,也不会被提交。

         

    要让Git再次跟踪文件,只需运行:

         

    git update-index --no-assume-unchanged path/to/file.txt

答案 1 :(得分:6)

不确定这是否是“最佳”方式......但我发现的工作只需几步。

New Laravel示例:

  1. git init
  2. 调整.gitignore个文件以获得所需的结果,例如不丢失供应商文件夹。
  3. 制作您不想跟踪的文件的副本(例如:.htaccess,.env等)
  4. git add .
  5. git commit -m "first commit"
  6. git rm --cached public /.htaccess然后git rm --cached .env
  7. git commit
  8. git status应将这些文件显示为已删除。
  9. 现在把你复制的文件放回去。由于它们与您告诉git从跟踪中删除的名称相同,因此git现在将完全忽略这些文件。
  10. 现在可以编辑它们,您可以拥有本地版本和生产版本。注意:您可能必须在生产设置上第一次重复所有这些步骤。到目前为止,这对我来说效果很好。