Wei*_*Shi 8 filesystems git permissions
我们有3人使用共享的Git仓库.我们没有sudo权限来创建/更改组.由于机器是安全的,我们被要求使Git全局可写(chmod +R o+rw *
).但是我们不时会收到此错误.
error: insufficient permission for adding an object to repository database .git/ objects
这是随机发生的.当某人推送他的代码时,我不会收到此错误.当另一个人推送他的代码时,我再次收到此错误.
我已经完成了git repo-config core.sharedRepository true
,但似乎只适用于groups
.如何设置Git使新文件全局可写?
Sim*_*ker 13
我们刚遇到同样的问题.除了跑步之外,这是我们解决它的方式
git repo-config core.sharedRepository true
.
注意:这是在Ubuntu Linux服务器上 - 您可能需要在操作系统上使用不同的命令,但方法应该大致相似.请注意,其中许多命令都需要以root用户身份运行sudo
.
步骤1.创建一个新的共享组
例如,开发人员.将开发人员添加到其中.
groupadd developers
usermod -aG developers <username>
Run Code Online (Sandbox Code Playgroud)
步骤2.更改现有存储库的组所有权
chgrp -R developers /path/to/repo
Run Code Online (Sandbox Code Playgroud)
同时使文件可写入组:
chmod -R g+w /path/to/repo
Run Code Online (Sandbox Code Playgroud)
步骤3.确保在将组设置为新组名的情况下创建新目录
在某些*nix OS(例如FreeBSD,OS X)中,新创建的文件组是从父目录继承的.在其他操作系统(例如Ubuntu)上,它由创建过程的组确定.在后一种情况下,您可以通过在父目录上设置setgid标志来覆盖该行为.因此,确保由例如git pull
与其父组件具有相同组的新目录的一种方法是定期运行如下:
find /path/to/repo -type d -exec chmod g+s {} \;
Run Code Online (Sandbox Code Playgroud)
(即找到类型目录的/ path/to/repo下的所有文件,并在它们上运行chmod g + s来设置setgid标志.)
您可以采用的另一种方法是让开发人员成为所有开发人员的主要登录组:
usermod -g developers <username>
Run Code Online (Sandbox Code Playgroud)
(请注意,这可能导致用户不再是其先前主登录组的成员,通常是与用户名同名的组.usermod -aG old_group usernanme
用于恢复该成员资格.)
使用usermod -g developers
意味着当用户创建新文件时,它们将默认由用户拥有:username,group:developers.但是,通常会创建新文件,以便它们只能是用户可写的,而不是组可写的.(例如,如果您运行,touch foo; ls -l foo
您将看到权限掩码为-rw-r--r--
.)要使您创建的新文件默认为可写组,请添加umask 0002
到您.profile
或.bash_profile
文件的末尾.
echo umask 0002 >> ~/.profile
Run Code Online (Sandbox Code Playgroud)
唷!希望这可以帮助.我确信这个过程并不完美,它绝对不是一刀切,但希望它会给你一些指示.我把它变成了一个社区维基,以便其他人可以添加它.