如何阻止Git从此提交中跟踪对文件的任何更改?


77

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

我希望将来将Git存储库中的内容包括默认版本,但不要理会任何用户所做的任何更改。

以下内容保留本地配置,但将删除推送到存储库,从而导致将来提取的问题。

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

以下内容可以完成工作,但在推送到存储库之前不会持久。

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

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


3
我通常创建一个config.file.dist包含默认配置值的并提交。然后,当签出副本时,您只需复制.dist文件以创建实际的配置文件,然后填写要更改的值即可。
保罗

1
这似乎是各界的共识。如果您不希望对其进行版本控制,请不要跟踪它的开头或跟踪用户实现的模板。我开始认为我正在尝试以错误的方式锤击螺丝。
本·坎贝尔


Answers:


174

像往常一样,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 status或时永远不会显示git diff,也永远不会提交。

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

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


54
此问题的第一个答案表明已--assume-unchanged设置本地设置。这意味着任何时候新开发人员克隆时,他们都需要--assume-unchanged每个适用的文件。如何传播这种行为?
爱德华·纽维尔

11
我很高兴您引用该部分,因为GitHub已将其从该页面中删除。
贾斯丁

在文档中的位置:git-scm.com/docs/…–
mtpultz

@EdwardNewell通过协议。将相关文件包含在一个名为.git-assume-unchanged(或类似名称)的文件中。然后,在用于设置项目配置的任何命令中运行cat .git-assume-unchanged | xargs git update-index --assume-unchanged。最好在项目配置中也包含别名以设置和取消设置这些别名。
DylanYoung

7

不知道这是否是“最佳”方法……但是我发现可以工作的步骤很多。

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

现在可以对其进行编辑,您可以拥有本地和生产版本。注意:您可能还必须在首次进行生产设置时重复所有这些步骤。到目前为止,这对我来说效果很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.