【问题标题】:Git ignore local changes to portions of tracked filesGit 忽略对部分跟踪文件的本地更改
【发布时间】:2016-11-09 12:56:00
【问题描述】:

具体来说,我维护我的 dotfiles 的 git 存储库。我最近开始在一台新机器上工作,并在同一台机器上克隆了我的存储库。

现在,我希望对我的点文件进行一些更改,这些更改仅适用于该系统。我希望在我的存储库中忽略这些更改。

我所做的其他更改应继续跟踪和提交。

例如,在我的 .gitconfig 中,我有一个设置:

[push]
   default = simple

现在,在我的新机器上,使用的 git 版本非常旧。它仍然不支持设置simple 进行推送。所以,我想改变它,但仅限于本地。

但是,如果我对我的 .gitconfig 进行任何其他更改,我想跟踪这些更改。无论如何我可以做到这一点?

编辑:
我知道git update-index --assume-unchanged。它的问题是 git 将不再跟踪我的文件,直到我反转它。然后,它将跟踪所有更改。
我希望忽略某些更改并跟踪其余更改。

【问题讨论】:

标签: git


【解决方案1】:

尝试使用此命令:

git update-index --assume-unchanged FILENAME_TO_IGNORE

要反转它(如果您想对其进行更改),请使用:

git update-index --no-assume-unchanged

更新

下面是列出当前目录下'假设不变'文件的方法:

git ls-files -v | grep -E "^[a-z]"

-v 选项将使用小写字母表示“假定未更改”文件。

【讨论】:

  • git update-index --assume-unchanged 的问题是它根本不再跟踪我的文件,直到我将其反转。然后,它将跟踪所有更改。我希望忽略某些更改并跟踪其余更改。
  • 但这正是我在我的情况下所需要的!我的队友使用的文件会使测试套件减慢几十秒,所以我一直删除它......但它已经消失的事实污染了我的 git 会话。不过现在不行了!
  • 对于那些来到这里并认为“--assume-unchanged 是完美的,因为我确实想忽略对文件的所有更改”的人,请尝试“--skip-worktree”。
  • --skip-worktree 解释:stackoverflow.com/questions/13630849/…
  • 我遇到的问题是git checkout 仍然不允许我更改分支,如果对该文件的更改导致冲突:T
【解决方案2】:

我认为没有特定命令可以“取消跟踪”文件的某些更改。但是,您没有理由不能创建一个本地分支,您可以从远程将更改拉入其中,但永远不要发回任何更改。

【讨论】:

  • 呃!这正是我需要的!将这些更改发送到分支!谢谢!我一直在过度设计这种情况。
  • 请解释一下。如果您有一个本地分支,您只拉入更改,但从不发回任何更改,您如何将您在该本地分支中所做的更改转移到主代码库?
【解决方案3】:

这是针对您的特定问题的替代解决方案。将 machine-config 配置放入 ~/.gitconfig.local 文件中,然后将以下内容放入受版本控制的 ~/.gitconfig

[include]
    path = ~/.gitconfig.local

这将告诉 Git 将其在 ~/.gitconfig.local 中找到的任何内容视为在 ~/.gitconfig 中找到的任何内容。是的,您可以覆盖设置。不,它不需要文件存在(如果没有~/.gitconfig.local,Git 会默默地忽略该设置。

有关[include] 的更多信息,请参阅here

我在我的 Emacs、Zsh、Git、Tmux 等配置中遵循此策略,以便无需修改版本控制文件即可自定义它们。为此,我有init.local.el.zshrc.local.gitconfig.local.tmux.local.conf 等等。

【讨论】:

    【解决方案4】:

    按照 Peter 的建议,您可以将这些特定于机器的更改保留在分支中。显然,您必须小心地将这些机器特定文件的更改与“主线”严格分开。有两种方法可以做到这一点:

    1. 每当您更改主线时,请继续重新调整分支(这是我的偏好)
    2. 继续将主线更改合并到分支中(但显然从不向另一个方向合并)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-21
      • 2012-06-01
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 2011-02-03
      • 2011-10-30
      相关资源
      最近更新 更多