假设我的 目标 文件夹结构如下所示:
导致:
令我惊讶的是,MSDeploy做了比预期更多的事情。MSDeploy还删除了
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.txt
和b1.txt
这些位于dirPath下的文件,而根据正则表达式,我原本希望它们被跳过。我尝试了各种绝对路径的正则表达式的排列组合,但毫无用处。
我应该做什么才能避免这种情况呢?还是说这已经超出了msdeploy的可能性范围?
注意:这个例子很简单。实际上,我的源代码是打包的,而不是一个内容路径。这就是为什么在b\b1\b1a
级别进行同步的显而易见的答案不适用的原因。