【问题标题】:Git: Ignoring Version-Controlled FilesGit:忽略版本控制文件
【发布时间】:2011-01-08 11:41:19
【问题描述】:

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

  1. 有什么方法可以忽略某个文件的更改,该文件已经由 Git 控制?!
  2. 是否有任何方法可以提交这些更改,但仅供我自己使用?显然,我不想使用分支,因为我正在处理某个分支。

【问题讨论】:

  • 没有答案回答主要问题 - 数字 1,包括已接受的问题。问题是关于忽略已经控制的文件,而不是 .gitignore not exlude 将完成这项工作
  • git-update-index 答案是正确答案。

标签: git gitignore


【解决方案1】:

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

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

要撤消该使用:

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

如果您需要在 git-reset 之后持续存在,请查看更新索引的 skip-worktreeno-skip-worktree 选项

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我将版本控制文件添加到 .get/info/exclude 但它们继续显示为修改后的文件。
    • 最初的问题是寻找一种方法让不同的同事忽略不同的文件集。我的回答介绍了为此目的设计的.git/info/exclude 文件。但是,如果您将问题概括为“我如何忽略对已添加到 Git 的 any 文件的更改”,那么是的,您需要一个不同的解决方案,因为这是一个不同的问题。但是,我不会推荐针对此特定问题的通用解决方案,因为这样同事就不能再将更改分享到 .gitignore
    【解决方案3】:

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

    git rm --cached path/to/file
    

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

    这只会从git中删除轨道,不会删除真实文件。

    然后您可以编辑忽略文件以取消跟踪这些文件或目录。

    【讨论】:

    • OP 不是在问如何删除版本错误的文件,而是在检查 git 状态时如何保持它们的版本并忽略它们。
    【解决方案4】:

    我无法真正回答一般性问题(让 Git 忽略跟踪的文件)——我觉得它是一个弊大于利的功能。

    不过,gitignore manual page 指定了一些配置排除文件模式的方法。

    特别是,它明确说明了如何使用这些不同的方式:

    • 应受版本控制并通过克隆分发到其他存储库的模式(即所有开发人员都希望忽略的文件)应放入 .gitignore 文件中。

    意味着您的 .gitignore 文件不应与您的同事不同 - 它正在按预期工作。

    • 特定于特定存储库但不需要与其他相关存储库共享的模式(例如,存在于存储库中但特定于一个用户工作流的辅助文件)应放入 $GIT_DIR/info/exclude 文件。

    • 用户希望 git 在所有情况下都忽略的模式(例如,备份或 用户选择的编辑器生成的临时文件)通常进入用户 @ 中 core.excludesfile 指定的文件中987654326@.

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

    【讨论】:

      【解决方案5】:

      我在其他地方写过关于 three ways of excluding files 的文章。

      总结:

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

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

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

      【讨论】:

        【解决方案6】:

        对于在 SmartGitHG 可视化界面下使用 Git 的人来说,这是一个通用的、普遍的(非个人的)解决方案:

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

        【讨论】:

          猜你喜欢
          • 2011-06-28
          • 1970-01-01
          • 1970-01-01
          • 2013-10-09
          • 1970-01-01
          • 1970-01-01
          • 2012-10-05
          • 2012-11-22
          • 2016-04-09
          相关资源
          最近更新 更多