当我 clone/pull git 项目文件获得 -rw-r--r-- 权限时。如何避免 git 项目中计算机上的每个人只读访问 r--?

When I clone/pull git project files get -rw-r--r-- permission. How to avoid read-only access r-- to everyone on the machine in git projects?

我查看了克隆的 git 项目,发现文件具有 -rw-r--r-- 权限。这意味着系统上的任何用户都可以读取项目文件。当然,这取决于文件夹权限,但在某些系统上 nobody 并且所有其他用户都可以读取项目。

如果有解决此问题的任何建议?为什么会这样?

例如这个有效:

sudo -u nobody cat /projects/project1/file1

它没有损坏,这里没有什么可以修复的:这就是权限在 Unix/Linux 系统上的工作方式。

程序,包括 Git,通常会创建模式为 0666 (rw-rw-rw-) 的新文件,除非它们是可执行的;如果它们 意味着是可执行的,它们将创建模式为 0777 (rwxrwxrwx) 的新文件。对于目录,进程必须可执行才能 chdir 进入它们或以其他方式在其中操作,程序调用 mkdir 系统调用,权限为 0777 (rwxrwxrwx).

实际上不会使用这些权限创建文件除非当前进程将其umask设置为0。 umask per-process 并以与当前工作目录相同的方式继承,是操作系统在实际创建新文件或目录。典型设置中典型用户的默认 umask 是 022:这会带走 ----w--w- 权限,因此新创建的目录最终具有模式 0755 (rwxr-xr-x) 和新创建的 non-executable 个文件的模式为 0644 (rw-r--r--).

将 umask 设置为 077 会带走 ---rwxrwx,这样新创建的目录的模式为 0700rwx------ 并且新创建的 non-executable 文件具有模式 0600rw-------。新创建的可执行文件具有模式 0700rwx------,因为要求创建它们的进程提供了 0777 作为模式,并且 0777~077 屏蔽是 0700.

Git 在 Unix 和 Unix-like 系统上使用这些相同的约定。这不是 Git 的事情,而是 OS 的事情。请注意,这个简单的 easily-understood 方案不适用于访问控制列表 (ACL) 等复杂的事物。有人以此论证复杂的东西不应该存在(和there is something to that argument)。首先,“其他”访问文件的想法也许应该被删除,因为“组”——如果可以根据需要任意创建组——将涵盖此类用途。