2008-10-10 53 views
11

在我的Subversion項目中,我有幾個包含我的代碼需要的其他開源項目的目錄。例如ffmpeg,freetype,matrixssl和其他一些。在Subversion中替換整個目錄樹的最佳方法是什麼?

更新SVN以保存其中一個項目的最新版本的最佳方式是什麼?

基本上我會做以下(使用的ffmpeg爲例):

1) Rename current ffmpeg folder to ffmpeg.old 
2) Download new version of ffmpeg from net 
3) Make sure it and my code compile and work fine together 
4) Update subversion to now hold the "new" version of ffmpeg 
5) Delete ffmpeg.old directory tree 

回答

11

你可以看看svnbook談論vendor branches。這正是您要完成的工作

您可以使用svn_load_dirs.pl替換您的手動步驟1-5。 svn_load_dirs.pl也將跟蹤新的,移動或刪除的文件。

1

所有是正確的,只是你不需要的步驟1和5 - 如果第3步失敗,用svn revert將改變功能。

+0

此句柄是否會刪除不再在新版本中使用的文件,或者我將不得不手動檢測並刪除它們? – KPexEA 2008-10-10 20:38:54

+0

使用svn刪除在下載最新版本之前刪除舊樹。那麼就沒有必要解決任何問題,如果第3步失敗 - 恢復。無論如何,沒有任何東西真正從SVN中刪除。 – Dandikas 2008-10-10 20:44:43

+0

svn_load_dirs.pl會照顧已刪除的文件 – DanJ 2008-10-10 20:59:44

0

我想你有兩個選擇。

A)

  1. SVN刪除所有文件。
  2. 獲取當前&使它工作。
  3. SVN添加所有文件。

臨:如果最新版本中不存在額外的文件,請確保沒有額外的文件。答:可能很費時。

B)

  1. 下載並安裝新版本過舊。
  2. 讓它工作。
  3. SVN添加任何新文件。

專業版:您可以查看該工具文件中發生了哪些變化。

騙局:可能最終會混亂。根據工具覆蓋可能導致錯誤。

+0

在這兩種情況下,步驟1的用途是什麼?從沒有使用SVN的日子聽起來,這是一種古老的習慣。 – Dandikas 2008-10-10 20:47:50

2

我有與CMake的,在這裏我把二進制Win32發佈住進我們的供應商目錄中相同的情況:

branches/ 
trunk/ 
vendor/ 
    cmake/ 
     cmake-2.6.0/ 
     cmake-2.6.1/ 
     cmake-2.6.2/ 
     ... 

然後我使用svn:外部組件來指代CMake的版本我使用。使測試升級到新版本變得非常容易,並且也清楚我正在使用哪個版本的CMake。

0

如果某些供應商項目也使用Subversion,您可以將 svn:externals屬性添加到您的分支/ trunk的父目錄。

查看SVN book瞭解更多詳情。

相關問題