2011-04-14 63 views
10

我需要在生產服務器上的SVN存儲庫中替換一個目錄,但我不確定正確的方式來做到這一點,而不會破壞任何東西。被替換的目錄是已經完全重組的第三方模塊版本,因此爲了完全升級,我需要刪除舊的目錄/文件並替換爲新的目錄和文件。當我這樣做時(使用svn delete),工作副本變得受阻或者處於阻止我將新的未版本化的目錄提交或添加到工作副本的狀態。我已經嘗試過svn update,svn cleanup,以及其他UI(TortoiseSVN和Cornerstone)修復 - 它的快捷方式,但似乎無法讓事情重新同步 - 這是沒有回滾到以前的修訂或檢出新的副本。如何在不破壞任何東西的情況下替換SVN存儲庫中的目錄

我相信,本地工作副本和遠程回購的目標目錄必須被刪除,工作副本更新,新目錄添加到工作副本,然後提交到回購;但我不確定我可能錯過的細節或缺失的步驟或細節。我正在升級的模塊對於站點應用程序非常重要,所以我需要第一次做到這一點 - 因爲這是在生產服務器上進行的 - 而且必須儘快完成。如果有人能夠清楚地將步驟映射出來,我會非常感激。

回答

9

爲了簡化操作,您可以通過創建單個「已損壞」修訂版的方式來完成,該修訂版的目錄不存在。

  1. svn up,讓您的工作副本到最新
  2. svn delete <directory>擺脫當前目錄
  3. svn commit -m 'Deleted old module'
  4. 在新目錄中複製到工作副本
  5. svn add <directory>添加新的目錄結構
  6. svn commit -m 'Added new module'

This question有關於如何使用「供應商分支機構」的詳細信息,這可能被證明是一種更好的解決方案。

+1

感謝您的建議,這非常有幫助。實際上,我最終得到了一個修訂的工作流程,在這個工作流程中,我必須使用TortoiseSVN執行提交到遠程桌面連接到Win2K3服務器的生產。 TortoiseSVN有自己的SVN捆綁版本,它有自己奇怪的命令行實現和自動化腳本語法。被卡住只有上下文菜單命令,我發現它更容易被定位的更新: 1. CD 2.刪除根目標目錄的內容 3. SVN提交 4.拷貝新的模塊文件/迪爾斯 5. svn add 6. svn commit 成功! – davmorr 2011-04-30 00:49:18

+0

我沒有看到爲什麼這應該在2次提​​交中完成。您可以在工作副本中執行此操作,並將其作爲單個操作提交。無論如何,SVN總是會將其視爲「刪除」+「添加」,除了具有相同名稱的文件外,它會將這些文件選中爲「替換」。 – MarioDS 2018-02-22 08:58:19

1

如果你真的需要的目錄結構,在一個單一的更新提交,你可以使用的WinMerge:

  1. 遞歸的比較兩棵樹,使用SVN過濾器,以避免comparing.svn目錄
  2. 刪除在WC中新結構中不存在的文件和目錄
  3. 將只存在於新結構中的文件和目錄添加到WC中
  4. 將兩個結構中存在的所有文件替換爲新的結構在你的WC
  5. 提交
+0

你的方法是我在過去如何完成這些類型的滾動更新,但是基本上不同的模塊結構我更願意通過刪除 - >替換 - >提交完全從頭開始,而不是必須有選擇地刪除文件和目錄正在升級路徑中。 @西蒙的建議,與我的附錄TortoiseSVN,在這個能力工作得很好。 – davmorr 2011-04-30 00:55:12

2

它是直着這樣做使用TortoiseSVN的RepoBrowser。只需刪除舊文件夾,然後拖放新文件夾即可。

+0

這一個工作就像一個魅力。 – Mino 2013-11-13 21:57:59

相關問題