2012-08-17 25 views
0

我將Drupal作爲我的第一個問題的例子。我們有一個帶有自定義主題和許多下載模塊的drupal實例。我們有一臺服務器用作源代碼回購。 drupal的dev實例工作的當前工作流然後將更改遷移到測試。一旦客戶對其進行測試並將其變更爲生產。 - 我應該將整個drupal目錄放在git中嗎?或主題+插件?或只是主題? 放置整個實例的一個優點是我可以輕鬆地克隆prod上的更改,它看起來與開發和測試完全相同。在git(或任何其他版本控制系統)中保存什麼?

第二個問題是當我們對產品的核心代碼進行本地定製時(以DSpace爲例)。我們獲得版本1.6並進行本地更改並將它們保存在我們的回購中。然後,當他們發佈1.7版本時,我必須得到它併合並我的本地更改。我如何獲得1.7?我可以進入分支嗎?

這些情況下的最佳做法是什麼。

謝謝。

PS - 我知道git忽略以及如何在技術上做到這一點。我正在尋找的是有關最佳實踐的建議。

回答

2

按重要性排序:

  1. 把一切都變成Git的這是必要的建設項目(即包括其構建過程本身並不下載所有的依賴)
  2. 把一切都變成GIT中在開發人員機器上運行該項目
  3. 所有生成的文件(通常用於發現突發性錯誤 - 又名「但我沒有改變任何東西!」)。這些都很好,但可以是一個滋擾,因爲他們經常改變。
  4. 所有的依賴關係(所以你可以很容易地重新創建一箇舊版本)

我通常不把產版到Git的方法;相反,我有一個腳本,它可以在項目外創建一個生產站點,並且還有一個上傳腳本來部署該站點。這樣,我可以給新的生產版本一個本地運行。上傳腳本有一個「備份舊文件」的步驟,所以我可以在幾分鐘內恢復舊的生產站點(當然,除非有一些錯誤已經損壞了數據庫)。

[編輯]很多人不同意點#3和#4。

首先,(如我上面已經說過的),這是一個有序列表。所以前兩點比其他要重要得多。

這就是說,它仍然對版本生成的文件有很大的意義。常見的情況是IDE項目設置和代碼生成器的輸出。

爲什麼要重新創建它們時才進行版本化?有幾個原因:

  1. 硬盤空間很便宜。如果這能幫助你在一個小時內找到一個bug,那就等於大約100美元,這大約是2TB的磁盤空間。
  2. IDE項目文件包含編譯器設置和其他非常重要的配置。如果你並不總是在版本控制下使用它們,那麼你最終會遇到這種情況:這些文件將位於你的DVCS的忽略列表中。你會發現一個問題(比如應該激活的重要警告)。您激活警告。 您忘記將更改的文件添加到版本控制。

    或者:你是團隊的一員。一個月後,團隊中的每個人都使用不同的選項來構建他們的項目。構建中斷是因爲某些東西在您的IDE中被配置爲警告,但對其他人來說卻是錯誤的。

  3. 某些工具生成的代碼肯定不應該版本化?版本代碼生成器的配置文件不夠嗎?

    也許吧。問題再次出現:你會不會在這段代碼中找到一個錯誤?即使不是這樣:當文件處於版本控制之下時,將很容易看出配置選項的變化意味着什麼。您只需更改選項,運行代碼生成器並讓版本工具向您顯示已更改的內容。當然,你可以手動做類似的事情,但爲什麼會浪費這麼多的努力來獲得免費的東西?

  4. 最重要的是,它會導致「虛假合併衝突」。許多人認爲這是一個問題,但事實並非如此。實際上,您會希望看到這些問題,因爲這意味着您的構建不穩定:

    1. 您的VCS表示文件在應該不變時發生了更改;這不是一個錯誤,這是一個福音。如果沒有版本控制,無論如何都會發生這種變化,但您不會注意到它。最後一次無知是什麼時候比知識更好?
    2. 您一次又一次地合併一個文件中的衝突。這表明你的構建或項目設置需要一些愛。再一次:解決合併衝突是一種痛苦。但是,每個開發者都可以獲得他們自己版本的文件而不會注意到真的更好嗎?
+0

我不同意#3。生成的資源不應該版本化,除非你有特殊的用例。請參閱http://stackoverflow.com/a/10855342/1301972。 – 2012-08-17 15:17:44

+0

我知道。通常,這樣做很不好。但是當使用代碼生成器時,使用版本控制生成的源代碼是查找和修復生成器中的錯誤的一種非常好的方法。 – 2012-08-17 15:19:54

+0

感謝您的回覆。所以你在說什麼時候使用像Drupal或者Wordpress這樣的開源產品將整個系統放在Git中,而不僅僅是主題? – Dhanushka 2012-08-17 15:23:30

相關問題