2011-10-09 27 views
16

這是一個常見的情況,必須有一個明智的解決方案,儘管閱讀和豐富的Git體操頁面,我的大腦疼痛,我無法使這項工作...Git,子回購和外部庫的Web開發 - 一勞永逸的最佳戰略?

我正在與WordPress的,但這將適合大多數網站開發方案。我想用git repo來管理網站安裝,並且還可以在各個回購站中管理各種WP插件,jQuery插件和其他代碼位,這些代碼位可以輕鬆地從外部來源進行推送/推送。似乎很簡單,直到你看看細節...

的標準

「子文件夾」標準 爲每個插件的文件夾不應該被綁定到其源回購的根文件夾。許多repos有多個嵌套文件夾,例如「my-repo-name/...」,「dev /」,「test /」,「src /」,其中後面的內容是必需的。這對於保持引用URL乾淨並儘量減少公共垃圾非常重要。

「無Proxys」標準 理想的解決方案不需要額外的中間分支或回購。將更改推送到插件的外部源應該很簡單,不需要多次中間合併/推送。

「真實文件」的標準 理想整個網站外回購實際上應該包含插件subrepos(即沒有‘子模塊’)的文件。我可以被說服從這個雖然了......

「出版」的標準 必須使用rsync和/或混帳push'ing發揮出色,直播服務器

我已經看了這些五種溶液

Git的子模塊進行更改和推/拉但子模塊失敗的「子文件夾」和「真實文件」的標準

讀的Git樹/ subtr夠簡單ee merge解決了「真正的文件」問題,read-tree實際上可以讓你引用一個分支的子文件夾,但是當我這樣做並試圖合併母版上的更改時,Git未能記住它來自子文件夾並將主合併到整個結構中ext庫跟蹤分支......所以在這個標準上失敗了。

Apenwarrs子樹擴展(here) 偉大的「真實文件」的標準,相當簡單的推/拉,直至要執行「子文件夾」的規則。最好的情況是,它似乎需要中間分支,您從遠程跟蹤分支中分離出想要的文件夾,然後將其作爲子樹添加到主分支。我沒有太多的運氣將主控上的更改合併到源回購。我仍然認爲有可能是可能性在這裏...

與外部回購符號鏈接 的最佳解決方案,直至停止GIT下面的符號鏈接。現在,它失敗的「真實文件」和「發佈」的標準

嵌套式回購 帶我看到了一個SO回答:如果你明確git add包含另一個回購和後面的斜線的文件夾,Git爲子模塊它而是跟蹤單個文件。這看起來很有希望,但在「子文件夾」標準上失敗。

下一步是什麼?

我見過有關「稀疏結帳」的提法 - 或者是涉及分支修剪的問題。我希望避免涉及shell腳本的解決方案,或者它非常複雜,以至於每次都需要我重新學習它(很少發生),我對插件進行了更改。它比爲每個插件維護一個單獨的repo並從主CMS安裝來回複製需要更容易。

當然有人有一個簡單的功能方法,使這個常見的開發場景工作?在此先感謝您的幫助...

回答

1

很明顯,你一直在想這個,我只是一個新手在git,但我的第一本能是將.gitignore添加到插件目錄,並讓每個插件都有它是自己的git回購。你可以爲主題做同樣的事情。所以我想這是一個比答案更重要的問題 - 爲什麼這種簡單的方法不行?

+0

謝謝馬哈利。其中一個原因是許多Repos不會將他們的核心文件放在根目錄下,並經常在主分支中添加單元測試和其他文件夾。這導致醜陋的,長期的URL特別是JS庫,以及公共訪問大量不必要的文件。另一個原因是,如果您使用git推送到實時服務器(通過克隆本地回購,然後從本地推送並在服務器上合併),則需要手動推送/合併每個回購。由於現在每個人都在使用GIT,即使是jQuery插件,一個典型的網站主題可能會有10個或更多的回購。 –

1

我不知道這是否會回答你的問題,甚至包括你的具體情況,但我想我會在任何情況下給它一個去。

我們有多個項目,其中許多項目都相互引用,每個項目都在自己的Git存儲庫中。它們也包含在文件夾中的多個級別,例如:

Repos 
    - Utilities 
     - Util repo1 
     - Util repo2 
    - Common 
     - Lib repo1 
     - Lib repo2 
    - Projects 
     - Client1 
      - Git repo1 
      - Git repo2 
     - Client2 repo 
     - Client3 
     ... 

我們有一個問題與手動不得不推/拉/提交各庫,這成爲一場噩夢。

因此,我們編寫了一個小工具程序,能夠一次對多個文件夾執行推,拉,提交,標記,遠程比較和差異Git操作,以及同時構建多個VS解決方案文件。它還將檢查存儲庫的子文件夾。

我們一直在使用它一段時間,它對我們來說工作得很好。您可以從這裏查看:Gitter.7z

打開ReadMe.html文件以查看如何使用它。希望這有助於我,讓我知道。

相關問題