.git-ftp-ignore未忽略文件夹,如何清理git-ftp缓存?
解答
首先明确结论:git-ftp 没有类似 Git 本地暂存区的缓存设计,不存在git rm -r --cached类的本地清缓存命令。它判断待上传文件的依据是存储在 FTP 远端根目录的.git-ftp.log文件,文件内记录了上次成功推送的 Git Commit Hash,工具通过比对该 Hash 与当前目标 Commit 的差异,结合忽略规则生成上传列表。
规则持续不生效、scss文件夹重复上传,基本是忽略规则语法错误或流水线配置问题,按以下步骤处理:
1. 修正忽略规则
.git-ftp-ignore使用逐行正则匹配,语法和.gitignore的 glob 规则不通用,照搬.gitignore写法是最常见的失效原因。
要精确忽略仓库根目录下的整个scss文件夹,规则必须写为:
^scss/
注意事项:
- 开头的
^是正则起始锚点,确保仅匹配根目录下的scss,不会误伤其他层级的同名目录 - 禁止写为
/scss/、./scss/,开头的斜杠会被识别为普通字符,导致匹配失败 - 确认文件名为
.git-ftp-ignore(开头带点),存放在仓库根目录,且已提交到Git仓库(可通过git ls-files | grep git-ftp-ignore校验跟踪状态,避免文件本身被.gitignore排除导致流水线拉取不到)
提交修正后的规则后,后续提交中对scss的改动会直接被忽略,不会再上传。
2. 按需重置同步状态(等效清理远端缓存)
修正规则本身不需要重置缓存,如果需要彻底校准同步状态,根据场景二选一:
方案1:无感重置(生产环境推荐)
不会重传全量文件,直接让新规则从当前版本生效:
- 通过FTP工具编辑远端根目录的
.git-ftp.log - 将文件内的Hash替换为本次待推送的目标Commit完整Hash
- 保存后正常运行Bitbucket流水线即可
git-ftp会判定当前目标版本已同步,仅会推送该Commit之后的差异内容,新忽略规则即时生效。远端历史遗留的scss文件可手动删除,后续推送不会恢复。
方案2:全量重置(仅用于初始化异常场景)
如果同步状态混乱需要完全重推:
- 直接删除FTP根目录下的
.git-ftp.log - 正常运行流水线即可
git-ftp找不到历史同步记录会重新初始化,严格按照最新忽略规则,全量上传所有未被忽略的文件。该操作会重传全部有效文件,生产环境谨慎使用。
流水线配置排查
如果修正规则后仍重复全量上传,检查Bitbucket Pipelines脚本:
- 确认推送命令为
git ftp push,而非git ftp init:后者是初始化命令,每次执行都会触发全量上传 - 确认流水线工作目录为仓库根目录,避免工具读取不到
.git-ftp-ignore - 不要随意添加
--all、--force强制推送参数
内容的提问来源于stack exchange,提问作者e-israel
相关产品推荐
相关产品推荐

