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

Git新手求助:SSH主机与虚拟机Git仓库同步异常问题

Git推送后主机工作目录未更新的解决方法

问题原因

你在主机创建的是非裸仓库(git init默认生成带工作目录的仓库),Git出于避免冲突的设计,不会自动将推送的提交同步到非裸仓库的工作目录中。而git pull是主动拉取合并到本地工作目录,因此能正常同步。

解决方案

方案1:将主机仓库改为裸仓库(推荐,符合Git远程仓库的标准用法)

  • 先备份主机/z/Project/MYFIRSTPROJECT下的所有文件(防止数据丢失)
  • 删除原仓库,重新创建裸仓库:
    rm -rf /z/Project/MYFIRSTPROJECT
    mkdir /z/Project/MYFIRSTPROJECT.git
    cd /z/Project/MYFIRSTPROJECT.git
    git init --bare
    
  • 将备份的文件导入并推送到裸仓库:
    cd /path/to/your/backup/MYFIRSTPROJECT
    git init
    git add .
    git commit -m "initial commit"
    git push git+ssh://admin@192.168.1.1/z/Project/MYFIRSTPROJECT.git master
    
  • 虚拟机侧重新克隆新的裸仓库:
    git clone git+ssh://admin@192.168.1.1/z/Project/MYFIRSTPROJECT.git
    

后续虚拟机推送后,若主机需要查看最新内容,可在任意目录克隆该裸仓库,或在本地仓库执行git fetch获取更新。

方案2:配置主机仓库的钩子自动更新工作目录(适合需主机工作目录实时同步的场景,有风险)

  • 进入主机仓库的钩子目录:
    cd /z/Project/MYFIRSTPROJECT/.git/hooks
    
  • 创建post-receive钩子文件并写入内容:
    cat > post-receive << EOF
    #!/bin/sh
    cd /z/Project/MYFIRSTPROJECT || exit
    git checkout -f
    EOF
    
  • 给钩子文件添加执行权限:
    chmod +x post-receive
    

注意:此方法会直接覆盖主机工作目录的未提交修改,仅适用于主机工作目录不手动修改、仅作为同步展示的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:20:56