Git + GitHub + Heroku

7
我是一名新手,对Git、GitHub和Heroku这些技术还不熟悉。到目前为止,我很喜欢这种范式,但由于我的背景是SVN,所以在Git的世界里,有些事情似乎有点复杂。我遇到了一个问题,正在寻找解决方案。 场景: 1. 我在GitHub上设置了一个新的私有项目。我fork了这个私有项目,现在我的分支中有以下结构:
    /project
      /apps
        /my-apps
          /my-app-1
            ....
          /my-app-2
            ....
          /your-apps
            /your-app-1
              ....
            /your-app-2
              ....
      /plugins
         ....

我可以在GitHub上的任何文件夹中从我的计算机提交代码到我的Fork。稍后,项目管理员会将这些代码拉取到主存储库中。
2. 对于应用程序文件夹中的每个单独应用程序,我已经在Heroku上设置了一个应用程序,它本身就是一个Git Repo,在本地完成用户故事后,我将更改推送到该应用程序中。简而言之,应用程序文件夹中的每个应用程序都是托管在Heroku上的Rails应用程序。
问题:
我希望当我将更改推送到Heroku时,它们也能够提交到我的GitHub项目Fork中,以便它始终具有最新的代码。
我看到的问题是,Heroku上的代码是一个Git Repo,而我在GitHub上的文件夹则是Repo的一部分。
到目前为止,我所研究的是Git世界中的子模块,这可以拯救我,但我没有找到一些新手说明。
社区中是否有人能够友善地分享想法并帮助我解决这个问题?
1个回答

9
子模块的理念是它们都是单独的 git 存储库,您可以将其包含到主存储库中,而不是包含所有文件,而是包含指向该子模块的链接。
如何使用子模块:要使用子模块,首先必须提取出目录并使用 "git init" 将其创建为自己的 git 存储库。然后,您可以将其单独上传到 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没有模块可以读取您的思维。


感谢您的回复,Ryan。正如您所提到的,需要创建子模块,但我想知道每个子模块是否需要单独托管在GitHub上,或者它也可以驻留在项目存储库中。 - Haseeb Khan
1
我认为分别托管它们是最好的方式。 - Ryan Bigg
1
基本上,我们不想将它们分开托管,主要原因是这些存储库不是公共的,因此我们不想与所有人分享。此外,在 GitHub 上托管私有存储库需要花费金钱。 - Haseeb Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接