你Git忽略观看/跟踪特定目录/文件的方式。你只需运行:
git update-index --assume-unchanged <file>
现在你如何撤消它以便再次观看? (我们称之为取消。)
答案 0 :(得分:509)
要设置为假设未更改的撤消/显示目录/文件,请运行:
git update-index --no-assume-unchanged <file>
要获取assume-unchanged
运行此的目录/文件列表:
git ls-files -v|grep '^h'
答案 1 :(得分:83)
如果这是您经常使用的命令 - 您可能也想考虑为它添加别名。添加到您的全球.gitconfig
:
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
将此保存到.gitconfig
后,您可以运行更清洁的命令。
git hide myfile.ext
或
git unhide myfile.ext
这resource非常有帮助
答案 2 :(得分:37)
git update-index函数有几个选项,你可以找到如下键入:
git update-index --help
在这里你会发现各种选项 - 如何处理函数update-index。
[如果您不知道文件名]
git update-index --really-refresh
[如果您知道文件名]
git update-index --no-assume-unchanged <file>
将还原所有已在忽略列表中添加的文件。
git update-index --assume-unchanged <file>
答案 3 :(得分:35)
我认为(嘿)你的意思是--assume-unchanged
,因为我没有看到任何--assume-changed
选项。 --assume-unchanged
的倒数为--no-assume-unchanged
。
答案 4 :(得分:16)
综合@adardesign,@ adswebwork和@AnkitVishwakarma的优秀原创答案,以及@Bdoserror,@ Retsam和@seanf的评论,以及其他文档链接和简洁的别名......
基本命令
reset a file assume-unchanged恢复正常:
git update-index --no-assume-unchanged <file>
假设未更改的list all个文件:
git ls-files -v | grep '^[a-z]' | cut -c3-
要reset all假设未更改的文件恢复正常:
git update-index --really-refresh
<强>快捷方式强>
为了使这些常见任务易于在git中执行,请为您的用户添加/更新以下alias部分.gitconfig
部分(例如* nix或macOS系统上的~/.gitconfig
):
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
unhide-all = update-index --really-refresh
hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-
答案 5 :(得分:15)
如果要撤消所有已应用的文件,假定其状态不变,不仅缓存(git以小写字母标记它们),您可以使用以下命令:
git ls-files -v
grep '^[a-z]'
将打印状态为cut -c 3-
将过滤文件并选择仅假设未更改tr '\012' '\000'
将删除状态并仅留下路径,从第3个字符切换到最后xargs -0 git update-index --no-assume-unchanged
会将行尾字符(\ 012)替换为零字符(\ 000)git update-index --no-assume-unchanged
会将所有以零字符分隔的路径传递给{{1}}以撤消答案 6 :(得分:11)
添加到@adardesign
的答案,如果您要将所有已添加到assume-unchanged
列表的文件一次性重置为no-assume-unchanged
,您可以执行以下操作:
git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true
这将只删除grep的两个字符输出,即"h "
,然后转义文件名中可能存在的任何空格,最后|| true
将阻止命令过早终止,以防某些循环中的文件有错误。
答案 7 :(得分:2)
如果您使用 Git Extensions ,请按照以下步骤操作:
你已经完成了。
答案 8 :(得分:0)
这里没有什么没有涵盖的。但是想加我的2美分。有时,我运行一个构建,它会更改很多文件,然后我想处理某些东西,因此此命令确实对我有很大帮助。
git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`
希望其他人也觉得它有用。
答案 9 :(得分:0)
在Windows中,没有一种解决方案适用于我-似乎使用大写H
而不是h
来表示文件状态,并且grep命令需要一个额外的插入符号,因为^
也表示行首以及否定下一个字符。
Windows解决方案
git ls-files -v | grep '^^H'
列出所有未缓存的文件git ls-files -v | grep '^^H' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
撤消通过update-index --skip-worktree
完成的所有文件的文件跳过git ls-files -v | grep '^^H]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
撤消通过update-index --assume-unchanged
完成的所有文件的文件跳过git ls-files -v | grep '^^H'
再次列出所有未缓存的文件,并检查以上命令是否有效-现在应该不返回任何内容答案 10 :(得分:0)
所以这发生了! 我不小心点击了“假设不变”! 我尝试在Internet上搜索,但找不到任何有效的解决方案! 因此,我在这里到那里尝试了很少的事情,最后我找到了解决方案(最简单的方法),它将使假设不变!
右键单击“您的项目”,然后单击Team > Advanced > No assume Unchanged
。
答案 11 :(得分:-4)