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

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

现在,我只想对这个系统特定的点文件做一些修改。 我希望在我的存储库中忽略这些更改。

我做的其他变化,应该继续跟踪和承诺。

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

[push] default = simple 

现在,在我的新机器上,这个版本的git被使用了很久了。 它仍然不支持simple的推设置。 所以,我想改变这个,但只在本地。

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

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

我不相信有一个特定的命令可以“解决”文件的某些更改。 但是,没有理由不能创build一个本地分支,从中取出远程更改,但不要发回任何更改。

尝试使用这个命令:

 git update-index --assume-unchanged FILENAME_TO_IGNORE 

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

 git update-index --no-assume-unchanged 

更新

以下是如何在当前目录下列出“假定不变”的文件:

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

由于-v选项将使用“假定不变”文件使用小写字母。

这是您的具体问题的替代解决scheme。 将machine-configconfiguration放置在~/.gitconfig.local文件中,然后将以下内容放入版本控制的~/.gitconfig

 [include] path = ~/.gitconfig.local 

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

有关[include]更多信息,请参阅此处 。

我在Emacs,Zsh,Git,Tmux等configuration中遵循这个策略,以便它们可以定制而不需要修改版本控制的文件。 为了达到这个目的,我有init.local.el.zshrc.local.gitconfig.local.tmux.local.conf等等。

正如Peter所build议的那样,您可以在分支中保留这些机器特定的更改。 很明显,你必须小心地将这些机器特定文件的变化与“主线”分开。 有两种方法可以做到这一点:

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