2011-04-08 66 views
2

我有一個web應用程序,它使用由許多文件和目錄(CKEditor)組成的第三方組件。當新版本出來時,我複製/覆蓋現有的新文件。這需要處理添加和修改的內容,但如果新分發缺少之前存在的文件,我將最終保留陳舊的副本。由於SVN依賴於.svn文件夾的狀態,我不能只刪除舊的根文件夾並複製新的。SVN:如何更新深層文件夾結構?

有沒有一種簡單/標準的方式來處理這種與SVN的大規模更新?

回答

1

我通常使用rsync--exclude=.svn這種類型的東西。

但我認爲CKEditor的有一個公共SVN回購所以在這種情況下,我會用一個svn:externals盯住特定版本,然後運行構建腳本放在網站根公佈的目錄中,多數民衆贊成,所以我的回購可能看起來像:

trunk/ 
    web/ 
    index.html 
    js/ 
     ckeditor/ 
    images/ 
    css/ 
    lib/ 
    ckeditor/ (svn:externals to CK_EDITOR_SVN_URL/tags/some-version) 

這樣i cn只是切換外部並做一個svn了。如果您的外部項目所針對的項目是持續整合BC更新的版本化分支,這將特別有用。這種方式,無論何時您運行svn,您都可以獲得最新的錯誤修復,並且可以重建。無論這是一個好主意取決於特定項目的開發方式,因此您希望在開始之前仔細閱讀開發人員文檔。

+0

有趣的是,我不知道外部回購支持。 TortoiseSVN可以處理什麼? – 2011-04-08 17:07:30

+0

@邁克爾:我不知道我主要在OS X和Ubunutu上工作。我確定Tortise支持使用外部,但它可能沒有一個菜單項來執行'propedit' /'propset',在這種情況下你需要使用命令行客戶端來設置它或更改外部位置,但那不應該太麻煩了,因爲你不會經常這樣做。 – prodigitalson 2011-04-08 17:11:24

+0

TortoiseSVN沒有對svn:externals的特定支持,但它對SVN屬性具有通用的CRUD支持。 – ChrisH 2011-04-08 18:25:34

0

使用svn:externals是一種選擇。但是,如果您希望在自己的存儲庫中保留第三方庫的快照,則應該閱讀SVN中vendor branches的概念。有一個標準Perl腳本(svn_load_dirs.pl)可用於將第三方代碼批量加載到SVN存儲庫中,以正確處理刪除操作。

+0

謝謝你的指針。供應商分支或多或少地描述了我已經遵循的一般算法。它提到了孤立文件的問題,但沒有真正解決它。聽起來不像PERL腳本那樣。 – 2011-04-08 19:20:18

+0

PERL腳本實際上處理孤立的文件。我用過很多次。您給它一個包含新源代碼樹的非版本化目錄,它檢出舊的源代碼樹,用一些用戶反饋添加/更新/刪除邏輯,然後將新的源代碼樹提交回SVN。它也可以爲每個新版本添加標籤。然後,您可以使用新的供應商分支將更改合併到您的幹線分支。然而,它可能會涉及到一些問題,而且我可以理解,如果這不是你想要的。 – ChrisH 2011-04-08 21:14:09

+0

感謝您的跟蹤,這當然不是從網頁上看到的。 – 2011-04-08 22:52:36