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


68

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

现在,我希望对仅针对该系统的点文件进行一些更改。我希望在存储库中忽略这些更改。

我所做的其他更改应继续进行跟踪和落实。

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

[push]
   default = simple

现在,在我的新机器上,使用的git版本非常旧。它仍然不支持simple推送设置。因此,我想更改此设置,但只能在本地进行更改。

但是,如果我对.gitconfig进行了其他更改,则希望跟踪这些更改。反正我能做到这一点?

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


Answers:


8

我不相信有一个特定的命令可以“取消跟踪”对文件的某些更改。但是,没有理由不能创建一个本地分支,您无法从中将更改从远程分支拉入该分支,但永远不要将任何更改发送回去。


2
h!那正是我所需要的!将这些更改发送到分支!谢谢!我一直在过度设计这种情况。
darnir 2014年

4
请解释。如果您有一个本地分支,您仅拉入更改,但从不回发任何更改,那么如何将在该本地分支中所做的更改转移到主代码库?
Sophtware'Apr

176

尝试使用以下命令:

git update-index --assume-unchanged FILENAME_TO_IGNORE

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

git update-index --no-assume-unchanged

更新

这是在当前目录下列出“假定未更改”文件的方法:

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

作为-v选项,将对“假定未更改”的文件使用小写字母。


问题git update-index --assume-unchanged在于,在我撤消该文件之前,它将不再跟踪我的文件。然后,它将跟踪所有更改。我希望忽略某些更改并跟踪其余更改。
darnir 2014年

4
但是,这正是我所需要的!我的队友使用的文件使测试套件的运行速度降低了数十秒,因此我一直将其删除...但是它消失了这一事实污染了我的git会话。不再了!
Dan Passaro 2014年

7
对于来到这里并认为“--assume-unchanged非常完美,因为我想忽略文件的所有更改”的人们,请尝试使用“ --skip-worktree”。
提请


2
我的问题是,git checkout如果该文件的更改导致冲突,仍然不允许我更改分支机构:T
Jorge Orpinel

2

这是您特定问题的替代解决方案。将machine-config配置放入~/.gitconfig.local文件中,然后将以下内容放入您的版本控制中~/.gitconfig

[include]
    path = ~/.gitconfig.local

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

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

在我的Emacs,Zsh,Git,Tmux等配置中,我遵循这种策略,因此它们是可自定义的,而无需修改版本控制的文件。要做到这一点,我有init.local.el.zshrc.local.gitconfig.local.tmux.local.conf,等。


0

正如Peter所建议的,您可以将这些机器特定的更改保留在分支中。显然,您将必须小心地将对这些机器特定文件的更改与“主线”严格分开。有两种方法可以执行此操作:

  1. 每当您更改主线时,请保持分支基础不变(这是我的偏爱)
  2. 继续将主线更改合并到分支中(但显然绝不会在另一个方向上合并)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.