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

Git Push无法同步子域名目录变更至远程仓库问题求助

解决子域名目录Git推送后不生效的问题

这个问题我之前帮朋友排查过类似的,大概率是服务器路径配置或者Git部署钩子的问题,咱们一步步来排查:

第一步:确认服务器上的Web根目录对应关系

登录你的服务器,先搞清楚两个关键路径:

  • 主域名www.website.com的Web根目录(比如/var/www/main-site)
  • 子域名english.website.com的Web根目录配置

你需要确认:子域名的根目录是不是确实指向主项目仓库下的english文件夹(比如/var/www/main-site/english)。如果子域名配置的是另一个独立路径(比如/var/www/english-site),那你推送到主仓库的english目录自然不会同步到子域名的实际运行目录,这是最常见的原因。

如果路径配置不对,直接修改Web服务器(Nginx/Apache)的子域名配置文件,把根目录改成主项目下的english目录即可。

第二步:检查Git部署的post-receive钩子

很多人用Git钩子(尤其是post-receive)来实现推送后自动部署到Web目录。如果你的远程仓库配置了这个钩子,需要检查:

  1. 钩子文件是否有执行权限:远程仓库的.git/hooks/post-receive需要设置chmod +x post-receive才能生效。

  2. 钩子内的同步命令是否覆盖了子目录:比如你的钩子命令可能是这样的:

    git --work-tree=/var/www/main-site --git-dir=/var/www/main-site.git checkout -f
    

    这个命令会把整个仓库的内容同步到主域名根目录,包括english子目录——只要子域名根目录指向的是这个english文件夹,那变更应该会同步。但如果钩子没执行(比如权限不够),或者命令里有遗漏,就会导致子目录没更新。

    如果子域名的根目录是独立路径,那可以在钩子末尾加一行同步命令:

    rsync -avz /var/www/main-site/english/ /var/www/english-site/ --delete
    

    这样每次推送主仓库后,都会把english目录的内容同步到子域名的独立根目录。

第三步:排查缓存问题

如果上面两步都没问题,那可能是缓存在搞鬼:

  • 先强制刷新浏览器(Ctrl+F5),排除浏览器本地缓存的问题;
  • 如果是服务器端开启了静态文件缓存(比如Nginx的proxy_cache或者expires配置),可以临时关闭缓存,或者手动清除服务器缓存,或者给静态文件加版本号来规避缓存。

是否需要为每个子域名单独创建仓库?

不是必须的,如果子域名只是主项目的一个子目录,内容和主域名关联性强,完全可以通过调整Web配置和部署钩子来实现同步,不需要单独建仓库。

但如果未来子域名的内容会越来越独立,需要单独维护分支、设置不同的权限,或者不想让子域名的变更影响主域名,那单独创建仓库会更灵活——每个子域名对应一个独立仓库,推送时互不干扰,部署也更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:50:58