2013-05-03 41 views
1

比方說,我有一個文件夾「內容」(出於某種原因)可能會或可能不會出現在Web部署同步操作的源文件夾樹中。如何跳過刪除文件夾但仍同步Web部署(msdeploy)同步的文件夾內容?

使用什麼skip設置可以使Web Deploy同步此文件夾的內容(無論它是否存在;我可以使用另一個跳過設置來控制同步哪些文件),而不刪除snyc中的文件夾目標何時不存在於同步源中?

[注 - 在本例中的命令換行符純粹是擺擺]

使用此命令,網絡部署將嘗試刪除同步目標的「內容」文件夾(如果有文件中失敗它):

msdeploy.exe 
    -verb:sync 
    -source:dirPath=%source% 
    -dest:dirPath=%target% 
    -skip:skipaction=Delete,objectname=filePath,absolutepath=\\content 

使用此命令,(似乎)網絡部署將跳過刪除在同步目標的「內容」文件夾,但它也將無法同步該文件夾中的所有文件(這絕對有合理實際上):

msdeploy.exe 
    -verb:sync 
    -source:dirPath=%source% 
    -dest:dirPath=%target% 
    -skip:skipaction=Delete,objectname=dirPath,absolutepath=\\content 

這是完全可以接受的,如果事實上沒有辦法做到這一點! (但我想爲什麼這將是一些細節或引用。)

回答

2

一些可能的解決方案:

  1. 看一看的-enableRule:DoNotDeleteRule開關(see rule descriptions)。
  2. 您可能需要包括那些跳躍則params的,每this blog post

...刪除一個孩子規則,如果家長不 被刪除時纔會處理。所以如果你跳過一個文件,但是它包含目錄 在源文件中不存在,那麼目錄(以及文件)就會被刪除。

另外,記得absolutePath PARAM需要正則表達式等等一些字符(如.)應該被轉義。

+0

你從博客文章引用的內容與我觀察到的內容相符;對於我正在嘗試做的問題,該解決方案[1]可以防止任何*文件或文件夾被刪除;對於解決方案[2],跳過包含的目錄/文件夾的刪除似乎也跳過了子文件。 – 2013-05-16 13:30:11

0

這似乎不可能。如果跳過刪除規則阻止刪除文件夾,則該文件夾中的任何子文件都不會被刪除,因此子文件將不會同步(完全)。


想想這更多,特別是根據jkoreska的回答,我認爲我採用的解決方案並不可怕。基本上問題是源和目標根文件夾可能包含一組文件夾的一些子集,例如全套是bin,content模板

我想同步源(或目標)中可能不存在的文件夾的內容的原因是,我想對任何數量的實例使用相同的Web部署命令來源和目標。

我的解決方案是隻保證源實例始終包含完整的一組文件夾,因此所有目標都會 - 至少執行一次Web Deploy命令之後。

相關問題