Git 提交失败提示无写入权限与 Linux 下创建文件的默认权限

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

最近给公司部署了 git 服务器(CentOS 6.3),由于之前没有配置 git server 的经验,搞了半天才把配置搞定。这里就不讲配置的问题了。创建了账户、项目并设置 git 权限后,使用 a 账号开始测试。一切正常,没有问题。

第二天上班,给同事建了个账号 b(a,b 账号同在 git 用户组),出现问题了,pull 正常, push 失败,提示 objects 目录下有文件没有写入权限。

果断 ssh 上服务器,把账号 a 和 b 都放到 git 用户组。继续测试,还是报错。没办法,只好一路 cd 到 objects 下,ll,发现有些文件没有对同组用户开启 w 权限。想了想,用“linux 创建文件默认权限”作为关键词 Google 了一下,看了几篇文章,了解了 umask 命令。

下面贴几段网上的讲解:

umask是什么?

当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。

如何计算umask值?

umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录则允许设置执行权限,这样针对目录来说,umask中各个数字最大可以到7。

我们只要记住 umask 是从权限中“拿走”相应的位即可。 如:umask值为022,则默认目录权限为755,默认文件权限为644。 OK,开始设置各个账号的创建文件默认权限:

su root
password......
su a
umask 0002
su root
password......
su b
umask 0002

重新 push ,一切OK~

2013年12月31日补记


上次弄好后又出问题了,登录 a 用户一看,发现 umask 又输出 0022,也就是说,恢复了默认的设置。 原来 umask 命令只是本次登录有效,注销之后就失效了。 解决办法:把

umask 0002

这一行添加到 .bash_profile 文件里去,这样用户每次登录就可以执行了。

转载于:https://my.oschina.net/lujian863/blog/188334

你可能感兴趣的:(Git 提交失败提示无写入权限与 Linux 下创建文件的默认权限)