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

使用PyGithub推送Git LFS管理的MP4文件至GitHub失败求助

问题分析

你的错误本质是GitHub Contents API不适合上传大文件(尤其是LFS管理的文件):

  • 你用create_file/update_file方法上传时,是把整个MP4文件base64编码后通过API传输,编码后体积会增加约33%,大文件很容易触发超时或API大小限制(GitHub Contents API单文件上限是100MB,编码后相当于原始文件约75MB就到顶了)。
  • 另外,Git LFS管理的文件,仓库中实际存储的是LFS指针文件(一个几百字节的文本文件,包含实际文件的哈希和LFS服务器地址),而不是原始MP4文件。直接上传原始文件会绕过LFS,既不符合仓库的LFS配置,也会导致大文件上传失败。
解决方案

方法一:用Python调用Git LFS命令行(最简便可靠)

直接通过Python的subprocess模块调用Git和Git LFS的命令来完成上传,这是LFS文件上传的标准方式:

import subprocess
import os

# 配置参数
repo_path = "/本地仓库路径"
file_path = "/video.mp4"
commit_message = "Add or update video file"

# 切换到仓库目录
os.chdir(repo_path)

# 执行LFS相关命令
try:
    # 添加文件到LFS追踪
    subprocess.run(["git", "lfs", "track", "*.mp4"], check=True)
    # 提交变更(包括.gitattributes和视频文件)
    subprocess.run(["git", "add", file_path, ".gitattributes"], check=True)
    subprocess.run(["git", "commit", "-m", commit_message], check=True)
    # 推送到远程仓库
    subprocess.run(["git", "push"], check=True)
    print("文件上传成功")
except subprocess.CalledProcessError as e:
    print(f"上传失败: {e}")

注意:需要确保本地已经安装Git和Git LFS,并且仓库已经关联远程仓库,本地Git已经配置好GitHub凭证(比如SSH密钥或令牌)。

方法二:手动生成LFS指针并上传(纯Python实现,较复杂)

如果不想用命令行,需要手动生成LFS指针文件,然后上传指针到GitHub,再把原始文件推送到LFS服务器:

  1. 计算文件的SHA-256哈希和文件大小
  2. 生成LFS指针内容
  3. 用PyGithub上传指针文件到仓库
  4. 通过LFS API上传原始文件到GitHub LFS服务器

这个步骤繁琐,需要处理LFS的认证和上传逻辑,一般不推荐,除非有特殊需求。

额外注意事项
  • 确保仓库已经初始化Git LFS:执行git lfs install和git lfs track "*.mp4",并提交.gitattributes文件到仓库。
  • GitHub LFS有存储空间和带宽限制,超出免费额度需要付费。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:04:52