2008-09-03 55 views
4

我有一些有趣的發展情況。客戶端和部署服務器位於防火牆內,無法訪問Subversion服務器。但是開發人員不在防火牆之外,並且能夠使用Subversion服務器。現在我已經制定出的解決方案是更新我的本地代碼副本,然後使用UnleashIT提取最近更新的文件。Subversion部分導出

問題是如何從Subversion獲取更新後的文件,以便它們可以通過防火牆物理傳輸並放到部署服務器上。

我並不擔心嘗試更改防火牆設置或試圖找出從防火牆內部到達Subversion服務器的更簡單方法。我只是想從最近更改的文件的存儲庫中獲得部分導出的方法。

還有其他建議嗎?

答發現:除了我標記爲答案的答案,我也發現這裏的下面,以能夠從TortoiseSVN的做到這一點:

http://svn.haxx.se/tsvn/archive-2006-08/0051.shtml

* select the two revisions 
* right-click, "compare revisions" 
* select all files in the list 
* right-click, choose "export to..." 

回答

1

我發現rsync對跨多個系統同步目錄樹非常有用。如果您可以從開發工作站通過shell訪問服務器,則可以定期在本地簽出代碼並運行rsync,它只會將已更改的文件傳輸到服務器。

(這是假設一個類Unix環境上開發的工作站。Cygwin的將正常工作。)

cd deploy 
svn update 
rsync -a . server:webdir/ 

你的問題聽起來好像你實際上並沒有從開發工作站的任何直接的網絡訪問您的服務器,你真正想要的是一種讓Subversion告訴你哪些文件已經改變的方法。 svn export支持一個參數,讓您僅檢出在特定修訂之間更改的文件。來自svn的幫助:

-r [--revision] arg  : ARG (some commands also take ARG1:ARG2 range) 
          A revision argument can be one of: 
           NUMBER  revision number 
           '{' DATE '}' revision at start of the date 
           'HEAD'  latest in repository 
           'BASE'  base rev of item's working copy 
           'COMMITTED' last commit at or before BASE 
           'PREV'  revision just before COMMITTED 

您需要跟蹤最新的修訂版本複製到服務器。假設它的SVN版本XXXX:

svn export -r xxxx:HEAD http://svn/ 

然後簡單複製的內容部署目錄添加到您的現有文件的頂級服務器。

這不會處理刪除的文件,這在某些環境中可能會遇到問題。

-1

你不」 t提供有關通過防火牆允許的內容的信息。我不熟悉UnleashIT。

我想你可以有一個從SVN導出到SVN服務器上的文件夾的腳本。該腳本然後壓縮導出的文件。然後,您可以傳輸ZIP文件,然後將其提取到部署服務器。

TortoiseSVN支持代理服務器,所以你可以使用客戶端的一個?

0

你可以嘗試使用Subversion二進制文件附帶的svnadmin dump命令。您可以使用此命令將整個存儲庫轉儲到文件,只是某個修訂或一系列修訂。然後使用svnadmin load轉儲文件加載到新的乾淨存儲庫中。

不是一個完美的解決方案,因爲它在存儲庫而不是單個文件方面工作。

1

所以,如果我理解正確的...

比方說,你有一個倉庫,看起來像這樣:

/ 
|+-DIR1 
| |- FILEa 
| |- FILEb 
|+-DIR2 
| |- FILEc 
| |- FILEd 
|- FILEe 
|- FILEf 

而且假設你更新文件FILEaFILEc,並且FILEf並把它們提交回進入存儲庫。然後,你要導出出庫的是什麼,看起來像這樣的結構:

/ 
|+-DIR1 
| |- FILEa 
|+-DIR2 
| |- FILEc 
|- FILEf 

是嗎?

0

你只是想讓防火牆後面的人能夠訪問提交給Subversion的最新文件,對嗎?

你能寫一個svn hook script,它使用某種方法(可能是scp或ftp)在提交時將文件發送到遠程位置?

0

Subversion掛鉤看起來很有前途。但是對於如何編寫鉤子相對不瞭解,我該如何取出提交的文件並將它們FTP到保持目錄結構的某個位置?

如果我能做到這一點,那麼防火牆內的某個人可以將這些文件下載到部署服務器上,我們將很樂意。

2

svn export不接受修訂範圍,試用一下。

一個可能的解決方案是得到修改過的文件列表中有:

svn diff --summarize -rXXX http://svn/... 

,然後導出它們。