1

假设我有一个文件夹“内容”(出于某种原因)可能会或可能不会出现在源文件夹树中以进行 Web 部署同步操作。

通过什么skip设置,我可以让 Web Deploy 同步此文件夹的内容(无论它是否存在;我可以使用另一个跳过设置来控制同步哪些文件),而不会删除 snyc 目标中的文件夹t 存在于同步源中吗?

[注意 - 示例命令中的换行符纯粹是装饰性的。]

使用此命令,Web Deploy 将尝试删除同步目标中的“内容”文件夹(如果其中有文件则失败):

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

使用此命令,(似乎)Web 部署将跳过删除同步目标中的“内容”文件夹,但它也将无法同步该文件夹中的任何文件(这实际上非常合理):

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

如果实际上没有办法做到这一点,这是完全可以接受的!(但我想要一些关于为什么会这样的细节或参考。)

4

2 回答 2

2

一些可能的解决方案:

  1. 看看-enableRule:DoNotDeleteRule开关(见规则描述)。
  2. 根据此博客文章,您可能需要包含这两个跳过参数:

...仅在未删除父级时才处理子级的删除规则。因此,如果您跳过一个文件,但它包含的目录在源中不存在,则该目录(以及该文件)无论如何都会被删除。

另外,请记住参数需要正则表达式,因此应该转义absolutePath一些字符(如)。.

于 2013-05-15T18:35:41.040 回答
0

这似乎不可能。如果跳过删除规则阻止删除文件夹,则该文件夹中的任何子文件也不会被删除,因此不会(完全)同步子文件。


更多地考虑这一点,特别是鉴于 jkoreska 的回答,我认为我采用的解决方案并不可怕。基本上问题是源和目标根文件夹可能包含一组文件夹的某个子集,例如完整的文件夹是bincontenttemplates

我想要同步源(或目标)中可能不存在的文件夹的内容的原因是,我想对任意数量的源和目标实例使用相同的 Web 部署命令。

我的解决方案是简单地保证源实例始终包含完整的文件夹集,因此所有目标也将包含 - 在至少执行一次 Web 部署命令之后。

于 2013-05-16T13:40:34.057 回答