gpt4 book ai didi

git - 让 git push 尊重权限?

转载 作者:IT王子 更新时间:2023-10-29 00:33:28 31 4
gpt4 key购买 nike

我们使用托管在远程位置并共享的 git 存储库。我们希望 repo 是用户和组可读和可写的,但对其他人没有任何权限。远程仓库由不同的用户(比如 rUser)拥有。我已经在本地仓库和远程仓库中将 core.sharedRepository 设置为 0660。另外,我的 umask 是 0027。因此,每当我创建一个新文件时,它都没有其他文件的权限。

尽管如此,出于某种原因,每当我将更改推送到远程仓库时,它都会在 repo.git/objects/ 目录中创建一些具有权限 -r 的新对象--r--r--。更奇怪的是,它使我(而不是远程用户)成为目录/文件的所有者。知道发生了什么事吗?

我试图通过在 stackoverflow 上查看几个看似相关的问题来找到答案,但找不到任何答案。

最佳答案

注意:我假设您正在使用基于 SSH 的访问机制,每个用户都以自己的用户身份登录服务器(即,您没有多个用户登录到一个帐户来访问存储库)。如果这个假设不成立,那么以下答案可能不会完全有用。


您个人存储库的 core.sharedrepository 设置和您用来访问它的 umask 与远程存储库上使用的所有权和权限无关。

在远程存储库中将 core.sharedrepository 设置为 0660 是获得您想要的内容的正确方法。远程访问用户的 umask 也无关紧要,因为 Git 会在看到 core.sharedrepository0xxx 值时覆盖掩码.您确实需要确保所有文件和目录都由您的公共(public)组拥有,并且权限正确(所有目录都为 2770(或者只是 770 BSD-ish 系统);440 对于 objects/??/objects/pack/ 下的文件;660用于其他文件)。

创建文件的用户拥有新文件是正常的。在非 BSD 系统上,您需要目录上的 setgid 位(2000 位)以使新条目继承其父目录的组所有者。 user-owner 很少被继承(FreeBSD 可以配置为使用 setuid 位来完成它,但这在正常配置中不使用)。因此,所有文件和目录都应该有相同的、共同的、组所有者,但是每次写入存储库(例如推送)都会留下一些文件和/或目录,这些文件和/或目录由写入用户拥有1(即不要求任何一个用户(您的 rUser?)是所有文件和目录的用户所有者;任何需要访问存储库的用户都应该是普通组)。

<子>1每个用户显然都会拥有他们创建的任何文件/目录,但他们也会拥有他们修改的大部分文件,因为 Git 使用“原子重写”(它将新内容写入同一目录中的新的单独文件,然后在原始文件之上重命名它)。

Git 覆盖新文件的 umask 的方式可能存在错误。究竟哪些文件获得的权限太宽?您在远程端访问存储库的 Git 版本是什么?您在远程端运行什么操作系统?

我无法使用 Git 1.7.4.1 在我的 Unixy 机器上使用两个用户和一个公共(public)组重现此问题。

您可以尝试稍微简化一下场景。尝试直接从服务器本身推送到远程存储库(即制作本地克隆并推送到一次性分支)。与在中间进行某种传输相比,进行仅本地访问可以更容易地检查您的假设(umask;uid;gids;用户和组所有权,以及文件和目录在推送之前和之后的权限) (Git 自己的基于 SSH 的传输,或者可能无法完全保真地映射 ID 和权限的网络文件系统)。

关于git - 让 git push 尊重权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5264968/

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