.gitignore文件非常有用,可以忽略我们不想控制的某些文件。不幸的是,当文件已经被版本控制时,它无法使用。例如,我的.gitignore(已经添加到Git中)文件可能与我的同事想要的文件不同(例如,我想忽略Vim文件)。每当我更改此文件时,git都会将其显示为修改后的文件。所以我的问题是:
- 是否有任何方法可以忽略Git已经控制的某个文件的更改?!
- 是否有任何方法可以提交这些更改,但仅保留给自己?显然,我不想使用一个分支,因为我正在一个特定的分支上工作。
.gitignore文件非常有用,可以忽略我们不想控制的某些文件。不幸的是,当文件已经被版本控制时,它无法使用。例如,我的.gitignore(已经添加到Git中)文件可能与我的同事想要的文件不同(例如,我想忽略Vim文件)。每当我更改此文件时,git都会将其显示为修改后的文件。所以我的问题是:
使用git-update-index临时忽略已在版本控制下的文件更改:
git update-index --assume-unchanged <files>
要撤销此操作,请使用:
git update-index --no-assume-unchanged <files>
如果您需要在 git-reset 之后保留更改,请查看 skip-worktree
和 no-skip-worktree
选项以更新索引。
如果您想要排除与您的进程有关的文件(例如Vim临时文件),请编辑(本地)文件.git/info/exclude
并在其中添加您的排除模式。该文件旨在为开发人员提供特定于开发人员的排除,而不是.gitignore
,后者旨在为整个项目提供排除。
简单地说,每个人都应该同意将什么添加到.gitignore
。对于您不同意的文件,请使用.git/info/exclude
。
.git/info/exclude
文件,它就是为此设计的。然而,如果你将问题概括为“我如何忽略Git中已经添加的任何文件的更改”,那么你需要另一种解决方案,因为这是一个不同的问题。然而,对于这个具体问题,我不建议使用通用解决方案,因为同事们将无法共享.gitignore
的更改。 - Greg Hewgill你可以使用这个命令来获得你想要的内容。
git rm --cached path/to/file
或者git rm -r --cached path/ignore/dir
这将仅从 git 移除跟踪,而不会删除实际的文件。
然后,您可以编辑忽略文件以取消跟踪这些文件或目录。
这意味着你的
- 应该被版本控制并通过克隆分发到其他存储库的模式(即,所有开发人员都想要忽略的文件)应该放在一个
.gitignore
文件中。
.gitignore
文件不应该与你的同事不同 - 它正在按照预期工作。特定于某个存储库但不需要与其他相关存储库共享的模式(例如,位于存储库内部但特定于一个用户工作流程的辅助文件)应放入 $GIT_DIR/info/exclude
文件中。
用户希望在所有情况下都忽略的模式(例如备份或用户选择的编辑器生成的临时文件)通常放入由用户的 ~/.gitconfig
中的 core.excludesfile
指定的文件中。
就是这样。将一个core.excludesfile
文件路径指定到您的~/.gitconfig
文件中,然后将要排除的模式放入其中。
我曾在其他地方写过排除文件的三种方法。
总结如下:
列表中较低的项目优先于较高的项目,文件中任何模式中的项目前面的 !
将反转先前的排除。
这种范例在 Git 中也有所体现。例如,如果您正在使用子模块,则要使用的子模块的 URL 在存储库中的 .gitmodules
文件中,但是您可以在 .git/config 文件中覆盖要使用的 URL。
以下是一个普遍适用的解决方案,适用于在SmartGitHG可视化界面下使用Git的用户: