以下 git 命令(删除所有以 ~ 结尾的文件)使用转义字符
git rm \*~
基本原理是除了 shell 使用的扩展之外,git 使用它自己的文件名扩展。
这是否意味着转义字符是一种抑制 shell 进行的文件名扩展的方法?
不知何故,我无法正确处理这个问题。
- 为什么 git 使用它自己的文件名扩展?是因为 shell 文件名扩展在不同的 shell/OS 中可以以不同的方式工作
- 如果是这样,为什么不在 git 命令的 shell 级别抑制文件名扩展,并允许 git 使用 glob 模式执行它自己的语义
最佳答案
是的,转义字符抑制了通常由 Unix shell 执行的文件名扩展。回答子问题:
git rm
实现了自己的扩展,可能是因为文件可能不存在于 check out 目录中。 (想想你首先rm *~
的情况,然后记住你也想从git
中删除它们。)使用反斜杠转义字符(或将参数用引号引起来)正是这样做的——在 shell 级别抑制文件名扩展。这不能由
git
自动完成,因为git
不控制你的 shell,当它被执行时,扩展已经结束。扩展必须由 shell 本身阻止,或者更现实地说,由最终用户通过 shell 调用git
阻止。
关于git - 在 Git 中以 glob 模式转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20992459/