Git:忽略版本控制的文件

.gitignore文件在忽略一些我们不想控制的文件时非常有用。 不幸的是,当文件已经在版本控制之下的时候就不能使用了。 例如,我的.gitignore(已经添加到git)文件可能与我的同事想要的不同(例如,我想忽略Vim文件)。 每当我对这个文件进行修改,git就会把它显示为一个修改过的文件。 所以我的问题:

  1. 有没有办法忽略已经由Git控制的某个文件的更改?
  2. 有什么办法可以提交这些更改,但只保留给我自己吗? 显然,我不想使用分支,因为我正在某个分支上工作。

如果要排除特定于进程的文件(如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-worktreeno-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,然后放入你想要排除的模式。

我已经写了三种在其他地方排除文件的方法 。

综上所述:

  1. 全局git忽略文件适用于该系统上的所有存储库
  2. 存储库中的.gitignore文件应用存储库以及该存储库的所有克隆。
  3. .git / info / exclude文件仅适用于该存储库。

列表中较低的项目优先于较高的项目,并且a ! 在文件中的任何模式中的项目之前反转先前的排除。

这个范例在Git的其他地方可以看到。 例如,如果您使用的是子模块, .gitmodules使用的子模块的url位于存储库中的.gitmodules文件中,但是您可以覆盖在.git / config文件中使用的url。

下面是在SmartGitHG viusal界面下使用Git的普遍化的ubiquitos(而不是个人)解决scheme:

  • 在“Repositories”窗口中select一个你想忽略的文件夹;
  • 在“文件”窗口中select该文件夹中的所有文件(通过单击主窗口的右上方区域中相应的filter图标来取消隐藏未更改的文件)。
  • 点击控制面板上的“删除”(如果需要,勾选“删除本地文件”checkbox);
  • 提交本地更改;
  • 右键单击“存储库”窗口中的文件夹;
  • 点击“忽略”。