如何将Git仓库二级子目录部署/推送到Heroku?
推送二级子目录到Heroku的解决方法
首先,你的核心问题是shell在解析路径时把reactnodejsapp/backend误识别成了单个目录名,尤其是在嵌套git subtree split命令的时候。下面给你两种可靠的解决办法:
方法一:直接使用git subtree push(推荐)
你之前尝试的git subtree push --prefix reactnodejsapp/backend heroku master其实是正确的语法,但可能是因为你在某些shell环境(比如Windows的CMD)里路径解析出了问题。试试下面的操作:
- 如果用的是Git Bash或者类Unix终端(Mac/Linux),直接运行:
git subtree push --prefix reactnodejsapp/backend heroku master - 如果是Windows CMD,可以把路径用双引号括起来:
git subtree push --prefix "reactnodejsapp/backend" heroku master
这个命令会直接把reactnodejsapp/backend目录作为根目录推送到Heroku的master分支,不需要转义斜杠,正斜杠是Git识别的标准路径分隔符。
方法二:先拆分出临时分支再推送(更稳妥,避免shell解析问题)
如果第一种方法还是报错,你可以拆分出一个专门的分支,再把这个分支推送到Heroku,步骤如下:
- 先把
reactnodejsapp/backend目录的内容拆分到一个临时分支(比如叫backend-branch):git subtree split --prefix reactnodejsapp/backend -b backend-branch - 把这个临时分支推送到Heroku的master分支:
git push heroku backend-branch:master --force - (可选)如果不需要这个临时分支了,可以删除它:
git branch -D backend-branch
这种方法把拆分和推送分开,避免了嵌套命令时的shell解析错误,成功率更高。
为什么之前的命令报错?
你之前用的嵌套命令git push heroku 'git subtree split --prefix reactnodejsapp/backend branch':master --force有两个问题:
- 引号内的
branch是多余的,git subtree split不需要这个参数,正确的拆分命令是git subtree split --prefix reactnodejsapp/backend -b <分支名> - 在某些shell里,单引号的解析会导致路径被错误拼接,分开操作就不会有这个问题。
内容的提问来源于stack exchange,提问作者SilvenLEAF
相关产品推荐
相关产品推荐

