Git:忽略版本控制的文件
.gitignore文件在忽略一些我们不想控制的文件时非常有用。 不幸的是,当文件已经在版本控制之下的时候就不能使用了。 例如,我的.gitignore(已经添加到git)文件可能与我的同事想要的不同(例如,我想忽略Vim文件)。 每当我对这个文件进行修改,git就会把它显示为一个修改过的文件。 所以我的问题:
- 有没有办法忽略已经由Git控制的某个文件的更改?
- 有什么办法可以提交这些更改,但只保留给我自己吗? 显然,我不想使用分支,因为我正在某个分支上工作。
如果要排除特定于进程的文件(如Vim临时文件),请编辑(本地)文件.git/info/exclude
并在其中添加排除模式。 这个文件是专门为开发人员而devise的,而不是专为排除项目而devise的.gitignore
。
简短的总结是,每个人都应该同意添加到.gitignore
。 对于不同意的文件,请使用.git/info/exclude
。
使用git-update-index临时忽略已经在版本控制下的文件的更改:
git update-index --assume-unchanged <files>
要撤消该用途:
git update-index --no-assume-unchanged <files>
也可以看看update-index的skip-worktree
和no-skip-worktree
选项,如果你需要这个选项来坚持过去的git-reset
你可以使用这个命令来获得你想要的。
git rm --cached path/to/file
要么
git rm -r --cached path/ignore/dir
这只会从git中删除轨道,不会删除真实的文件。
然后,您可以编辑忽略文件来解开这些文件或目录。
我无法真正回答一般问题(让Git忽略跟踪的文件) – 这让我觉得这是一个比有用的更有害的function。
但是, gitignore手册页指定了一些为排除文件configuration模式的方法。
特别是,它给出了如何使用这些不同方式的明确指示:
- 应该由版本控制并通过克隆(即,所有开发人员将要忽略的文件)分发到其他存储库的模式应该放到
.gitignore
文件中。
这意味着你的.gitignore
文件不应该和你的同事有所不同 – 它是按照预期工作的。
特定于特定存储库但不需要与其他相关存储库共享的模式(例如,存储在存储库内但是特定于一个用户的工作stream的辅助文件)应该进入
$GIT_DIR/info/exclude
文件。用户想要在所有情况下都忽略的模式(例如用户select的编辑器生成的备份或临时文件 )通常会进入由用户的
~/.gitconfig
指定的文件。
你有它。 在你的~/.gitconfig
文件中指定一个core.excludesfile
文件path,然后放入你想要排除的模式。
我已经写了三种在其他地方排除文件的方法 。
综上所述:
- 全局git忽略文件适用于该系统上的所有存储库
- 存储库中的.gitignore文件应用存储库以及该存储库的所有克隆。
- .git / info / exclude文件仅适用于该存储库。
列表中较低的项目优先于较高的项目,并且a !
在文件中的任何模式中的项目之前反转先前的排除。
这个范例在Git的其他地方可以看到。 例如,如果您使用的是子模块, .gitmodules
使用的子模块的url位于存储库中的.gitmodules
文件中,但是您可以覆盖在.git / config文件中使用的url。
下面是在SmartGitHG viusal界面下使用Git的普遍化的ubiquitos(而不是个人)解决scheme:
- 在“Repositories”窗口中select一个你想忽略的文件夹;
- 在“文件”窗口中select该文件夹中的所有文件(通过单击主窗口的右上方区域中相应的filter图标来取消隐藏未更改的文件)。
- 点击控制面板上的“删除”(如果需要,勾选“删除本地文件”checkbox);
- 提交本地更改;
- 右键单击“存储库”窗口中的文件夹;
- 点击“忽略”。