2009-04-22 42 views
10

我們使用Subversion的方式是在主幹上運行,重要功能的特性分支(> 1天工作)和發佈分支。使用Subversion阻止更改分支的最佳方法

我們刪除功能分支後,他們愉快地合併,但我們希望保持發行分支四處,以防錯誤修復等需要它們。

我們每個人都會檢查項目的根目錄爲最低限度,所以我們都有整個目錄結構(主幹,分支,發行版)的副本。儘管我可以教育人們檢查他們是否在幹線上工作,但他們最終可能會意外地對付發佈分支。

防止這種情況發生的最好方法是什麼?我正在考慮鎖定發佈分支中的所有文件,這會有幫助嗎?還有什麼其他選擇?

回答

3

不要浪費你的時間來防止這種情況發生。如果開發人員在錯誤的分支上進行了更改,只要將其恢復,並確保將其發送給開發人員即可。

... hack hack hack ... on branch 
$ svn ci -m "Feature-1337 implemented" branch 
Revision 12345 

...oops... 

$ svn merge -c12345 branch trunk 
$ svn ci -m "moved Feature-1337 from branch to trunk" trunk 
$ svn merge -c-12345 branch branch 
$ svn ci -m "reverted Feature-1337 on branch. it's intended only for trunk" branch 
+3

因此,爲了防止丟失工作,我會記下修訂版,從樹幹合併到分支,合併回樹幹以捕獲分支中所做的更改,然後將分支文件夾恢復到以前的修訂版本? – 2009-04-22 10:04:48

+1

然後惡毒擊敗開發者,讓我做所有的工作:) – 2009-04-22 10:05:22

+0

是的,合併功能分支 - >樹幹,如果它不是廢話,並且屬於樹幹。然後在分支上「反向合併」將其滾回到那裏。不要忘記檢查更改。然後,去應用線索四。 – bendin 2009-04-22 12:41:06

3

我認爲這將是一個很好的做法,刪除'發佈分支',並將它們作爲標籤,因爲這是一個標籤的目的。

這並不能真正解決問題,儘管它可能會防止更多的事故,因爲您絕不應該在標籤中工作。我同意brendin,如果它仍然發生,恢復這些變化,並踢開發商:-)

6

爲什麼每個人都檢出了整個SVN層次?如果每個人只檢查出他們正在工作的幹線/分支,那麼它就不那麼容易出錯。你不能檢查你沒有簽出的分支中的東西。

我可以通過Razzie提及第二次練習來標記發佈。

4

我不知道任何內置的方式來積極防止這種情況。你可以使用「資源庫預先掛鉤」來完成它。這是一個在每次提交之前運行的小程序。如果失敗,整個提交失敗。請參見Subversion手冊中的the chapter on hooks

你的鉤子腳本會檢查要提交的路徑,並禁止一些。 這可能有幫助: http://metacpan.org/pod/SVN::Hooks

這就是說,你真的確定你想要這樣做嗎?

我們也使用發佈分支,我們諷刺性地檢查事情到他們身上,通常是關鍵的錯誤修正,以便無法立即升級到最新版本的客戶。你確定你永遠不會需要嗎?

+0

拒絕預先提交掛鉤的一些示例:https://stackoverflow.com/questions/464384/svn-pre-commit-hook-for-avoiding-changes-to-tags-subdirectories – Vadzim 2017-09-10 17:41:39

3

爲什麼使用分支作爲標籤?我建議:

  1. 本地開發標準(即不承諾,我們問你要不要犯)
  2. 顛覆進修培訓(即爲什麼開發人員檢查出整個回購?)
  3. 使用什麼它的目的是

話雖這麼說,假設你有你的資料庫層次佈局的作爲標籤結構:

* repo 
    - tags 
    - trunk 
    - branches 

雖然SVN書的講話對粒狀以這種方式控制,你也可以使用svn_access_file來防止對分支上的任何事情提交?例如:

[repo:/] 
@developers = rw 

[repo:/branches] 
@developers = r 
@rel_engineers = rw 

如果你想開發人員能夠創建分支,那麼你就必須要下到每個單獨的分支(這回來到SVN簿中的整個前提反對在該方法指導第一名)。

相關問題