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

LFTP同步远程FTP与本地GitLab仓库无变更问题求助

问题

使用LFTP从远程FTP服务器拉取文件到GitLab仓库,流水线执行时显示"Removing file"、"Transferring file"等正常日志,调试模式下路径也正确,但GitLab仓库始终无变更。该功能昨日正常,当前主要使用force_pull阶段,推送到FTP的功能正常,FTP变量配置无误。

流水线配置代码
image: alpine:latest

stages:
  - push
  - force_pull
  - pull


variables:
  op: "1"
  MYTHICLOCALDIR: ./Mythic
  MYTHICREMOTEDIR: ./plugins/MythicMobs 
  LIBLOCALDIR: ./Lib
  LIBREMOTEDIR: ./plugins/MythicLib


pull:
  stage: pull
  script:
    - apk add lftp sudo 
    #- apt-get update -qq && apt-get install -y -qq lftp
    - lftp -c "set ftp:ssl-allow no;set ftp:ssl-protect-data no; open -u $FTPUSER,$FTPPASS $FTPHOST; mirror -v -e $MYTHICREMOTEDIR $MYTHICLOCALDIR --ignore-time --parallel=60/; quit"
    - lftp -c "set ftp:ssl-allow no;set ftp:ssl-protect-data no; open -u $FTPUSER,$FTPPASS $FTPHOST; mirror -v -e $LIBREMOTEDIR $LIBLOCALDIR --ignore-time --parallel=60/; quit"
  only:
    - schedules
  environment:
    name: Mythic_Pull
  parallel:
    matrix:
      - node_version: "12"

push:
  stage: push
  script:
    - apk add lftp sudo 
    #- apt-get update -qq && apt-get install -y -qq lftp
    -  lftp -c "set ftp:ssl-allow no;set ftp:ssl-protect-data no; open -u $FTPUSER,$FTPPASS $FTPHOST; mirror -R -v -e -p $MYTHICLOCALDIR $MYTHICREMOTEDIR --ignore-time --parallel=60 -x .gitkeep/; quit"
    -  lftp -c "set ftp:ssl-allow no;set ftp:ssl-protect-data no; open -u $FTPUSER,$FTPPASS $FTPHOST; mirror -R -v -e -p $LIBLOCALDIR $LIBREMOTEDIR --ignore-time --parallel=60 -x .gitkeep/; quit"
  rules:
    - if: '$op == "2"'
      when: always
  environment:
    name: Mythic_Push
  parallel:
    matrix:
      - node_version: "12"

force_pull:
  stage: force_pull
  script:
    - apk add lftp sudo
    - apk add git sudo
    - git config user.email "$GITLAB_USER_EMAIL"
    - git config user.name "$GITLAB_USER_NAME"
    #- apt-get update -qq && apt-get install -y -qq lftp
    #- lftp -c "set ftp:ssl-allow no;set ftp:ssl-protect-data no; open -u $FTPUSER,$FTPPASS $FTPHOST; mirror -v -e $MYTHICREMOTEDIR $MYTHICLOCALDIR --ignore-time --delete-first --parallel=100/;"
    - lftp -c "set ftp:ssl-allow no;set ftp:ssl-protect-data no; open -u $FTPUSER,$FTPPASS $FTPHOST; mirror -v $LIBREMOTEDIR $LIBLOCALDIR --ignore-time --scan-all-first --transfer-all --log=lftp-log --parallel=60/"
    - git add . 
    - git commit -m "Initial commit"
    - git push origin master
  rules:
    - if: '$op == "1"'
      when: always
  environment:
    name: Mythic_Force_Pull
  parallel:
    matrix:
      - node_version: "12"
排查与解决方法
  • 验证Git追踪状态:在git add .后添加git status命令,查看是否有文件被标记为变更。如果显示"nothing to commit",说明下载的文件可能不在Git工作目录,或被.gitignore规则排除。
    - git add . 
    - git status
    - git commit -m "Initial commit"
    
  • 确认文件是否真实下载:在LFTP命令后添加目录查看命令,检查文件是否存在于目标本地目录:
    - lftp -c "..."  # 原LFTP命令
    - ls -la $LIBLOCALDIR
    
  • 检查Git推送权限与分支:确认流水线使用的Git用户有推送master分支的权限;若仓库默认分支不是master,需将git push origin master修改为对应分支(如main)。
  • 修正LFTP路径问题:确认远程FTP路径$LIBREMOTEDIR是否为相对路径(相对于FTP登录根目录),如果是绝对路径需去掉开头的./。
  • 处理无变更的提交:若文件内容未实际变化但需要强制提交,可使用git commit --allow-empty,但优先排查文件是否真的需要更新。

内容的提问来源于stack exchange,提问作者Holy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:39:58