我是Git,GitHub和Heroku世界的新手.到目前为止,我很享受这个范例,但是来自SVN的背景,在Git世界中对我来说似乎有些复杂.我正面临一个问题,我正在寻找解决方案.
场景:
1.我在GitHub上设置了一个新的私人项目.我分叉私有项目,现在我的分支中有以下结构:
/project /apps /my-apps /my-app-1 .... /my-app-2 .... /your-apps /your-app-1 .... /your-app-2 .... /plugins ....
我可以在我想要的任何文件夹中从我的机器上的GitHub上的Fork中提交代码.稍后,这些将由项目的管理员拉入主存储库.
2.对于apps文件夹中的每个应用程序,我在Heroku上设置了一个应用程序,它本身就是一个Git Repo,当我完成本地计算机上的用户故事时,我会推送我的更改.简而言之,apps文件夹中的每个应用程序都是在Heroku上托管的Rails应用程序.
问题:
我想要的是,当我将我的更改推送到Heroku时,它们也可以在GitHub上提交到我的项目分支中,因此,它也始终具有最新的代码.
我看到的问题是Heroku上的代码是Git Repo,而我在GitHub上的文件夹是Repo的一部分.
到目前为止,我所研究的是Git World中有一些称为Submodule的东西可以拯救,但是,我还没有找到一些新手指令.
社区中的某个人是否可以友好地分享想法并帮助我找出这个问题的解决方案?
子模块背后的想法是,它们都是单独的git存储库,您可以将它们包含在主存储库中,而不是包含所有文件,而是包含指向该子模块的链接.
如何使用子模块
要使用子模块,首先必须提取出目录并使用它将其创建为自己的git存储库git init
.然后你可以将它单独上传到Github或[你选择的地方]并使用它作为子模块使用命令:git submodule add [place/to/put/it] git://github.com/you/proj1
.
分离是最好的
我认为最好将这些分离出来作为他们自己的git存储库并从每个存储库推送到heroku.原因?更有可能(我觉得)你将一次只做一个git commit
并git push heroku master
只为那个做一个.
但是,如果您希望同时部署所有应用程序,则可以使用放置在顶级目录中的Ruby脚本来递归目录树:
Dir["**/*"].select { |dir| File.directory?(dir) }.each do |f| Dir.chdir(dir) do `git push origin master` `git push heroku master` end end
当然,只有在您进行了所有更改后,这才有效.我无法想到一种自动化的方法,因为Ruby <= 1.9没有模块来阅读你的想法.