--[no-]assume-unchanged
...
This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked
files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to
modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is
changed upstream, you will need to handle the situation manually.
9条答案
按热度按时间tuwxkamq1#
不要忘记,根据gitignore,Git考虑的不同"忽略模式源"有一个优先顺序:
$GIT_DIR/info/exclude
读取的模式。core.excludesfile
指定的文件中读取的模式。最后两个可以解决您的问题,但:
(See也是这个SO问题)
其他两种解决方案涉及更新索引(
git update-index
):Elijah Lynn在评论中提到了这一点。
git update-index --assume-unchanged
on directory"。--no-assume-unchange
可反转效果:请参见"Is it possible togit add
a file currently protected byassume-unchanged
?"。然而,当你 checkout 另一个分支或者当你
git pull
时,"忽略"状态可能会被重置。git update-index --skip-worktree
;参见:两者之间的区别在"Git - Difference Between '
assume-unchanged
' and 'skip-worktree
'"中解释。rjee0c152#
如果你可以修改
.git/info/exclude
,你可以把同样的规则放在那里,但是那个文件只在你的本地存储库中。u2nhd7ah3#
有三种方法可以告诉GIT忽略哪些文件:
.gitignore
个文件$GIT_DIR/.git/info/exclude
core.excludesfile
设置指向的文件后两点可以解决你的问题。
有关详细信息,请参见gitignore(5)。
eeq64g8w4#
我曾经遇到过类似的情况,所以我添加了我的首选解决方案,但我没有看到提到。
git update-index --assume-unchanged
在这种情况下的问题是,您无法对未跟踪的文件执行此操作。我不能修改我的存储库的.gitignore。
我假设你的意思是你不能将对
.gitignore
的任何更改推送到源文件。如果是这种情况,你可以做的是将未跟踪的文件添加到本地.gitignore
,然后执行git update-index --assume-unchanged .gitignore
,这样你对.gitignore
的更改就不会被推送。现在你忽略了(可能)未跟踪的文件,并且不会影响远程.gitignore
文件。i5desfxk5#
忽略对跟踪文件的本地更改:
git update-index --assume-unchanged my-file.php
取消忽略对跟踪文件的本地更改:
git update-index --no-assume-unchanged my-file.php
来源:
git help update-index
i2byvkas6#
另一种方式:
.gitignore
git update-index --assume-unchanged .gitignore
gz5pxeao7#
如果您只想在存储库中保存一些本地文件,并且子目录位置灵活,您可以将文件放在
tracked_dir1/tracked_dir2/untracked_dir/
中,然后添加一个包含以下内容的tracked_dir1/tracked_dir2/untracked_dir/.gitignore
:*
即
qvk1mo1f8#
您可以使用全局gitignore方法,而不必修改项目www.example.com中的方法https://help.github.com/articles/ignoring-files/#create-a-global-gitignore
v1l68za49#
使用vim或emacs修改
.git/info/exclude
对我来说很好。注意@Desko27注解,但是,如果你想忽略已经被Git跟踪的文件,这种方法就不起作用了。
因此,在跟踪文件之前尽早忽略它。