Git忽略对部分跟踪文件的本地更改

时间:2014-02-13 14:07:54

标签: git

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

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

我应该继续跟踪和提交其他更改。

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

[push]
   default = simple

现在,在我的新机器上,git的版本使用得很旧。它仍然不支持push simple的设置。所以,我想改变这一点,但仅限于本地。

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

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

4 个答案:

答案 0 :(得分:162)

尝试使用此命令:

git update-index --assume-unchanged FILENAME_TO_IGNORE

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

git update-index --no-assume-unchanged

<强>更新

以下是如何在当前目录下列出'假设未更改的文件:

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

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

答案 1 :(得分:8)

我不相信有一个特定的命令会“跟踪”文件的某些更改。但是,您没有理由不能创建一个本地分支,您可以从其中提取更改,但永远不会发回任何更改。

答案 2 :(得分:2)

以下是针对您的具体问题的替代解决方案。将machine-config配置放在~/.gitconfig文件中,然后将以下内容放在版本控制的[include] path = ~/.gitconfig.local 中:

~/.gitconfig.local

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

有关init.local.el

的详情,请参阅here

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

答案 3 :(得分:0)

正如Peter所建议的那样,您可以将这些特定于机器的更改保留在分支中。显然,您必须小心谨慎地将更改与&#34;主线&#34;中的机器特定文件分开。有两种方法可以做到这一点:

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