You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

配置GitLab SSH上传至自定义目录及Apache时推送失败求助

解决GitLab SSH推送提示“项目找不到”的问题

看起来你遇到的问题有点特殊——拉取正常但推送失败,而且已经排除了常见的远程地址和变基问题。结合你提供的配置,我觉得可以从这几个方向逐一排查:

1. 检查git用户的home目录配置

你修改了user['home'] = "/path/repositories/repositories",这很可能是核心问题。GitLab的git用户默认home目录是/var/opt/gitlab,这个目录下存放着GitLab Shell的配置文件、.ssh/authorized_keys(由GitLab自动维护)以及其他关键组件的依赖文件。如果把home改成仓库目录,GitLab Shell在处理SSH推送请求时,可能无法加载必要的配置来识别项目路径。

解决方案

  • 暂时改回默认值:user['home'] = "/var/opt/gitlab"
  • 执行以下命令让配置生效:
    sudo gitlab-ctl reconfigure
    sudo gitlab-ctl restart
    
  • 再次尝试推送,如果成功了,再考虑是否真的需要修改git用户的home目录(如果需要,要确保新目录下包含原home目录的所有关键文件,比如.sshgitlab-shell文件夹等)

2. 验证Git数据目录的权限与配置

你配置了两个git数据目录,要确保这些目录的权限完全正确,GitLab才能正常读写:

sudo chown -R git:git /path/repositories /mnt/nfs-01/git-data
sudo chmod -R 700 /path/repositories /mnt/nfs-01/git-data

同时,执行sudo gitlab-rake gitlab:check来检查GitLab的整体状态,特别是仓库目录的权限和可用性,这个命令会输出详细的错误提示。

3. 检查GitLab Shell的连接状态

GitLab的SSH推送依赖GitLab Shell和GitLab Rails API的通信,你可以直接测试这个连接:

sudo -u git /opt/gitlab/embedded/service/gitlab-shell/bin/check

如果输出中有连接失败的提示,比如无法访问GitLab API,那就要检查gitlab-shell/config.yml里的gitlab_url配置是否正确(应该指向http://127.0.0.1:8181,因为你的workhorse监听这个地址)。

4. 确认SSH授权文件的正确性

确保git用户的.ssh/authorized_keys文件是由GitLab自动生成的,没有手动修改过:

  • 文件权限必须是600.ssh目录权限是700
  • 所有者和组都是git:git
    可以用以下命令修复:
sudo chown git:git /var/opt/gitlab/.ssh /var/opt/gitlab/.ssh/authorized_keys
sudo chmod 700 /var/opt/gitlab/.ssh
sudo chmod 600 /var/opt/gitlab/.ssh/authorized_keys

最后一步:重启所有服务

不管修改了哪个配置,都要执行以下命令让配置生效:

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

建议先从第一个方向开始排查,因为修改git用户home目录是比较容易引发这类路径识别问题的操作。

内容的提问来源于stack exchange,提问作者CastleNtheSky

火山引擎 最新活动