2010-09-15 57 views
1

我在一家使用cvs進行版本控制的公司工作。如何管理具有多個重疊更改和每日重建的源代碼管理更改集?

我們開發和維護一個包含大約100個可執行文件的在線系統 - 它們共享大量的代碼和大量的支持文件。

我們有一個頭部分支,並從頭部分支採取活枝。現場分支代表每三個月發佈的主要版本。

此外,還有很多每日錯誤修復,必須應用於兩個活分支 - 因此他們可以帶到實況環境immeadiatley,併合並回頭分支,所以他們將在下一個主要發佈。

我們最明顯的困難是每日修復。由於我們每天都有很多修改,所以測試環境總是會有很多變化。通常,當爲一項任務重建可執行文件時,未經測試的對共享代碼的更改將包含在構建中並傳送到實時環境。

在我看來,我們需要一些工具來更好地管理變更集。

我不是誰做的構建者,所以我希望能找到一個直接的過程來管理這一點,因爲這將讓我更容易獲得興趣採用它構建管理。

回答

3

我認爲你需要的是一個存儲庫佈局的改變。如果我理解正確的話,你的資料庫看起來是這樣的:

Mainline 
| 
-- Live branch January (v 1.0) 
| 
-- Live branch April (v 2.0) 
| 
-- Live branch July (v 3.0) 

所以每個分支包含所有的網站(數百個),以及共享代碼文件夾。

沒有科學的方法來確切地告訴釋放之後出現錯誤的機會,但讓我們看看最重要的兩個因素:

  • 行代碼每時間單元COMMITED數。由於它是開發人員的生產力輸出,因此您不能/不會希望全局更改此內容。
  • 測試覆蓋,又名多久被代碼之前beeing生活和如何你的代碼中有多少涉及執行。通過在發佈之前給用戶更多的時間進行測試或者通過實施自動化測試,可以很容易地改變這一點它是一個資源問題。

如果你的公司都不希望把錢花在額外的測試,也沒有減少釋放頻率(不neccessarily生產力!),你確實必須找到一種方式來釋放更少的變化,effecively減少改變行代碼每數量發佈。 由於這種認識的結果,讓所有開發者提交到同一分支,從每天有多次去住聽起來不像是個好主意,不是嗎?

您希望增加隔離。

在大多數版本控制研究系統隔離是通過每個原子

  1. 遞增版本號來實現承諾
  2. 分支

你可以嘗試實現一個包從多個版本到版本變化的解決方案-packages有點像版本控制系統「perforce」那樣做。我不會那樣做,因爲分支是最簡單的。牢記KISS原則。

那麼如何分支幫助? 你可以嘗試隔離必須從今天開始生活的變化,可能必須明天或下週才能上線。

迭代分行

Mainline 
| 
-- Live branch July (v 3.0) 
    | 
    -- Monday (may result in releases 3.0.1 - 3.0.5) 
    | 
    -- Thuesday (may result in releases 3.0.6 - 3.0.8) 
    | 
    -- Wednesday (may result in releases 3.0.9 - 3.0.14) 

人們需要花費更多的心思關於「瞄準」的修改權釋放,但它可能會導致不那麼緊迫的變化(特別是具有共享/庫代碼)停留更長時間在發佈之外,並且在現場分支中,偶然或系統測試可以在上線前發現(請參閱因子測試覆蓋率)。 當然還需要額外的合併,有時需要將活動分支中的變化挑選到日常分支中。

現在請不要讓我太過文學與日常分支。在我的公司,我們有2周的迭代,並且每次迭代都有一個發佈分支,並且有足夠的開銷維護該分支。

而不是孤立的白天,你可以嘗試按產品/網站隔離。

項目分行

Mainline 
    | 
    -- Live branch July (v 3.0) 
     | 
     -- Mysite-A (released when something in A changed and only released to the destination of A) 
     | 
     -- Mysite-B 
     | 
     -- Mysite-C 

在這種情況下單個站點的代碼和所有所需的共享代碼和庫將居住在該站點分支。 如果必須更改共享代碼才能在網站A中工作,則只需更改網站A中的共享代碼。還可以合併變更,以便任何人都可以跟上更改。追趕週期可能比發佈時間長很多,所以代碼有時間「成熟」。 在您的部署/構建過程中,您必須確保站點A的共享代碼不會覆蓋共享代碼站點B的用途。您有效地「分叉」了您的共享代碼,並帶有所有含義(不兼容,集成團隊變更的開銷)。

有一段時間應該強制合併到實時分支(您可能還想重命名),以便集成已在共享代碼上完成的所有更改。我的猜測是3個月的迭代將迫使你這麼做,但是你可能會發現3個月的時間太長,無法進行無障礙整合。

第三種方法是最極端的。

項目&迭代分行

Mainline 
    | 
    -- Live branch July (v 3.0) 
     | 
     -- Mysite-A 
      | 
      -- Week 1 
      | 
      -- Week 2 
      | 
      -- Week 3 
     | 
     -- Mysite-B 
      | 
      -- Week 1 
      | 
      -- Week 2 
      | 
      -- Week 3 
     | 
     -- Mysite-C 
      | 
      -- Week 1 
      | 
      -- Week 2 
      | 
      -- Week 3 

這無疑帶來了開銷和潛在的頭痛,如果你不重視的一個巨大的ammount的。在好的一面,你可以非常準確地部署所需的變化現在這個項目/網站。

我希望這一切都給你一些想法。

應用來源控制對於增加產品質量的風險控制很有幫助。

雖然決定您的公司想要交付的質量水平可能不在您的手中,但知道這將有助於您決定要進行哪些更改。可能會發現你的客戶對你的質量有充分的滿足,並且進一步努力增加它不會攤銷。

祝你好運。 Christoph

+0

謝謝克里斯託弗,你已經花了很多時間和精力到你的回答中,我很感激。 – 2010-09-17 22:06:25

+0

沒問題嘿:)。寫作幫助我思考。那麼結果如何? – 2010-10-15 09:32:05