我有一个已经在Github上的多模块应用程序。它由两个模块组成,其中一个是Android应用程序,另一个是基于Rails的Web应用程序。所以我的项目的目录结构是以下形式:
ProjectRoot
|
+-- web
|
+-- android
|
+-- .git
因此我不能简单地cd
进入ProjectRoot并将我的应用推送到Heroku,因为Rails应用的根文件夹是ProjectRoot/web
。有没有办法将web
文件夹推送到Heroku?如果我将web转换为git子模块,那么应该很容易实现这一点,但是我在Git上只有5个私有回购,而我更喜欢只为我的整个应用程序使用1个回购。
答案 0 :(得分:58)
您可以使用git subtree push
。它将以root身份生成一个新的提交树,并将其推送。
git subtree push --prefix web heroku master
完整文档为here。
答案 1 :(得分:11)
git subtree
命令(内置,现在)是一种很好的方法。如果你想推动一个分支的子树成为你的主人,你可以使用类似的东西:
git push --force heroku `git subtree split --prefix web HEAD`:master
答案 2 :(得分:4)
您也可以使用git branches而不是子文件夹。如果你有git 1.7.2或更新版本,你可以简单地git checkout --orphan android
创建一个与主分支断开的分支(假设这里是web文件夹)。签出孤立分支后,运行git rm -rf .
删除现有文件,然后再将特定于android的文件复制到现在空的根目录。
如果要为每个模块使用单独的文件夹,可以将存储库克隆两次并使用此结构:
ProjectRoot
├── android
│ └── .git
└── web
└── .git