如何在Web部署(msdeploy)同步过程中跳过删除指定文件夹以外的文件夹?

4
假设我的 目标 文件夹结构如下所示:
D:\DEPLOY\DEST
│   0.txt
│
├───a
│       a.txt
│
└───b
    ├───b1
    │   │   b1.txt
    │   │
    │   ├───b1a
    │   │       b1a.txt
    │   │
    │   └───b1b
    │           b1b.txt
    │
    └───b2
            b2.txt

我也有一个名为source的文件夹结构,看起来像这样:

D:\DEPLOY\SOURCE
└───b
    └───b1
        └───b1a
                b1a-new.txt

我想要将同步到目标,但仅限于\b\\b1\b1a路径以下。为了实现这一点,在运行MSDeploy时,我添加了一个跳过规则,匹配所有不包含此路径的dirPaths:

msdeploy -verb:sync 
         -source:contentPath=D:\deploy\source
         -dest:contentPath=D:\deploy\dest
         -skip:skipAction=delete,objectName=dirPath,absolutePath='(?!\\b\\b1\\b1a)'
         -whatif

导致:
Info: Deleting file (D:\deploy\dest\0.txt).
Info: Deleting file (D:\deploy\dest\b\b1\b1.txt).
Info: Adding file (D:\deploy\dest\b\b1\b1a\b1a-new.txt).
Info: Deleting file (D:\deploy\dest\b\b1\b1a\b1a.txt).
Total changes: 4 (1 added, 3 deleted, 0 updated, 0 parameters changed, 0 bytes copied)

令我惊讶的是,MSDeploy做了比预期更多的事情。MSDeploy还删除了0.txtb1.txt这些位于dirPath下的文件,而根据正则表达式,我原本希望它们被跳过。我尝试了各种绝对路径的正则表达式的排列组合,但毫无用处。

我应该做什么才能避免这种情况呢?还是说这已经超出了msdeploy的可能性范围?

注意:这个例子很简单。实际上,我的源代码是打包的,而不是一个内容路径。这就是为什么在b\b1\b1a级别进行同步的显而易见的答案不适用的原因。

1个回答

3
您已经指定不希望删除该文件夹外的目录,但您的跳过规则没有涉及文件。只需从跳过指令中删除,objectName=dirPath,它就会跳过任何提供程序上的删除操作。
另外,跳过规则实际上在其行为上相当微妙。我有一篇博客文章详细介绍了这个问题,可能会有所帮助:解密MSDeploy跳过规则

你的揭秘文章真的很有帮助。谢谢。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接