2011-01-08 76 views
41

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

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

没有答案回答主要问题 - 第1号,包括接受的问题。问题是关于忽略已经被控制的文件,而不是.gitignore不会排除会做这项工作 – shealtiel

+4

git-update-index的答案是正确的答案。 – Jason

回答

11

如果要排除特定于进程的文件(如Vim临时文件),请编辑(本地)文件.git/info/exclude并在其中添加排除模式。此文件专为特定于开发人员的排除而设计,而不是针对项目范围排除设计的.gitignore

简短的总结是,每个人都应该对添加到.gitignore的内容达成一致。对于不同意的文件,请使用.git/info/exclude

+0

我将版本控制的文件添加到.get/info/exclude,但它们继续显示为已修改的文件。 – paullb

+7

这不是正确的!使用Aristotle Pagaltzis的回答如下。 – paullb

+1

最初的问题是寻找一种方式让不同的同事忽略不同的文件集。我的回答介绍了为此设计的'.git/info/exclude'文件。但是,如果将问题概括为“如何忽略已添加到Git的任何*文件的更改”,那么是的,您需要不同的解决方案,因为这是一个不同的问题。然而,我不会推荐针对这个特定问题的一般解决方案,因为同事们不能再将变化分享给'.gitignore'。 –

2

我真的不能回答这个一般性问题(有混帐忽略跟踪的文件) - 它给我的印象是一个功能,将远远超过有用的更有害。

但是,gitignore manual page指定了几种配置排除文件模式的方法。

特别是,它提供了有关如何使用这些不同的方式明确指示:

  • 模式应该是版本控制,并通过克隆分发到其他存储库(即文件,所有的开发者都希望忽略)应该进入.gitignore文件。

也就是说你.gitignore文件不应该由你的同事不同 - 它如预期运行。

  • 模式,其是针对特定的仓库,但它并不需要与其他相关资料库(例如,住在仓库里,但具体到一个用户的工作流程辅助文件)共享应该进入$GIT_DIR/info/exclude文件。用户想要的git在所有情况下(例如,备份或选择用户的编辑器生成临时文件)忽略

  • 模式通常进入由core.excludesfile用户的~/.gitconfig指定的文件。

你有它。在您的~/.gitconfig文件中指定一个core.excludesfile文件路径,然后放入要排除的模式。

99

使用git-update-index暂时忽略更改所有已经在版本控制下的文件:

git update-index --assume-unchanged <files> 

撤消使用:

git update-index --no-assume-unchanged <files> 

也有看skip-worktreeno-skip-worktree选项更新-index如果你需要这个坚持过去一个git-reset

+0

工作就像一个魅力!谢谢! –

1

我写过关于three ways of excluding files其他地方。

总结:

  1. 的全球混帐忽略文件适用于系统
  2. 在信息库中的.gitignore文件应用资源库和信息库的所有克隆上的所有信息库。
  3. .git/info/exclude文件仅适用于该存储库。

列表中较低的项目优先于较高的项目,并且在文件中的任何模式中的项目前面的!颠倒先前的排除。

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

+3

它不适用于已经版本化的文件 –

0

这里是广义的,ubiquitos(而不是个人)根据SmartGitHG viusal接口使用Git的解决方案:

  • 选择要在“库”窗口中忽略的文件夹;
  • 在“文件”窗口中选择该文件夹中的所有文件(通过单击主窗口右上角区域中相应的过滤器图标来取消隐藏未更改的文件);
  • 单击控制面板上的“删除”(如果需要,请选中“删除本地文件”复选框);
  • 提交本地更改;
  • 右键单击“存储库”窗口中的文件夹;
  • 点击“忽略”。
4

你可以使用这个命令来得到你想要的。

git rm --cached path/to/file 

git rm -r --cached path/ignore/dir 

这只会从混帐删除曲目,不会删除实际的文件。

然后,您可以编辑忽略文件以解开这些文件或目录。