git clone 总是提示账号权限错误的解决方案

2025-09-10

最近搭了一个 git server,为了节省资源,没有用 gitlab。

系统是 Ubuntu 20,之前用的 18 比较多,没有特别关注区别。

等都装好了,发现一个问题。

我的 git 仓库属主是 git 用户,属组是 git 组,然后我把另一个用户 tester 加入 git 组之后,发现 clone 总是失败。

提示错误如下:

fatal: detected dubious ownership in repository at '/srv/gitdir/testpkg.git'
To add an exception for this directory, call:

        git config --global --add safe.directory /srv/gitdir/testpkg.git

但是如果我用属主 git 来操作,就没有问题。

用 AI 搜了一下解决方案,说是要在客户端机器运行上面提示的命令,但是问题依旧。

搞不明白为啥。

中间搁置了一段时间,然后今天有其他小伙伴也需要用 git,就必须要解决一下了。

最后查到一个方法说是在 git server 可以用下面的命令来测试权限:

sudo -u tester -g git bash -c "cd /srv/gitdir/testpkg.git && git log --oneline -3"

果然错误提示和客户端提示一样,就还是有权限问题。

这时候 AI 给了一个新的解决方案,我试了下确实可行,就是把前面在客户端操作的加入信任目录的命令,在服务端每个用户上执行一次,具体步骤记录如下:

#1、创建 gituser 用户
useradd gituser

#2、创建 gituser 的家目录
sudo mkdir -p /home/gituser
sudo chown gituser:gituser /home/gituser
sudo chmod 755 /home/gituser

#3、设置正确的 shell(如果需要)
sudo usermod -s /bin/bash gituser

#4、把用户加到 git 组
sudo usermod -a -G git gituser

#5、以 gituser 身份配置全局 safe.directory,注意目录最后面不要带/
sudo -u gituser git config --global --add safe.directory /srv/gitdir/testpkg.git

#5.1、或者为所有 git 组用户批量设置
for user in $(getent group git | cut -d: -f4 | tr ',' ' '); do
    sudo -u $user git config --global --add safe.directory /srv/gitdir/testpkg.git 2>/dev/null || true
done

按照上面的一通操作后,果然可以了。

这个方案不好的地方就是,每个 git 工程,都需要额外加一次信任,目前还没找到全局加信任的方法,但是毕竟可以正常用了,就先这样。

这次问题解决的过程,给我的几个启发:

以上,希望对碰到类似问题的你,也能有所帮助。

#Git 3

1
收藏
已读
分享
X