git - 如何在不修改 .git/index 的情况下运行 git status - 例如在 PROMPT_COMMAND 中

标签 git bash command-prompt file-permissions

我有一个使用 git status 显示 git 分支信息的 PROMPT_COMMAND,不幸的是,当调用“git status”时,它似乎正在修改 .git/index 文件。

这并不好,因为如果您与对目标目录具有权限的用户一起运行(例如在共享文件系统上,或者如果您以特权帐户运行) - 它最终会更改该文件的所有权给你的用户,因为 git 似乎正在重新创建 .git/index 文件。

有什么方法可以运行“git status”以防止它修改 .git/index 文件?

最佳答案

如果您的 Git 版本至少为 2.15,请运行 git --no-optional-locks status。参见 commit 27344d6a6c8056664966e11acf674e5da6dd7ee3 ,它添加了这个新选项。

否则,如果您可以在运行 git status 之前确保索引是最新的,git status 将不会再次更新它;但这有点棘手。或者,您可以暂时将索引设置为只读——但这会干扰并行运行的其他 git 命令——或者您可以将索引复制到临时索引并运行 git statusGIT_INDEX_FILE 设置为临时文件的路径名,然后删除临时文件。最后一个很笨拙,但可以与历史 Git 一起使用。

(顺便说一下,我没有从 my own hand-rolled status-constructing bash prompt code 运行 git status ,虽然这不是专门为了这个原因。相反,我运行了一个明确的 git update-index,您可以以牺牲性能为代价省略它,可能基于 $PWD。)

关于git - 如何在不修改 .git/index 的情况下运行 git status - 例如在 PROMPT_COMMAND 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47436939/

相关文章:

Bash:如何检查一些操作是否成功完成?

ruby - 无权访问 Heroku 应用程序

git - 如何使用 curl 删除 GitLab 存储库?

git - SSHD 要求输入我的 key 的密码,但没有密码

git remote 用于获取和推送的不同 Remote

bash - CentOS 中的 PATH 定义在哪里?

linux - 检查进程是否在 Linux 上运行的最佳实践?

service - 使用 sc create 将带有额外参数的 .exe 作为 Windows 服务运行

PowerShell 随机打开关闭浏览器

sql-server - 命令行 : Create SQL Instance With SQL Server Authentication Login Only