90

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

我希望将来对 Git 存储库的拉取包括默认版本,但忽略任何用户所做的任何更改。

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

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

以下内容完成了这项工作,但在推送到 repo 之后不会持续存在。

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

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

4

2 回答 2

200

As usual github has a great doc on this.

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

Here's the relevant snippet:

Ignoring versioned files

Some files in a repository change often but are rarely committed. Usually, these are various local configuration files that are edited, but should never be committed upstream. Git lets you ignore those files by assuming they are unchanged.

  1. In Terminal, navigate to the location of your Git repository.
  2. Run the following command in your terminal:

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

Once you mark a file like this, Git completely ignores any changes on it. It will never show up when running git status or git diff, nor will it ever be committed.

To make Git track the file again, simply run:

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

于 2013-08-16T16:04:48.480 回答
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 现在将完全忽略这些文件。

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

于 2015-06-02T20:46:34.137 回答