2012-06-01 106 views
10

假設我編寫了一個jQuery插件並將其添加到我的存儲庫(在我的情況下是Mercurial)。這是一個單一的文件,說jquery.plugin.js。我使用BitBucket來管理這個存儲庫,其功能之一是一個下載頁面。所以,我添加jquery.plugin.js作爲下載之一。我應該版本控制我的jQuery插件的縮小版本嗎?

現在我想提供我的插件的縮小版本,但我不確定最佳實踐是什麼。我知道它應該可以在下載頁面上以jquery.plugin.min.js的形式獲得,但是每次我更新它以反映未經版本化的版本時,是否也應該對其進行版本控制?

我在控制縮小版本的版本中看到的最明顯的問題是,每次更改未修剪版本時,我可能會忘記更新它。

那麼,我應該版本控制縮小的文件?

回答

8

不,您不應該在源代碼管理下保持生成的最小化版本。

由於TFS將本地文件設置爲只讀的方式,因此在將生成的文件添加到源代碼管理(TFS)時遇到了問題。生成文件作爲構建過程的一部分的工具會產生寫入訪問問題(這對其他版本控制系統可能不是問題)。

但重要的,所有:

  • 工具
  • 腳本
  • 源代碼
  • 資源
  • 第三方庫

和其他任何你需要建立,測試和部署您的產品應該受版本控制。

您應該能夠從源代碼管理中檢出特定版本(通過標籤或修訂版本號或等效版本),並按照該時間點重新創建軟件。即使在「新鮮」的機器上。

構建不應該依賴於任何不受源代碼控制的東西。

腳本:內置腳本是否螞蟻,做,的MSBuild命令文件或任何你正在使用,你可能有任何部署腳本必須是版本控制下 - 不僅是構建機器上。

工具:這意味着編譯器,極小,測試框架 - 您需要爲您構建,測試和部署腳本工作的一切 - 應該是源代碼控制之下。您需要這些工具的準確版本才能重新創建到某個時間點。

書「Continuous Delivery」教我這一課 - 我強烈推薦它。

雖然我相信這是一個偉大的想法 - 並堅持下去儘可能地 - 有一些地方我不是100%肯定。例如操作系統,Java JDK和持續集成工具(我們正在使用Jenkins)。

你練習持續集成?這是一個很好的方法來測試你是否掌握了上述所有內容。如果您必須在連續集成機器上進行任何手動安裝,然後才能構建軟件,則有可能是錯誤的。

+0

持續交付是一個夢幻般的系統。應該要求閱讀IMO。 – Jordan

+0

我是一個團隊,從未使用過構建系統。這將是我學習它們的夏天。我會看看那本書 - 謝謝! –

+0

我已經更新了我的所有項目以使用grunt(https://github.com/cowboy/grunt)構建系統。現在管理事情要容易得多。非常感謝! –

3

這裏是庫™明智的規則,我用我自己:

  1. 如果一個blob需要分發的源代碼包的一部分,以構建它,使用它,或者從測試在源代碼樹中,它應該受版本控制。
  2. 如果資產可以根據需要從版本來源重新生成,那就做。如果你可以(GNU)製作它,(Ruby)耙它,或者只是簡單的假它,不要將它提交到你的倉庫。
  3. 您可以使用版本化的符號鏈接,維護腳本,子模塊,外部定義等來拆分不同之處,但結果通常不令人滿意並且容易出錯。在必要時使用它們,並儘可能避免使用它們。

這絕對是一種情況,你的里程可能會有所不同,但這三條「明智規則」適用於我。

+0

感謝。由於縮小版本可以用縮小服務生成#2,所以我不會提交它們。 –

+0

我會等一會兒接受這個看看是否有其他答案,但我很喜歡這個。 –

+0

雖然我加了我自己的答案,但我也很喜歡這個 – GarethOwen

4

我的經驗簡單的規則:

可這在構建過程中自動生成?

  1. 如果是,那麼它是一個資源,而不是源文件。不檢查它。
  2. 如果沒有,那麼它是一個源文件。檢查它。
+1

我同意 - 任何可以生成的東西都不應該簽入,但我不確定第1點中的「資源」是否是正確的術語。至少,我稱之爲本地化字符串和手工製作的位圖「資源」,但他們不會自動生成,當然應該進行檢查。 – GarethOwen

+0

當然,有一些重疊。我不知道更好的術語:)建議歡迎! – Jordan

相關問題