2014-10-02 73 views
1

背景爲此我們必須保持多個版本(一些舊的應用程序只能使用舊版本的這些庫的工作)

我們已經共享代碼庫。這些存在於他們自己的回購站中,並通過svn:externals導入到需要它們的應用程序中。最近我們不得不對所有使用的版本應用安全補丁。將修訂在SVN多個標籤回購

問題

什麼是從一個回購結構上看適用追溯補丁,以舊標籤的最佳方式,並能做到這一點(見下文)我選擇的方式有什麼不利的影響?

我選擇的時間做它的方式是:

  1. 進行更改/軀幹和承諾(這是一個相對小的變化)。
  2. 標記爲最新版本(與平常一樣)。
  3. 對於每個年齡較大的標籤被保持
    1. 轉換工作副本標記的變化(主要是/主幹@ HEAD)
    2. 合併並根據需要進行修改。
    3. 將本地修改標記爲major.minor.1(因此,/tags/1.3將被svn複製到/tags/1.3.1)。

這有效地鏈接了標籤。由於我們沒有爲每個major.minor版本維護一個永久分支,所以這似乎是唯一的方法。

回答

1

對於每個標籤,我會對具有該標籤的中繼修訂執行svn updatesvn switch,並且會從該點創建分支。

然後,我會做一個從trunk到每個分支的櫻桃選擇合併,以獲得backport所需的幾個補丁。

然後,我會從每個分支標記。

這種方式沒有標籤被修改,你仍然有準確的歷史和一整套標籤。

如果您在某種程度上對該分支進行了一般性命名(例如1.2.x),那麼如果您將來有修復程序來進行回溯,那麼這些分支也可以繼續保存以創建另一個分支。

+0

標籤本身沒有被修改,只要沒有額外的提交。包含路徑的新標籤是從原始標籤而不是樹幹複製的(除了最新標籤以外的所有標籤),這就是SVN如何處理差異和一般回購完整性的問題。 – md4 2014-10-03 01:13:25

+0

就這樣我理解你,如果從'/ trunk @ 42'創建了一個較舊的標籤(比如'/ tags/1.2'),我會'svn switch'回到r42,分支,應用更改,然後標記爲' /標籤/ 1.2.1'? – md4 2014-10-03 01:20:51

+0

是的,這就是我的意思。或者'svn update -r42',如果你已經在中繼線。你可能會切換到標籤,並從那裏分支,但我不太確定像TortoiseSVN這樣的乾淨工具會在修訂圖中顯示。如果您在某種程度上對該分支進行了一般性命名(例如1.2.x),那麼如果您將來有修復程序可以進行回溯,那麼這些分支也可以在分支上保存以創建另一個分支。 – Ben 2014-10-03 03:34:46