2010-09-28 38 views
2

我有幾個部署到Heroku的Rails 3應用程序需要共享一些業務邏輯。顯然,雖然Heroku的Bundler支持非常穩固,但它還不能從私人的Github回購中獲取。因此,我正在構建幾個寶石,將它們銷售到每個應用程序中,將它們檢入到git中,然後用我的其他代碼推送它們。我應該如何使用git子模塊來共享Heroku應用程序之間的代碼?

這工作正常,但每次我想改變這些共享寶石中的東西,我必須去每個應用程序,寶石解壓到正確的目錄,git add/git刪除所有已更改的文件,所以開始,這變得有點痛苦。我也可能想要設置不同的業務邏輯分支,並讓不同的應用程序遵循不同的分支,但我不知道如何通過vendoring完成。

它看起來像git子模塊是爲這種情況發明的,但最後一次我嘗試子模塊時,我發現它們非常混亂。我想這就是我需要做的,但Heroku在該鏈接中給出的代碼片段也很混亂。

所以,我的問題:

  1. 是什麼子模塊我想在這裏使用?
  2. 爲了完成我所描述的內容,我需要的最簡單的git工作流程是什麼?

我不是git的初學者,但我也不是很中級,我想從一組簡單的步驟開始,我可以從中學習。我需要從我的供應商/ gems目錄中跟蹤一個本地git存儲庫,定期從存儲庫中獲取更新,並以Heroku/Bundler在我嘗試推送整個目錄時不會出現錯誤的方式執行此操作應用程序到生產。

謝謝!

回答

2

您可能會發現apenwarr是git subtree命令很有幫助。它提供了一個圍繞Git’s subtree merge功能的漂亮包裝。

添加一個新的子樹:

git subtree add --prefix=vendor/gems/shiny remote-or-url-to-shiny-gem branch 

新提交拉入樹:

git subtree pull --prefix=vendor/gems/shiny remote-or-url-to-shiny-gem branch 

你可能還喜歡--squash選項,如果你不想納入歷史。

您還可以使用git的子樹來提取改變的子樹,使他們可以推到樹的源代碼庫本地提交(該分裂子命令)。

0

至於我,git-subtree是不夠的。它需要太多的調整和挖掘,結果有一些惱人的缺陷,並使它看起來像繃帶。 BTW提到的apenwarr’s git subtree是兩年前最後更新的(截至2012年4月...),如果選擇git subtree,那麼我建議使用helmo's fork(或相同)。

我會deifintly推薦使用Git子模塊。當然,它有一些缺陷太多,但其中大多數是在後來的Git版本能更好地處理,你可以添加一些hooksscripts,使其可用的git的新手。另外,它使用得更廣泛。

關於Heroku的,it is now supported。如果你需要私有倉庫,創建一個用戶,並使用其憑證用於此目的而使用這種格式的存儲庫位置: https://username:[email protected]/user/repo.git
更多,爲Ruby應用程序,你可以交替捆紮機我們這樣做:git的選項。

HTH

相關問題