我已经运行了以下命令来忽略监视/跟踪特定的目录/文件:
git update-index --assume-unchanged <file>
我如何撤销这个,以便<file>再次被监视/跟踪?
<file>
我假设(嘿)你的意思是--assume-unchanged,因为我没有看到任何--assume-changed选项。--assume-unchanged的倒数是--no-assume-unchanged。
--assume-unchanged
--assume-changed
--no-assume-unchanged
# EYZ0:
git update-index --no-assume-unchanged <file>
# EYZ1:
git ls-files -v|grep '^h'
添加到@adardesign的答案中,如果你想一次性将所有已经添加到assume-unchanged列表中的文件重置为no-assume-unchanged,你可以执行以下操作:
@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将防止命令在循环中的某些文件出现错误时过早终止。
"h "
|| true
Git update-index函数有几个选项,你可以输入如下:
git update-index --help
在这里你会发现各种选项-如何处理函数update-index。
[如果你不知道文件名]
git update-index --really-refresh
[如果你知道文件名]
将恢复所有已添加到忽略列表中的文件。
如果这是一个您经常使用的命令,您可能也需要考虑为它设置一个别名。添加到全局.gitconfig:
.gitconfig
[alias] hide = update-index --assume-unchanged unhide = update-index --no-assume-unchanged
如何设置别名(如果你还不知道):
git config --configLocation alias.aliasName 'command --options'
例子:
git config --global alias.hide 'update-index --assume-unchanged' git config... etc
保存到.gitconfig后,可以运行一个cleaner命令。
git hide myfile.ext
或
git unhide myfile.ext
这个git文档非常有用。
根据注释,这也是一个有用的别名,可以发现哪些文件当前被隐藏:
[alias] hidden = ! git ls-files -v | grep '^h' | cut -c3-
如果你想撤销应用的所有文件,假设没有任何状态,而不仅仅是缓存(git用小写字符标记它们),你可以使用以下命令:
git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
git ls-files -v
grep '^[a-z]'
cut -c 3-
tr '\012' '\000'
xargs -0 git update-index --no-assume-unchanged
git update-index --no-assume-unchanged
如果你正在使用Git扩展,那么按照以下步骤:
你完成了。
为了综合来自@adardesign, @adswebwork和@AnkitVishwakarma的优秀原始答案,以及来自@Bdoserror, @Retsam, @seanf和@torek的评论,以及额外的文档链接和简洁的别名……
基本命令
重置文件,即assume-unchanged恢复正常:
对假设不变的列出所有文件:
git ls-files -v | grep '^[a-z]' | cut -c3-
重置所有假设未更改的文件恢复正常:
git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
这个已经在其他地方列出的命令似乎不再重置所有假设不变的文件(我相信它曾经和之前列出它作为一个解决方案):
快捷键
为了让这些常见的任务更容易在git中执行,为您的用户添加/更新以下别名部分到.gitconfig(例如*nix或macOS系统上的~/.gitconfig):
~/.gitconfig
[alias] hide = update-index --assume-unchanged unhide = update-index --no-assume-unchanged unhide-all = ! git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git unhide -- hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-
这里没有不包括的。但我想补充我的意见。有时,我运行一个构建,它改变了很多文件,然后我想做一些事情,所以这个命令真的帮助了我很多。
希望其他人也能觉得它有用。
在Windows中没有一个解决方案对我有效-它似乎使用大写H而不是h作为文件状态,grep命令需要一个额外的插入号,因为^也表示行开始以及否定下一个字符。
H
h
^
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
右键点击“Your project”;然后# EYZ0。
.