【发布时间】:2021-12-18 02:26:44
【问题描述】:
我的任务是将存储库迁移到 gitlab,我决定使用 python-gitlab 自动化该过程。除了二进制文件或二进制文件,如编译的目标文件 ( .o ) 或 .zip 文件,一切正常。 (我知道存储库不是存放二进制文件的地方。我使用我得到的和被告知要做的事情。)
我可以使用以下方式上传它们:
import gitlab
project = gitlab.Gitlab("git_adress", "TOKEN")
bin_content = base64.b64encode(open("my_file.o", 'rb').read() ).decode()
然后:
data = {'branch':'main', 'commit_message':'go away', 'actions':[{'action': 'create', 'file_path': "my_file.o", 'content': bin_content, 'encode' : 'base64'}]}
project.commits.create(data)
问题是 gitlab 存储库中此类文件的内容类似于:
f0VMRgIBAQAAAAAAAAAAAAEAPgABAAAAAAAAAAAAA....
这不是我想要的。
如果我不.decode() 我会收到错误消息:
TypeError:字节类型的对象不是 JSON 可序列化的
这是预期的,因为我发送了以二进制模式打开并使用base64 编码的文件。
我希望上传/存储此类文件,就像我使用 Web GUI“上传文件”选项上传它们时一样。
是否可以使用 python-gitlab API 来实现这一点?如果有,怎么做?
【问题讨论】:
-
"问题是 gitlab 存储库中此类文件的内容类似于..." 所以你不想上传你的文件作为 base64 编码,但是您在上传之前对其进行了显式编码...?
-
@esqew 是的。这是(到目前为止)使用 python-gitlab API 将它们(二进制文件)放入存储库的唯一方法。如果我不使用 base64 编码,当我只发送“rb”文件时,会发生同样的“JSON”序列化错误。
标签: python api gitlab binaryfiles python-gitlab