代码之家  ›  专栏  ›  技术社区  ›  Bjorn

如何配置git以在本地忽略一些文件?

  •  1064
  • Bjorn  · 技术社区  · 15 年前

    我可以在本地忽略文件而不污染其他人的全局Git配置吗?我有未跟踪的文件,在我的Git状态是垃圾邮件,但我不想提交Git配置更改为每一个小随机未跟踪文件,我在我的本地分支。

    9 回复  |  直到 6 年前
        1
  •  1457
  •   Randall user782220    7 年前

    the relevant Git documentation :

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

    这个 .git/info/exclude 文件的格式与任何文件的格式相同 .gitignore 文件。另一个选择是设置 core.excludesFile 包含全局模式的文件名。

    注意,如果已经有未分页的更改,则必须在编辑忽略模式后运行以下操作:

    git update-index --assume-unchanged [<file>...]
    

    $GIT_DIR :这是使用的符号 all over Git手册只是用来指示Git存储库的路径。如果设置了环境变量,那么它将覆盖您所处的任何回购的位置,这可能不是您想要的位置。

        2
  •  389
  •   1615903    7 年前

    更新 :考虑使用 git update-index --skip-worktree [<file>...] 相反,谢谢@danshumway!见 Borealid's explanation on the difference of the two options .


    老回答:

    如果需要忽略对跟踪文件的本地更改(我们对配置文件进行了本地修改),请使用 git update-index --assume-unchanged [<file>...] .

        3
  •  137
  •   phatmann Trevor    11 年前

    将以下行添加到.gitconfig文件的[alias]部分

    ignore = update-index --assume-unchanged
    unignore = update-index --no-assume-unchanged
    ignored = !git ls-files -v | grep "^[[:lower:]]"
    

    现在你可以使用 git ignore my_file 忽略对本地文件的更改,以及 git unignore my_file 停止忽略更改。 git ignored 列出忽略的文件。

    这个答案是从 http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html .

        4
  •  96
  •   Emil Sit    15 年前

    您有几个选项:

    • 留下一个脏的(或未承诺的) .gitignore 工作目录中的文件(或使用 topgit 或者其他类似的修补工具)。
    • 将排除项放入 $GIT_DIR/info/exclude 文件,如果这是特定于一个树。
    • git config --global core.excludesfile ~/.gitignore 并为你的 ~/.gitignore . 如果要忽略 全部的 树。我用这个 .pyc .pyo 例如,文件。

    此外,如果适用,请确保使用的是模式,而不是显式枚举文件。

        5
  •  46
  •   Marc Stober    9 年前

    我想你在找:

    git update-index --skip-worktree FILENAME
    

    忽略本地更改

    这里是 http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/ 更多关于这些解决方案的解释!

        6
  •  40
  •   Birchlabs    7 年前

    你可以安装一些 git aliases 使这个过程更简单。这编辑了 [alias] 你的节点 .gitconfig 文件。

    git config --global alias.ignore 'update-index --skip-worktree'
    git config --global alias.unignore 'update-index --no-skip-worktree'
    git config --global alias.ignored '!git ls-files -v | grep "^S"'
    

    为您安装的快捷方式如下:

    • git ignore config.xml
      • Git会假装没有看到任何变化 config.xml _防止您意外地进行这些更改。
    • git unignore config.xml
      • Git将继续确认您对 配置.xml _允许您再次进行这些更改。
    • git ignored
      • Git将以上面描述的方式列出您“忽略”的所有文件。

    我是指 phatmann's answer _ --assume-unchanged 相同的版本。

    我现在使用的版本 --skip-worktree 忽略本地更改。见 Borealid's answer 对于差异的完整解释,但本质上 --跳过工作树 目的是 对于开发人员来说,更改文件时不存在提交更改的风险 .

    这个 忽略了Git 此处显示的命令使用 git ls-files -v ,并筛选列表以仅显示以 S 标签。这个 S 标记表示状态为“跳过工作树”的文件。对于显示的文件状态的完整列表 git ls-files :参见文档 -t 选择权 git ls-files .

        7
  •  27
  •   Brad Koch Daniel Wright    6 年前

    您只需将.gitignore文件添加到您的主目录,即 $HOME/.gitignore ~/.gitignore . 然后告诉Git将该文件与命令一起使用:

    git config --global core.excludesfile ~/.gitignore
    

    这是一个普通的.git ignore文件,在决定忽略什么时,git引用该文件。因为它在您的主目录中,所以它只适用于您,不会污染任何项目.gitignore文件。

    多年来,我一直使用这种方法,取得了很好的效果。

        8
  •  6
  •   Monir    7 年前

    别忘了用@joss lee回答一个事实。

        git update-index --assume-unchanged directory/
    

    请注意结尾处的正斜杠(/)。

        9
  •  0
  •   Gavin S. Yancey    8 年前

    如果您的repo还没有.gitignore文件,那么一个简单的解决方案是创建一个.gitignore文件,并在其中添加 .gitignore 到要忽略的文件列表。