You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bitbucket流水线中使用rsync部署时,如何包含/web目录全部内容并排除/web/uploads目录(避免远程uploads目录被清空)

Bitbucket流水线中使用rsync部署时,如何包含/web目录全部内容并排除/web/uploads目录(避免远程uploads目录被清空)

嗨,我来帮你解决这个问题!你遇到的情况其实是rsync过滤规则的顺序和匹配逻辑导致的——你现在的规则先写了+ /web/***,这会让/web/uploads下的内容也被匹配到包含规则里,后面的排除规则就失效了。再加上本地仓库里的/web/uploads是空的,rsync默认会把远程对应目录的内容同步成和本地一样,也就是清空远程的uploads目录。

给你两个可行的解决方案,你可以根据情况选择:

方案一:调整过滤规则的顺序和写法

把排除规则放在包含规则前面,明确排除/web/uploads目录及其所有内容的同步,这样rsync就会完全忽略这个目录,既不会上传本地的空目录,也不会删除远程已有的内容。

修改你的bitbucket-pipelines-filter.txt内容为:

- /web/uploads/***
- /web/uploads/
+ /web/***

解释下规则的作用:

  • 第一行- /web/uploads/***:排除/web/uploads目录下的所有文件和子目录
  • 第二行- /web/uploads/:排除/web/uploads目录本身的同步,避免本地空目录覆盖远程目录
  • 第三行+ /web/***:包含/web目录下的所有其他内容

方案二:在rsync命令中直接添加排除参数(无需修改filter文件)

如果你不想改动filter文件,也可以在rsync命令里直接追加--exclude='/web/uploads/'参数,这样更直接:

rsync --filter=merge ${BITBUCKET_CLONE_DIR}/bitbucket-pipelines-filter.txt --exclude='/web/uploads/' [你的其他rsync参数] [目标部署地址]

这个参数会让rsync完全跳过/web/uploads目录的同步,不管本地目录是什么状态,远程的内容都不会被改动。

另外要注意:如果你的rsync命令里用到了--delete参数(用来删除远程存在但本地没有的文件),一定要确保排除规则生效,否则--delete还是会清空远程的/web/uploads。上面的两种方案都能和--delete兼容,因为被排除的目录不会被--delete处理。

你可以先试试方案一,调整filter文件的规则顺序,应该就能解决远程uploads目录被清空的问题了!

备注:内容来源于stack exchange,提问作者Matthias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:30:27