博主搞了个项目,需要在线静默更新用户程序文件夹下的一些文件。捣鼓了半天终于搞出来了,特来分享。

工具:python 3.X, GitLab

用到的库:gitlab

注:博主这里的Gitlab是同事在服务器上弄好的,具体怎么在服务器上搭建GitLab,博主也不会…(~ = ▽ = )~,等会上传本书,大家一起学习吧。

第一步:安装python-gitlab包

pip install python-gitlab

 

第二步:在GitLab网页上生成AccessToken

账户——Settings

pycharm 安装 gitpython python安装gitlab_python

左侧Access Tokens,根据要求填写,建议有效期弄长点,Scope勾选 □API,弄完点击create。

然后一定要把生成的Access Token另外存起来!!因为你一旦离开这个界面,就再也看不到了。

pycharm 安装 gitpython python安装gitlab_git_02

第三步:开始码代码

直接上博主的测试代码:

这里注意,下载后初次decode会得到bytes格式的内容,

针对编译过的文件,比如 .pyd, .exe类的文件,直接使用bytes格式配合‘wb’形式写入。

但是对于可编辑的文件,比如 .py 文件需要二次decode,获得str()格式,使用‘w’写入,这样中文才不会乱码。

可以用正则表达式来判断文件后缀名。

博主亲身试验!

# gilab包
import gitlab

class onlineUpdate:
    # 初始化
    def __init__(self):
        # 服务器地址
        self.url = 'https://xx.xx.xx.xx'
        # 前面生成的Access Token
        self.accessToken = 'xxxxxxxx'

    # 登录
    def login(self):
        gl = gitlab.Gitlab(self.url,self.accessToken)
        return gl

    # 获得项目:projectID的格式随意,反正我就写了个数字进去
    def getProject(self,projectID):
        gl = self.login()
        projects = gl.projects.get(projectID)
        return projects

    # 获得project下单个文件
    def getContent(self):
        projects = self.getProject(5)
        # 获得文件
        f = projects.files.get(file_path='paramRef.cp36-win_amd64.pyd',ref='master')
        # 第一次decode获得bytes格式的内容
        content = f.decode()
        # 第二次decode获得str
        # content = content.decode()
        # 存到本地
        with open('paramRef.cp36-win_amd64.pyd', 'wb') as code:
            code.write(content)

# 测试
ou = onlineUpdate()
ou.getContent()

运行后,文件就从Gitlab上下载下来啦。~(=▽=~)

这里为跟博主一样不熟悉Git的人讲解一下:

1. getContent方法里的ref = ‘master’,是指上传文件时的target Branch,一般好像默认都是master?

pycharm 安装 gitpython python安装gitlab_Git_03

2. project ID 

python-gitlab也是可以根据名字找project的,但是博主尝试了一次失败了?偷懒直接用ID了。

pycharm 安装 gitpython python安装gitlab_python_04

3. 存本地的时候,with open 里的filepath一定要把目录写写清楚,