如何配置git在本地忽略某些文件?

How do I configure git to ignore some files locally?

我可以在本地忽略文件而不污染其他人的全局Git配置吗?我有未跟踪的文件,在我的git状态是垃圾邮件,但我不想提交git配置更改为每一个小随机未跟踪文件,我在我的本地分支。


从相关的Git文档中:

Patterns which are specific to a particular repository but which do not need to be shared with other related repositories (e.g., auxiliary files that live inside the repository but are specific to one user's workflow) should go into the $GIT_DIR/info/exclude file.

.git/info/exclude文件的格式与任何.gitignore文件的格式相同。另一种选择是将core.excludesFile设置为包含全局模式的文件名。

注意,如果已经有未分页的更改,则必须在编辑忽略模式后运行以下操作:

1
git update-index --assume-unchanged [<file>...]

关于$GIT_DIR的说明:这是一个在整个git手册中使用的符号,只是用来指示到git存储库的路径。如果设置了环境变量,那么它将覆盖您所处的任何回购的位置,这可能不是您想要的位置。


更新:考虑改用git update-index --skip-worktree [...],谢谢@danshumway!请参阅Boralid对这两个选项的差异的解释。

旧答案:

如果需要忽略对跟踪文件的本地更改(我们对配置文件进行了本地修改),请使用git update-index --assume-unchanged [...]


将以下行添加到.gitconfig文件的[alias]部分

1
2
3
ignore = update-index --assume-unchanged
unignore = update-index --no-assume-unchanged
ignored = !git ls-files -v | grep"^[[:lower:]]"

现在可以使用git ignore my_file忽略对本地文件的更改,使用git unignore my_file停止忽略更改。git ignored列出了被忽略的文件。

这个答案来自http://gitready.com/intermediate/2009/02/18/temporary-ignoring-files.html。


您有几个选项:

  • 在工作目录中保留一个脏的(或未提交的).gitignore文件(或使用topgit或其他此类修补工具自动应用该文件)。
  • 如果这是特定于一棵树,则将排除项放在$GIT_DIR/info/exclude文件中。
  • 运行git config --global core.excludesfile ~/.gitignore并将模式添加到~/.gitignore中。如果要忽略所有树上的某些模式,则应用此选项。例如,我将它用于.pyc.pyo文件。

此外,请确保您使用的是模式,而不是显式枚举文件(如果适用)。


我想你在找:

1
git update-index --skip-worktree FILENAME

忽略本地更改

下面是http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/有关这些解决方案的更多说明!


您可以安装一些Git别名以简化此过程。这将编辑您的.gitconfig文件的[alias]节点。

1
2
3
git config --global alias.ignore 'update-index --skip-worktree'
git config --global alias.unignore 'update-index --no-skip-worktree'
git config --global alias.ignored '!git ls-files -v | grep"^S"'

为您安装的快捷方式如下:

  • 埃多克斯1〔18〕
    • Git会假装它在config.xml上看不到任何变化-防止您意外地提交这些变化。
  • 埃多克斯1〔20〕
    • Git将继续确认您对config.xml所做的更改-允许您再次提交这些更改。
  • 埃多克斯1〔14〕
    • Git将以上面描述的方式列出您"忽略"的所有文件。

我是通过引用Phatmann的答案来构建这些模型的——它给出了同一个--assume-unchanged版本。

我现在的版本使用--skip-worktree忽略本地更改。有关差异的完整解释,请参见Borealid的回答,但本质上,--skip-worktree的目的是让开发人员在不承担更改风险的情况下更改文件。

这里显示的git ignored命令使用git ls-files -v并过滤列表以显示以S标记开头的条目。S标记表示状态为"跳过工作树"的文件。有关git ls-files显示的文件状态的完整列表:请参阅git ls-files-t选项的文档。


您可以简单地将.gitignore文件添加到主目录,即$HOME/.gitignore~/.gitignore。然后告诉Git将该文件与命令一起使用:

1
git config --global core.excludesfile ~/.gitignore

这是一个普通的.git ignore文件,在决定忽略什么时,git引用该文件。因为它在您的主目录中,所以它只适用于您,不会污染任何项目.gitignore文件。

多年来,我一直使用这种方法,取得了很好的效果。


如果您的repo还没有.gitignore文件,那么一个简单的解决方案是创建一个.gitignore文件,并在其中将.gitignore添加到要忽略的文件列表中。