Как можно пропустить удаление папок, кроме указанной папки для синхронизации веб-развертывания (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 пропустить правила

Другие вопросы по тегам