具体来说,我维护了我的dotfiles的git存储库。我最近开始研究一台新机器,并在同一台机器上克隆了我的存储库。
现在,我希望对我的dotfiles进行一些更改,这些更改仅适用于此系统。我希望在我的存储库中忽略这些更改。
我应该继续跟踪和提交其他更改。
例如,在我的.gitconfig中,我有一个设置为:
[push]
default = simple
现在,在我的新机器上,git的版本使用得很旧。它仍然不支持push simple
的设置。所以,我想改变这一点,但仅限于本地。
但是,如果我对.gitconfig进行任何其他更改,我想跟踪这些。无论如何我能做到这一点吗?
编辑:
我知道git update-index --assume-unchanged
。它的问题是git将不再跟踪我的文件,直到我反转它。然后,它将跟踪所有变化
我希望忽略某些变化并跟踪其余变化。
答案 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
。
我在Emacs,Zsh,Git,Tmux等配置中遵循此策略,因此可以自定义它们而无需修改版本控制的文件。为此,我有.zshrc.local
,.gitconfig.local
,.tmux.local.conf
,globalCompositeOperation
等等。
答案 3 :(得分:0)
正如Peter所建议的那样,您可以将这些特定于机器的更改保留在分支中。显然,您必须小心谨慎地将更改与&#34;主线&#34;中的机器特定文件分开。有两种方法可以做到这一点: