使Git信息库全局可写

问题描述

| 我们有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使新文件可全局写入?     

解决方法

        我们只是遇到了同样的问题。除了跑步之外,这是我们的解决方法
git repo-config core.sharedRepository true
。 注意:这是在Ubuntu Linux服务器上-您的操作系统上可能需要不同的命令,但是方法应该大致相似。请注意,其中许多命令将需要以root用户或在ѭ5下运行。 步骤1.创建一个新的共享组 例如,开发人员。将您的开发人员添加到其中。
groupadd developers
usermod -aG developers <username>
步骤2.更改现有存储库的组所有权
chgrp -R developers /path/to/repo
还使文件可组写入:
chmod -R g+w /path/to/repo
步骤3.确保在创建新目录时将组设置为新组名 在某些* nix操作系统(例如FreeBSD,OS X)中,新创建的文件组是从父目录继承的。在其他操作系统(例如Ubuntu)上,则由创建过程的组确定。在后一种情况下,您可以通过在父目录上设置setgid标志来覆盖该行为。所以一种方法来确保例如创建的新目录
git pull
和他们的父母有相同的组,以便定期运行这样的内容:
find /path/to/repo -type d -exec chmod g+s {} \\;
(即,在目录类型/ path / to / repo下找到所有文件,并在它们上运行chmod g + s来设置setgid标志。) 您可能采用的另一种方法是使开发人员成为所有开发人员的主要登录组:
usermod -g developers <username>
(请注意,这可能导致用户不再是其先前的主登录组的成员,该组通常与用户名具有相同的名称。使用
usermod -aG old_group usernanme
恢复该成员。) 使用“ 13”表示当用户创建新文件时,默认情况下,它们将由user:username,group:developers拥有。但是,通常会创建新文件,以便它们只能由用户写入,而不能由组写入。 (即,如果您运行
touch foo; ls -l foo
,您会看到权限掩码为
-rw-r--r--
。)要使您创建的新文件默认为可组写入,请在
.profile
.bash_profile
文件的末尾添加
umask 0002
echo umask 0002 >> ~/.profile
!希望这可以帮助。我确定此过程并不完美,而且绝对不是万能的,但希望它能为您提供一些指导。我已将其设置为社区Wiki,以便其他人可以添加到它。     ,        这是一个丑陋的解决方案,但似乎可行。它基于接收后挂钩,该挂钩用于在每次推送到存储库后为存储库中的所有文件设置权限。
mkdir sharedrepo
cd sharedrepo
git init --bare
echo \"chmod -f -R a+rw .\" >> hooks/post-receive
chmod a+x hooks/post-receive
cd ..
chmod -R a+rw sharedrepo
    ,        将所有开发人员归为一组(例如
developers
),然后运行
chgrp -R developers myrepo-on-the-server/
。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...