.gitignore文件在忽略我们不想控制的一些文件时非常有用。不幸的是,当文件已经受版本控制时,它无法使用。例如,我的.gitignore(已经添加到git)文件可能与我的同事想要的文件不同(例如我想忽略Vim文件)。每当我对此文件进行更改时,git都会将其显示为已修改的文件。所以我的问题:
答案 0 :(得分:114)
使用git-update-index暂时忽略对已受版本控制的文件的更改:
git update-index --assume-unchanged <files>
要撤消该用途:
git update-index --no-assume-unchanged <files>
如果您需要通过git-reset
,请查看更新索引的skip-worktree
和no-skip-worktree
选项
答案 1 :(得分:13)
如果要排除特定于您的流程的文件(例如Vim临时文件),请编辑(本地)文件.git/info/exclude
并在那里添加排除模式。此文件专为特定于开发人员的排除项而非.gitignore
而设计,该项目专为项目范围的排除项而设计。
简短摘要是,每个人都应该同意.gitignore
添加的内容。对于您不同意的文件,请使用.git/info/exclude
。
答案 2 :(得分:5)
您可以使用此命令获得所需。
git rm --cached path/to/file
或
git rm -r --cached path/ignore/dir
这只会从git中删除曲目,不会删除真实文件。
然后您可以编辑忽略文件以取消跟踪这些文件或目录。
答案 3 :(得分:2)
我无法真正回答一般性问题(让Git忽略跟踪文件) - 它让我觉得它是一个比有用更有害的功能。
但是,gitignore manual page指定了几种为排除文件配置模式的方法。
特别是,它提供了有关如何使用这些方式的明确说明:
- 应该通过克隆进行版本控制并分发到其他存储库的模式(即所有开发人员都希望忽略的文件)应该放在
.gitignore
文件中。
意味着您的.gitignore
文件不应与您的同事不同 - 它正在按预期工作。
特定于特定存储库但不需要与其他相关存储库共享的模式(例如,存储在存储库中但特定于一个用户工作流的辅助文件)应该进入{{ 1}}文件。
- 中
用户希望git在所有情况下忽略的模式(例如,备份或由用户选择的编辑器生成的临时文件)通常会进入由{{1}指定的文件}在用户的
$GIT_DIR/info/exclude
。
你有它。在core.excludesfile
文件中指定~/.gitconfig
文件路径,然后将要排除的模式添加到其中。
答案 4 :(得分:1)
我在别处写过three ways of excluding files。
总结:
列表中的较低项目优先于较高项目,文件中任何模式中项目前面的!
都会反转先前的排除项。
这种范例可以在Git的其他地方看到。例如,如果您使用的是子模块,则要使用的子模块的URL位于存储库中的.gitmodules
文件中,但您可以覆盖要在.git / config文件中使用的URL。
答案 5 :(得分:0)
对于那些在SmartGitHG viusal界面下使用Git的人来说,这是一个普遍的,无处不在的(非个人)解决方案: