2008-09-15 81 views
1

我希望Subversion有更好的移動標籤的方式。我知道移動標籤的唯一方法是從標籤中移除文件,然後再次複製。修訂樹瀏覽器似乎無法很好地處理這些問題。這也需要保持trunk和tag下的目錄結構同步。如何在Subversion中移動標籤

用例:我們有成千上萬的「地圖」,我們想標記每個地圖的哪個版本是「生產」版本。我們需要能夠輕鬆獲得所有地圖的生產版本。

任何人都可以提出一個更好的方式來解決我們的用例嗎? 我也考慮過屬性,但後來我們無法輕鬆獲得所有文件的prod版本。合併到標籤看起來也不是很容易。 (最初發布到http://jamesjava.blogspot.com/2007/12/subversion-moving-tags.html

+0

保留一個生產分支(或使用生產樹幹)需要額外的工作來保持兩個目錄結構的同步,所以這不是一個很好的解決方案,除非有一個將目錄複製到生產區域的自動腳本,並且該腳本經常跑。 – 2008-09-15 14:32:41

+0

每張地圖都是一個獨立的文件,因此一次只能發送少量數據到生產環境,而我們不會將所有更改發送到一起。 (一個類似的設置將是一個網站的HTML文件的目錄結構 - 文件被更改併發送到獨立產品。) – 2008-09-15 14:38:39

回答

2

我不認爲你可以用顛覆操作的方式做到這一點。我相信最好的解決方案是查看像git這樣的工具,它似乎適合您的用例。你的生產系統可以在被接受的「地圖」中「拉」。雖然我意識到這不是顛覆,但使用git可能會比svn更接近您的使用模式。

關於爲什麼git的基於拉的開發模型與您的方案更好地匹配的一個很好的寫法是here

還有關於如何開始遷移的教程,如this

+1

向下投票,因爲它沒有回答提出和標題的問題。 – danorton 2011-06-03 20:22:28

2

我看不到需要從生產標籤中「移除」文件。您應該將新文件複製到現有文件並檢入。這樣您將保留歷史記錄。

當然,您需要簽出生產標籤來執行此操作。

0

爲什麼不爲當前生產版本製作新標籤?請記住,Subversion不是CVS。所以製作一個完整的目錄樹的副本不需要花費任何東西。

1

這不適用於顛覆。

Subversion標記用於爲歷史記錄中的特定快照提供樹的實例的名稱,並且應保持靜態。

也許你可以使用當前的日期,或一個遞增的數字作爲標籤的一部分?您可以在包含任何特定日期的生產版本的標籤下有一個目錄。以最新的日期作爲當前的生產版本。

今天的版本可以在

/svn/tags/production/2008/09/15/mapproject 
0

一種方法來發現將移動到「穩定幹線」的模式。

  • 從樹幹做一個樹枝作爲你的工作區域使用。
  • 停止直接向主幹提交提交 - 讓每個人都切換到開發分支。
  • 由管理穩定版本的人檢查了中繼,確保他們具有提交權限。
  • 如果您希望「釋放」地圖,請使用「重新合併」將更改引入該文件/目錄並提交更改。

這可能顯得有點顛倒,但相當可行。您可以讓生產機器直接從後備箱中拉出,或者爲每個版本從後備箱中製作新標籤。對於後者,您需要一些方法將新標籤傳遞給生產機器。某種消息傳遞,共享配置或命名約定可以工作。

但請注意,在這個模型中,你必須進入樹幹的思維模式有些「神聖」。

0

如果我理解你的需要,我認爲做這件事的最好方法是將所有地圖作爲主幹的外部部分,然後製作一個腳本,遞歸地將每個地圖(外部)標記爲它的當前修訂版工作副本(或服務器,如果你想這樣的話)。

1

我認爲你正試圖解決錯誤的問題。

聽起來好像你有一個包含尚未發佈的地圖版本的主幹,而當你做發佈時,你希望從主幹上的所有可能的更新中選擇要更新的地圖。

假設是這種情況,請創建一個名爲「Release」的分支。 (考慮創建一個新的空目錄,並複製每個需要的映射版本(使用單獨的svn cp命令),如果這將更快)。

現在你已經在分支當前的版本。使用「版本XXX」標記它(svn cp整個目錄),其中XXX是最新版本的有意義ID。

然後,隨着地圖被批准用於下一個發行版,svn將它們發佈到您的發行版分支。我假設你不想使用合併,因爲映射離散元素而不是源代碼。

在下次發佈時,您可以再次標記。

現在你知道,最新批准的地圖是什麼以及每個版本中的內容。如果你真的不記得最新版本號,並且你可以想出一個你不需要查看標籤目錄就需要知道的時間,那麼你可以創建一個標籤,其中包含svn cp的最新版本,然後吹當你做下一個版本時,它會被重新複製。