gpt4 book ai didi

Git 在更新文件时更改默认的 umask

转载 作者:IT王子 更新时间:2023-10-29 01:19:49 27 4
gpt4 key购买 nike

我对 Git 有疑问。我在 Google 和 StackOverflow 中搜索了解决方案,但没有任何帮助。

问题是每次 git 更新工作目录中的某些文件时(当我 checkout 分支或 merge 分支等时),文件权限都会更改,以便添加“可写组”标志。如果文件可写到组,我的 apache 会显示该文件的“错误 500”。

例子:我有一个文件 index.php。权限是“-rwxr-xr-x”。当前(事件)分支是主分支。这个文件在分支“develop”中被改变了。我执行“git checkout develop”,文件 index.php 获得权限“-rwxrwxr-x”(添加了对组的可写权限)。我的网站停止工作。由于 apache 不允许在 php 文件中使用此标志(我不知道为什么,但我无法更改它)。

每次执行“git checkout develop”时,我还需要执行“chmod g-w index.php”。我不喜欢执行两个命令(有时我忘记执行这个命令,我的网站就无法运行)。

我该怎么做才能解决这个问题?我认为这与umask有关。我做了一些在网上找到的技巧,但没有任何效果。

谢谢。

最佳答案

快速回答是将这个 shell 函数放在您的 ~/.profile 中。解释如下。

git(){(umask 0022; command git "$@")}

A umask是进程的属性。它是从父进程继承的,以后可以从内部更改。更改umask的命令通常也命名为umask。

Git 没有设置其 umask 的配置选项,它在执行后不会更改其 umask。你必须从外部设置 Git 的 umask,让它从父进程(通常是 shell)继承。

嗯,你似乎不喜欢除了 git 之外的任何东西都改变了 umask 的想法。因此,让我们在执行 git 时更改它。

当 shell 执行一行时,它会获取该行的第一个单词并尝试查找具有该名称的函数。仅当不存在时,它才会尝试在 PATH 中找到具有该名称的命令。我在上面编写的函数名为 git,因此现在对 git 的任何直接调用都会执行它,而不是 git 命令。

该函数执行子 shell,更改其 umask 并从子 shell 内部执行 git 命令。 Git 完成工作后,子 shell 也会退出,原始 shell 实例仍将具有原始 umask。

但是,该函数还展示了如何绕过自身。如果你通过 command git 甚至 /usr/bin/git 调用 git,函数将不会被调用。不过,对于任何像样的用途来说,这已经足够了。

关于Git 在更新文件时更改默认的 umask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11574271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com