You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改SSH服务器上Git仓库的存储路径

如何修改Git/SSH仓库存储路径,让git@git.example.com:repo-name.git指向/srv/git/repo-name.git

方法1:修改git用户的主目录(最简单直接)

SSH默认会以登录用户的主目录作为仓库查找的根路径,直接修改git用户的主目录即可实现路径切换:

  1. 创建目标目录并设置正确权限:
sudo mkdir -p /srv/git
sudo chown git:git /srv/git
  1. 迁移现有仓库到新目录:
sudo mv /home/git/*.git /srv/git/
  1. 修改git用户的主目录:
sudo usermod -d /srv/git git

完成后,git@git.example.com:repo-name.git会自动指向/srv/git/repo-name.git,客户端无需做任何配置修改。

方法2:通过SSH的ForceCommand做路径映射(不修改主目录)

如果不想改动git用户的主目录,可以通过SSH配置拦截Git命令,替换仓库路径:

  1. 创建路径代理脚本/usr/local/bin/git-repo-proxy:
#!/bin/bash
# 提取SSH命令中的仓库名称
REPO=$(echo "$SSH_ORIGINAL_COMMAND" | sed -n "s/.*'\([^']*\)'/\1/p")

if [ -z "$REPO" ]; then
    exec git-shell -c "$SSH_ORIGINAL_COMMAND"
fi

# 构建新的仓库路径
NEW_REPO="/srv/git/$REPO"

if [ -d "$NEW_REPO" ]; then
    # 替换命令中的仓库路径并执行
    MODIFIED_CMD=$(echo "$SSH_ORIGINAL_COMMAND" | sed "s/'$REPO'/'$NEW_REPO'/")
    exec git-shell -c "$MODIFIED_CMD"
else
    echo "Repository '$REPO' not found in /srv/git" >&2
    exit 1
fi
  1. 给脚本添加执行权限:
sudo chmod +x /usr/local/bin/git-repo-proxy
  1. 编辑SSH服务器配置/etc/ssh/sshd_config,添加规则:
Match User git
    ForceCommand /usr/local/bin/git-repo-proxy
    AllowTCPForwarding no
    X11Forwarding no
  1. 重启SSH服务生效:
sudo systemctl restart sshd

方法3:创建符号链接(临时过渡方案)

如果只是临时迁移需求,不想修改用户或SSH配置,可以在原主目录下创建软链接指向新路径:

# 单个仓库链接
ln -s /srv/git/repo-name.git /home/git/repo-name.git

# 批量处理所有仓库
for repo in /srv/git/*.git; do
    ln -s "$repo" /home/git/$(basename "$repo")
done

该方案的缺点是原/home/git目录会保留链接文件,不如前两种方案彻底。

相关配置说明

  • Git本身没有直接控制该存储路径的配置项,仓库路径的解析由SSH登录后的用户环境决定。
  • SSH的ForceCommand是核心配置,用于拦截git用户的所有SSH命令,实现路径映射。
  • 修改用户主目录是利用SSH默认的起始目录特性,让Git自动在新主目录下查找仓库。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:20:14