gpt4 book ai didi

Git 无法解释地更改单个文件的权限

转载 作者:太空狗 更新时间:2023-10-29 13:19:32 25 4
gpt4 key购买 nike

我是唯一参与这个 git 项目的人。每次我在我的本地 Ubuntu 存储库中编辑文件,然后推送到 Bitbucket 并 pull 到我的生产存储库时,git 都会将编辑后的文件更改为 -rwxrwxr-x 775。Apache 不喜欢这样。

本地系统:Ubuntu Linux 上的 git 版本 1.8.1.2

生产系统:CentOS/Red Hat Linux 上的 git 版本 1.7.12

当我将权限固定为 755 时,然后执行

git diff

git diff -p

它什么也没显示。

在我的本地存储库中,权限为 755,文件均归 haws 所有。在我的生产存储库中,所有其他权限都保持在 755,并且包括 contact.php 在内的所有文件都归我的用户名所有。

在本地和生产存储库中,我都按如下方式更改了 core.filemode 以试图阻止这种行为,

core.filemode = false

我在协作项目中遇到过这样的谜团,所以我真的很想了解正在发生的事情。

  1. 如何查看 git 更改此文件权限的原因?
  2. 如何让 git 停止更改它?

我也试图在这里找到解决方案:Prevent Git from changing permissions on pull无济于事。

我的最终解决方案(感谢 VonC 的指导):

  1. 感谢 VonC 的精彩解释,我勇敢地发现每次登录我的服务器时,我的 umask 都会回到 0002。所以我创建了一个用户启动脚本(.bashrc 或在我的case .bash_profile) 在我的 Linux 主机上设置

    掩码 0022

或使用符号表示法(增加一点值(value))

umask u=a,g-w,o-w 

umask u=a,go-w 

(允许用户的所有权限,禁止组和其他人的写权限)

这解决了我的问题。

  1. 我之前将 git config core.sharedRepository 设置为 true,但这不是我的问题,问题解决后我删除了该设置。

最佳答案

如“Wrong file permission when using git pull in a hook”中所述

Git does not store permissions, apart from the executable bit.
So, on checkout, files are created with the default permissions, which depend on your umask.

在您的情况下:umask 0022 应该在 pull 时设置。
(这就是我在您看到的答案中提到的“Prevent Git from changing permissions on pull”)

假设您在目标仓库中有如下配置:

git config core.sharedRepository true

另一个解决方案在“How do I share a Git repository with multiple users on a machine?”中提到,您将确保在其中引入像这样初始化的 repo:

git init --shared=0022

OP Tom Haws在评论中添加:

Do you know why git at my client's production server is able to pull without having file permission changes even when there is no sharedRepository entry in that repository's config?

可能是因为 umask 已经默认设置为 0022,这意味着,默认情况下,git shell 继承了系统的 umask
更改 umask 需要将 core.sharedRepository 设置为 true 以将其考虑在内,而不是考虑 umask父进程。
那,或者因为 repo 是用 --shared=0022 创建的。

要了解如何设置 umask(系统范围或用户范围),请参阅“How to set system wide umask?

要在 git 命令(将继承其值)之前检查 umask,只需键入:

umask

关于Git 无法解释地更改单个文件的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16719458/

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