如何configurationgit忽略本地的一些文件?

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

从相关的Git文档 :

特定于特定存储库但不需要与其他相关存储库共享的模式(例如,存储在存储库内但是特定于一个用户的工作stream的辅助文件)应该进入$GIT_DIR/info/exclude文件。

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

请注意,如果您已经有非稳定的更改,则必须在编辑忽略模式后运行以下命令:

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

关于$GIT_DIR注意事项 :这是一个在git手册中使用的表示法,只是表示git仓库的path。 如果设置了环境variables,那么它将覆盖你所在的任何回购的位置,这可能不是你想要的。

更新 :考虑使用git update-index --skip-worktree [<file>...]来代替,谢谢@danShumway! 见Borealid对这两种select的区别的解释 。


老答案:

如果您需要忽略对跟踪文件的本地更改(我们通过本地修改configuration文件),请使用git update-index --assume-unchanged [<file>...]

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

 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/temporarily-ignoring-files.html收集的。;

你有几个select:

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

此外,确保您使用的是模式,并且在适用的情况下不明确列举文件。

我想你正在寻找:

 git update-index --skip-worktree FILENAME 

忽略当地所做的更改

这里的http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/关于这些解决scheme的更多解释!;

你可以安装一些git别名来简化这个过程。 这会编辑.gitconfig文件的[alias]节点。

 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"' 

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

  • git ignore config.xml
    • git会假装它没有在config.xml看到任何更改 – 防止您意外地提交这些更改。
  • git unignore config.xml
    • git会继续确认您对config.xml的更改 – 允许您再次提交这些更改。
  • git ignored
    • git将以上述方式列出您“忽略”的所有文件。

我通过参考phatmann的答案来build立这些答案 – 这个答案提供了一个相同的--assume-unchanged版本。

我提供的版本使用--skip-worktree忽略本地更改。 请参阅Borealid的答案以全面解释差异,但本质上--skip-worktree的目的是让开发人员更改文件,而无需承担更改的风险

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

您只需将.gitignore文件添加到您的主目录; 即$HOME/.gitignore~/.gitignore 。 然后告诉git使用该文件的命令:

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

这是一个正常的.gitignore文件,当决定要忽略什么的时候,它会被git引用。 由于它在你的主目录,它只适用于你,不会污染任何项目.gitignore文件。

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

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