[英]Git ignore local changes to portions of tracked files
具体来说,我维护了我的dotfiles的git存储库。 我最近开始研究一台新机器,并在同一台机器上克隆了我的存储库。
现在,我希望对我的dotfiles进行一些更改,这些更改仅适用于此系统。 我希望在我的存储库中忽略这些更改。
我应该继续跟踪和提交其他更改。
例如,在我的.gitconfig中,我有一个设置为:
[push]
default = simple
现在,在我的新机器上,使用它的git版本已经很老了。 它仍然不支持push的simple
设置。 所以,我想改变这个,但只是在本地。
但是,如果我对.gitconfig进行任何其他更改,我想跟踪它们。 无论如何我能做到这一点?
编辑:
我知道git update-index --assume-unchanged
。 它的问题是git将不再跟踪我的文件,直到我反转它。 然后,它将跟踪所有变化。
我希望忽略某些变化并跟踪其余变化。
尝试使用此命令:
git update-index --assume-unchanged FILENAME_TO_IGNORE
要反转它(如果您想要对其进行更改),请使用:
git update-index --no-assume-unchanged
更新 :
以下是在当前目录下列出“假设未更改”文件的方法:
git ls-files -v | grep -E "^[a-z]"
由于-v
选项将使用小写字母表示“假定未更改”文件。
我不相信有一个特定的命令会“跟踪”文件的某些更改。 但是,没有理由不能创建一个本地分支,您可以从其中提取更改,但永远不会发回任何更改。
这是针对您的具体问题的替代解决方案。 将machine-config配置放在~/.gitconfig.local
文件中,然后将以下内容放在版本控制的~/.gitconfig
:
[include]
path = ~/.gitconfig.local
这将告诉Git将它在~/.gitconfig.local
找到的任何内容视为~/.gitconfig
。 是的,您可以覆盖设置。 不,它不需要文件存在(如果没有~/.gitconfig.local
Git会默默地忽略该设置)。
有关[include]
更多信息,请参见此处 。
我在Emacs,Zsh,Git,Tmux等配置中遵循此策略,因此可以自定义它们而无需修改版本控制的文件。 为此,我有init.local.el
, .zshrc.local
, .gitconfig.local
, .tmux.local.conf
等。
正如Peter所建议的那样,您可以将这些机器特定的更改保存在分支中。 显然,您必须小心将“主线”中的机器特定文件的更改严格分开。 有两种方法可以做到这一点:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.