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

Ben*_*ell 65 git

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

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

以下内容保留了本地配置,但将删除推送到repo导致将来拉出的问题.

cat "app/dir/config.file" >> .gitignore
git rm --cached app/dir/config.file
Run Code Online (Sandbox Code Playgroud)

以下是这项工作,但不会持续超过对回购的推动.

git update-index --assume-unchanged app/dir/config.file
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*Rob 151

和往常一样,github有一个很棒的文档.

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

这是相关的片段:

忽略版本化文件

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

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

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

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

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

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

  • [这个问题](http://stackoverflow.com/questions/16818305/git-assume-unchanged-implications)的第一个答案表明`--assume-unchanged`设置了一个本地设置.这意味着每当新的开发人员克隆时,他们都需要" - 保持不变"每个适用的文件.如何传播这种行为? (45认同)
  • 我很高兴您引用该部分,因为GitHub已经从该页面删除了它. (8认同)
  • @EdwardNewell 按照协议。将相关文件包含在名为“.git-assume-unchanged”(或其他文件)的文件中。然后,在您用来设置项目配置的任何命令中运行 `cat .git-assume-unchanged | xargs git update-index --assume-unchanged`。可能最好还包括别名以在项目配置中设置和取消设置它们。 (2认同)

小智 6

不确定这是否是"最佳"方式......但我发现的工作需要几步.

新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现在将完全忽略这些文件.

现在可以编辑它们,您可以拥有本地版本和生产版本.注意:您可能必须在生产设置上第一次重复所有这些步骤.到目前为止,这对我来说效果很好.