2012-03-29 66 views
1

我通常在小型項目上工作,只涉及2-3個人同時在相同的代碼庫上工作。多人項目SVN補丁/差異管理

對我來說,通常的程序如下:

  1. 沖刷過的bug報告,挑選優先的錯誤,並寫了修復
  2. 創建一個diff /補丁(姑且稱之爲補丁「阿爾法」 )的更改代碼庫(即:SVN DIFF>〜/ diff_alpha.patch)
  3. 電子郵件的補丁同事在那裏他們可以目視檢查對代碼庫的diff和鍼砭或建議
  4. 他們告訴我需要什麼變化,我把它們放進去,然後給我的團隊重新發送電子郵件修改後的補丁
  5. 一旦所有人都同意這個補丁是好的,我將它應用到代碼庫中,在必要時合併其他人的更改,重新構建,重新測試和提交。

這裏的問題是,我通常不得不等待幾天才能獲得修改後的最終補丁程序的所有批准,並且在那段時間內(顯然)我想要在其他補丁程序上工作。

如果我去另一個bug的工作,它會影響我在前面的補丁工作在同一個文件,這意味着,當我想犯了以前修補(阿爾法),我必須:

  1. 備份我目前的工作提高到一個新的補丁(即:補丁 「布拉沃」),通過svn DIFF>〜/ diff_ 布拉沃 .patch
  2. 還原我當前的工作副本(SVN恢復-R)
  3. 應用舊的補丁(patch -p0 <〜/ diff_ alpha.patch)
  4. 提交舊補丁(SVN提交)
  5. 應用我以前工作的補丁(補丁-p0 <〜/ diff_ 布拉沃 .patch)
  6. 繼續對相關的代碼工作,diff_bravo.patch

這很煩人,因爲我通常需要手動合併diff_alpha和diff_bravo之間的衝突。

我嘗試的另一種方法是繼續我的diff_alpha工作而不創建diff_bravo。然後,當我已經批准在原diff_alpha我發電子郵件了所有的代碼,我做到以下幾點:

  1. 備份我目前的工作提高到一個新的補丁(即:補丁「TEMP」),通過svn DIFF>〜/ diff_ 溫度 .patch
  2. 還原我的當前的工作副本(SVN還原-R)
  3. 應用舊補丁(補丁-p0 <〜/ diff_ 阿爾法。補丁)
  4. 提交舊補丁(SVN提交)
  5. 應用我以前在(補丁工作補丁-p0 <〜/ diff_ 臨時 .patch)
  6. 現在我可以繼續我在做什麼,而不不得不手動合併,但我會在我的「補丁」命令中收到大量失敗的代碼,因爲diff_temp中的一半代碼已經在diff_alpha中提交。我不覺得這是可以接受的。

任何處理公共文件上的多個任務/錯誤的建議,以便我可以最小化SVN衝突?

+0

[代碼評論的最佳工具](http://stackoverflow.com/questions/49906/best-tools-for-code-reviews)可能是有用的閱讀 – 2012-03-29 23:13:34

回答

3

這就是分支是。您爲每個錯誤創建一個分支並在該分支中工作,直到您準備好與您的隊友進行協商。該分支可以由團隊成員簽出並檢查(當你做了新的更改時更新)。當每個人都同意時,合併分支回樹幹。

團隊成員可以檢查您對分支所做的每項更改(基本上是您的問題中的修補程序)的日誌,或打開更改的文件並查看上下文中應用的更改(甚至可以訪問以前版本的看看這些文件是如何在更改之前)。

你仍然需要你的團隊成員來檢查的變化提醒,但沒有明確地給他們的變化youself - 他們會從百磅庫得到它。

你可以有多個分支(每個錯誤),並可以對它們同時工作。當合併到主幹時,SVN應該自動進行合併(偶爾指出可以手動解決的衝突)

衝突可能是由於分支是從較早版本的trunk和當前版本主幹狀態(包含來自其他分支的一些變化)與當前分支中的變化相沖突,您可以手動解決它們,因爲它是有意義的。重新測試以確保一切仍然正常。發表評論,您的團隊成員可以把提交監測到位,以提醒他們,當你改變的(特別)的分支。

+0

團隊可以使用提交監視器來監視樹的有趣部分在回購。與「你可以有多個分支」我會寫爲「你必須有多個分支,以高效工作」 – 2012-03-29 23:08:42

+0

我不知道犯顯示器(雖然我並不感到驚訝 - 非常有意義)。您對分支機構是正確的,但我以這種方式措辭來解決OP關注在正在審查的過程中能夠處理其他錯誤的問題。 – Attila 2012-03-30 01:29:59

+0

遺憾的是,我不允許爲此創建新的分支機構。被迫以錯誤的方式做事情只是令人沮喪,但看起來這是我必須去的方式。我將此標記爲答案,因爲理想而現實地說,這是一條路。 – DevNull 2012-03-31 19:47:50

2

當我們的工作,我們做的大部分的OU在提交之後進行r代碼審查。這些補丁文件都沒有來回。我們使用詹金斯,並有插件,可以做很多檢查我們(如Findbugs,PMD,CheckStyle等)。如果我們發現問題,我們可以在一個新的提交中解決它們。如果變化不好,我們可以恢復它。

如果你喜歡你目前的工作流程,你可能想看看Git是,它允許你開發者之間共享這樣的補丁程序變得非常容易。這是Git如此受歡迎的原因之一。

我也有一個顛覆Commit Monitor插件(一個post-commit鉤子真的),使人們能夠建立自己的喜好上有什麼變化,他們希望得到通知的。配置存儲在存儲庫中,因此用戶可以訪問它。