2010-03-30 61 views
7

我是Git,GitHub和Heroku的新手。到目前爲止,我很喜歡這個範例,但是來自SVN的背景,在Git的世界裏,對我來說事情似乎有點複雜。我正面臨一個我正在尋找解決方案的問題。Git + GitHub + Heroku

場景:

1.我已經安裝在GitHub上一個新的私人項目。我分叉的私人項目,現在我在我的分支結構如下:

/project 
     /apps 
     /my-apps 
      /my-app-1 
      .... 
      /my-app-2 
      .... 
      /your-apps 
      /your-app-1 
       .... 
      /your-app-2 
       .... 
     /plugins 
     .... 

我可以在任何我想要的文件夾從我的機器犯我的叉子在GitHub上的代碼。稍後,這些將由項目的管理員拉入主存儲庫。

2.對於應用程序文件夾中的每個應用程序,我已經在Heroku上設置了一個應用程序,這是一個Git Repo,當我完成本地機器的用戶故事時,我推送了更改。總之,應用程序文件夾中的每個應用程序都是Heroku上託管的Rails應用程序。

問題:

我要的是,當我把我變成Heroku的,它們可以被提交到GitHub上我的項目叉一樣,所以,它也有最新的代碼所有的時間。

我看到的問題是Heroku上的代碼是Git Repo,而我在GitHub上的文件夾是Repo的一部分。

到目前爲止,我研究的是在Git World中有一些稱爲子模塊的東西,可以用來救援,但是我一直沒能找到一些新手指令。

社區中的某人是否可以友好地分享想法並幫助我確定此問題的解決方案?

回答

9

子模塊背後的想法是,它們都是獨立的git存儲庫,您可以將其包含到主存儲庫中,而不是包含所有包含該子模塊鏈接的文件。

如何使用子模塊

要使用一個子模塊,首先你必須解壓出來的目錄,並通過使用git init創建它作爲自己的Git倉庫。然後,您可以單獨上傳到Github或[您選擇的位置],並將其作爲子模塊使用以下命令:git submodule add [place/to/put/it] git://github.com/you/proj1

分離是最好的

我認爲最好將這些分離出來,作爲自己的Git倉庫,並從每一個推的Heroku。原因?我更有可能(我覺得)你會一次只做一個,並且只爲那個做git commitgit 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沒有模塊來讀取你的想法。

+0

感謝您的回覆瑞恩。正如你所提到的,需要創建子模塊,但是,我想知道每個子模塊是否需要在GitHub上單獨託管,或者它也可以駐留在項目存儲庫中。 – 2010-03-30 11:45:42

+1

分別託管他們將是最好的方式。 – 2010-03-30 12:28:12

+1

基本上,我們不希望單獨託管這些內容,主要原因是版本庫不公開,因此我們不想與所有人分享。另外,在GitHub上託管私人存儲庫需要花費。 – 2010-03-30 12:38:27