Как можно пропустить удаление папок, кроме указанной папки для синхронизации веб-развертывания (msdeploy)?
Предположим, у меня есть структура папки назначения, которая выглядит следующим образом:
D:\DEPLOY\DEST
│ 0.txt
│
├───a
│ a.txt
│
└───b
├───b1
│ │ b1.txt
│ │
│ ├───b1a
│ │ b1a.txt
│ │
│ └───b1b
│ b1b.txt
│
└───b2
b2.txt
У меня также есть структура исходных папок, которая выглядит следующим образом:
D:\DEPLOY\SOURCE
└───b
└───b1
└───b1a
b1a-new.txt
Я хотел бы синхронизировать источник с пунктом назначения, но только ниже \b\\b1\b1a
дорожка. Для этого при запуске MSDeploy я добавляю правило пропуска, соответствующее всем dirPath, не содержащим этот путь:
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 также удаляет файлы 0.txt
а также b1.txt
, которые находятся под dirPath, который я ожидаю пропустить на основе регулярного выражения. Я пробовал различные варианты регулярного выражения absolutePath, но безрезультатно.
Что я должен делать вместо этого? Или это за пределами возможностей msdeploy?
Примечание: этот пример упрощен. На самом деле мой источник - это package, а не contentPath. Вот почему очевидный ответ синхронизации на b\b1\b1a
Уровень не будет применяться.
1 ответ
Вы указали, что не хотите, чтобы он удалял каталоги за пределами этой папки, но ваше правило пропуска ничего не говорит о файлах. Просто удали ,objectName=dirPath
из вашей директивы пропустить, и он будет пропускать удаления на любом провайдере.
Кроме того, правила пропуска на самом деле весьма нюансированы в своем поведении. У меня есть пост в блоге, в котором можно разобраться: Демистификация MSDeploy пропустить правила