Git:忽略版本控制的文件

时间:2011-01-08 11:41:19

标签: git gitignore

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

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

6 个答案:

答案 0 :(得分:114)

使用git-update-index暂时忽略对已受版本控制的文件的更改:

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

要撤消该用途:

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

如果您需要通过git-reset

,请查看更新索引的skip-worktreeno-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

总结:

  1. 全局git ignore文件适用于该系统上的所有存储库
  2. 存储库中的.gitignore文件应用存储库和该存储库的所有克隆。
  3. .git / info / exclude文件仅适用于该存储库。
  4. 列表中的较低项目优先于较高项目,文件中任何模式中项目前面的!都会反转先前的排除项。

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

答案 5 :(得分:0)

对于那些在SmartGitHG viusal界面下使用Git的人来说,这是一个普遍的,无处不在的(非个人)解决方案:

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