在多用户情况下,如果需要一个用户能够操作另一个用户的 Git 仓库,可以通过以下步骤设置适当的权限和用户组。以下方法假定你有权限更改文件系统的所有权和权限设置。


1. 将用户添加到同一用户组

将涉及的两个用户加入同一用户组,并确保 Git 仓库的文件和目录属于这个组。

添加用户到组:

假设组名为 gitgroup,用户为 user1user2

sudo groupadd gitgroup # 如果组还不存在
sudo gpasswd -a user1 gitgroup
sudo gpasswd -a user2 gitgroup

更改 Git 仓库的组归属:

进入仓库目录,修改组:

sudo chown -R :gitgroup /path/to/repo

设置组权限:

确保目录和文件对组可写:

sudo chmod -R g+rw /path/to/repo

2. 强制新文件继承组权限

为仓库目录设置组权限继承,使新创建的文件自动继承组归属和权限。

设置组 ID 位 (SGID):

sudo chmod -R g+s /path/to/repo

验证 SGID 设置:

新创建的文件或目录应该自动继承 gitgroup 组。


3. 配置 Git 的共享设置

Git 提供了一个选项,可以将仓库设置为共享模式。

设置 Git 仓库为共享模式:

git config core.sharedRepository group

这将确保 Git 操作创建的文件和目录都对组成员可写。

如果仓库已存在,批量修复现有文件的权限:

sudo chown -R :gitgroup .git
sudo chmod -R g+rwX .git

4. 检查和修复 umask 设置

确保用户的 umask 设置不会限制组权限。

检查当前 umask:

umask

默认情况下,umask 通常是 002022。为了允许组写权限,建议设置为 002

临时设置 umask:

umask 002

持久化 umask 设置:

将以下行添加到用户的 ~/.bashrc~/.zshrc 文件中:

umask 002

通过以上设置,两个用户应该可以在共享的 Git 仓库上协同工作。