如何设置从Bitbucket Cloud到本地文件夹的单向同步
Bitbucket 单向只读同步到本地文件夹解决方案
下面提供两种可直接落地的方案,按需选择即可:
方案1:定时轮询同步(无额外配置要求,上手最快)
无需修改Bitbucket端配置,也不要求本地服务器对公网开放,适合对同步实时性要求不高的场景。
- 第一步:初始化本地仓库
进入你要存放local文件夹的父目录,执行命令:
若使用SSH地址拉取,需要把本地服务器的SSH公钥添加到Bitbucket仓库的访问权限列表,避免拉取时验证身份失败。git clone <你的Bitbucket仓库HTTPS/SSH地址> local cd local # 可选:如果不需要同步文件执行权限,执行下面的命令避免本地权限变动影响拉取 git config core.fileMode false - 第二步:编写同步脚本
新建sync_bitbucket.sh文件,内容如下:
给脚本添加执行权限:#!/bin/bash # 替换为你本地local文件夹的绝对路径 cd /absolute/path/to/your/local git fetch origin # 强制覆盖本地所有改动,对齐上游当前分支的最新版本 git reset --hard origin/$(git rev-parse --abbrev-ref HEAD) # 删除本地所有未被上游仓库跟踪的文件/文件夹,保证和上游完全一致 git clean -fdchmod +x sync_bitbucket.sh - 第三步:配置定时任务
执行crontab -e编辑定时任务,添加如下内容(示例为每分钟同步一次,可自行调整时间规则):* * * * * /absolute/path/to/your/sync_bitbucket.sh > /dev/null 2>&1
方案2:Webhook触发同步(实时性高,无无效轮询)
适合要求上游变更后立刻同步的场景,需要你的本地服务器可以被Bitbucket的公网请求访问到。
- 先完成方案1的前两步,初始化好仓库、写好同步脚本
- 第二步:搭建简单的Web服务接收Bitbucket事件通知
你可以用任意语言编写简单的HTTP服务,以下是Python示例:
启动服务后保证9000端口对公网开放。from flask import Flask import subprocess app = Flask(__name__) # 替换为你的同步脚本绝对路径 SYNC_SCRIPT = "/absolute/path/to/your/sync_bitbucket.sh" @app.route("/bitbucket-sync", methods=["POST"]) def sync(): # 生产环境建议添加Bitbucket签名校验逻辑,避免恶意请求触发同步 subprocess.run(SYNC_SCRIPT, shell=True, capture_output=True) return "success", 200 if __name__ == "__main__": app.run(host="0.0.0.0", port=9000) - 第三步:配置Bitbucket Webhook
进入对应Bitbucket仓库的设置页面,找到Webhooks配置项,新增Webhook:- 回调地址填
http://<你的服务器公网IP>:9000/bitbucket-sync - 触发事件仅勾选
Repository push即可
保存配置后,每次上游有代码推送,就会自动触发本地同步。
- 回调地址填
内容的提问来源于stack exchange,提问作者Dimster
相关产品推荐
相关产品推荐

