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

Laravel分离后端与public目录部署虚拟主机时的Git使用方案

嘿,这个场景我之前帮不少Laravel开发者处理过——HostGator的这种目录结构确实有点反常规,但完全不用折腾两个独立仓库或者复杂的子模块,有更优雅的适配方案。

方案1:使用Git Worktree(最推荐)

Git Worktree是专门解决“同一个仓库需要在多个目录下维护”的工具,完美匹配你的需求:

  • 先确保后端目录的Git仓库是干净的(没有未提交的修改),然后在后端仓库根目录执行:
    git worktree add ../public_html/public main
    
    这里的main是你仓库的主分支名,如果你的分支是master就改成对应名称。
  • 执行完后,../public_html/public就会成为这个Git仓库的一个“附属工作树”——你在后端目录修改代码提交后,public目录的内容会自动同步;反之,在public目录做的修改也能被Git追踪,提交后后端仓库的public文件夹也会更新。
  • 后续如果要移除这个工作树,只需要在后端仓库执行:
    git worktree remove ../public_html/public
    
方案2:创建符号链接(简单直接)

如果觉得Worktree有点陌生,符号链接是更直观的选择(HostGator虚拟主机默认允许符号链接):

  1. 先把public_html/public里的现有内容备份好,然后删除这个目录:
    rm -rf ../public_html/public
    
  2. 在后端仓库根目录,创建一个指向自身public文件夹的符号链接到public_html目录下:
    ln -s $(pwd)/public ../public_html/public
    
  3. 这样服务器访问的public_html/public其实是指向你后端目录里的public文件夹,Git可以直接追踪后端的public目录,完全不影响网站运行。
  4. 小提醒:如果遇到403权限错误,检查一下目录权限(确保后端public文件夹权限是755),或者联系HostGator客服确认服务器允许跟随符号链接。
方案3:Git子模块(不推荐,除非特殊需求)

子模块适合完全独立的代码库,但你的public是Laravel项目的核心部分,用子模块反而会增加维护复杂度:

  • 初始化子模块的命令是:
    git submodule add ../public_html/public public
    
  • 但后续你需要分别提交后端仓库和子模块的修改,拉取代码时还要额外执行git submodule update --init,操作繁琐且容易出现版本同步问题,除非你真的需要把public作为独立仓库维护,否则不建议用这个。
为什么不建议两个独立仓库?

如果把后端和public分成两个仓库,会导致版本同步非常麻烦——比如你更新了Laravel的路由配置,需要同时在两个仓库提交,时间久了很容易出现代码版本不一致的问题,完全没必要给自己添堵。

总结下来,优先选Git Worktree,其次是符号链接,这两个方案都能让你用同一个Git仓库管理整个Laravel项目,完美适配HostGator的目录结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:32:23