繁体   English   中英

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

[英]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所建议的那样,您可以将这些机器特定的更改保存在分支中。 显然,您必须小心将“主线”中的机器特定文件的更改严格分开。 有两种方法可以做到这一点:

  1. 每次更改主线时都要保持对分支的重新定位(这是我的偏好)
  2. 继续将主线更改合并到分支中(但显然不会在另一个方向上合并)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM