如何跳过删除除指定文件夹以外的文件夹以进行 Web 部署 (msdeploy) 同步?
How can I skip deleting folders except a specified folder for a web deploy (msdeploy) sync?
假设我有一个 destination 文件夹结构,如下所示:
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
我想将 source 同步到 destination,但仅在 \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[=13=].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 还删除了文件 0.txt
和 b1.txt
,它们位于我希望根据正则表达式跳过的 dirPath 下。我尝试了 absolutePath 正则表达式的各种排列,但无济于事。
我应该做什么呢?还是这超出了 msdeploy 的可能性?
注意:这个例子是简化的。实际上我的来源是包,而不是 contentPath。这就是为什么在 b\b1\b1a
级同步的明显答案不适用的原因。
您已指定不希望它删除该文件夹外的 目录 ,但您的跳过规则未提及文件。只需从您的 skip 指令中删除 ,objectName=dirPath
,它将跳过对任何提供程序的删除。
顺便说一句,跳过规则的行为实际上非常微妙。我有一个深入研究它的博客 post,这可能会有所帮助:Demystifying MSDeploy skip rules
假设我有一个 destination 文件夹结构,如下所示:
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
我想将 source 同步到 destination,但仅在 \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[=13=].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 还删除了文件 0.txt
和 b1.txt
,它们位于我希望根据正则表达式跳过的 dirPath 下。我尝试了 absolutePath 正则表达式的各种排列,但无济于事。
我应该做什么呢?还是这超出了 msdeploy 的可能性?
注意:这个例子是简化的。实际上我的来源是包,而不是 contentPath。这就是为什么在 b\b1\b1a
级同步的明显答案不适用的原因。
您已指定不希望它删除该文件夹外的 目录 ,但您的跳过规则未提及文件。只需从您的 skip 指令中删除 ,objectName=dirPath
,它将跳过对任何提供程序的删除。
顺便说一句,跳过规则的行为实际上非常微妙。我有一个深入研究它的博客 post,这可能会有所帮助:Demystifying MSDeploy skip rules