【发布时间】:2020-05-17 10:05:41
【问题描述】:
我不知道我遇到的是错误还是预期的行为,但幸运的是我很快就弄清楚了发生了什么。
我在 git repo 的子目录中对 shell 进行了 cd,并执行了 git rebase -i squash 操作,其中涉及的提交包括创建此目录。
在该操作顺利完成后,shell 处于孤立状态,git status(在 zsh 主题帮助程序 RPROMPT 和运行时都没有)表明我什至不在 git 存储库中。
一旦我运行cd ..,一切都很好,这一切都说得通。在变基操作过程中,Git 拥有rm'd 我所在的目录(在变基的第一步),然后将其放回原处。既然它被放回去了,我也可以跑cd $(pwd)一步去那里。
这是一些令人困惑的行为。虽然,尚不清楚 git 在技术上做错了什么。我的问题是这会是git 中的一个错误,还是应该期望用户知道如何处理这种情况?
另外,更广泛的实际根本问题:为什么允许删除我的 shell 所在的目录,而如果我在已安装的目录上有 shell,则不允许弹出磁盘?这对我来说似乎不一致。
例如:fuser <directory> 显示当前目录使用情况。如果一个程序“在”一个目录,它就是在“使用”它。
【问题讨论】:
-
我必须假设像this answer 声明,在使用时删除某些东西的能力正是它应该工作的方式,这必然会产生与程序仍然可以访问已删除的内容。 (在这种情况下:shell 保留了已删除目录的句柄,因为操作系统允许 git 删除该目录)
标签: linux shell unix directory