python-gitlab

2023-11-04

二、获取gitlab token

1、进入账户设置界面

2、选择access tokens,填写信息生成token

三、使用

1、登录gitlab

import gitlab
 
#url: gitlab地址;token: 刚才生成的token
gl = gitlab.Gitlab(url, token)
2、Project
2.1 创建用户|项目|组

#直接创建项目
project = gl.projects.create({'name':'project1'})
 
# 创建用户
"""
常用参数:以下参数都可以使用user对象进行修改
email (必填)-电子邮件
username (必填)-用户名
name (必填)-名称
password (可选)-密码
can_create_group (可选)-用户可以创建组-正确或错误
skip_confirmation (可选)-跳过确认-正确或错误(默认)
external (可选)-将用户标记为外部用户-true或false(默认)
"""
user = gl.users.create({'email': 'qinsh@qq.com',
                        'password': 'qinsh123456',
                        'username': 'qinsh',
                        'name': '秦始皇'})


# 根据用户ID获取用户对象
# user = gl.users.get(1)
# 根据用户Git账号获取用户对象
# user = gl.users.list(username="qinsh")[0]
 
# 根据用户对象可以进行如下操作
username = user.username  # 获取用户Git账号
name = user.name  # 获取用户姓名
user_id = user.id  # 获取用户ID
 
# 修改用户属性
user.external = True  # 将用户标记为外部用户
user.save()
 
# 删除用户
gl.users.delete(user_id)  # 根据用户ID进行删除
user.delete()  # 根据用户对象直接进行删除

#为特定用户创建项目
alice = gl.users.list(username='alice')[0]
user_project = alice.projects.create({'name': 'project'})
 

# 创建组
group = gl.groups.create({'name': 'group1', 'path': 'group1'})
 
# 修改组信息
group.description = 'My awesome group'
group.save()


# 删除组
gl.groups.delete(1)  # 通过组ID进行删除
group.delete()  # 通过组对象直接删除
 
# 获取当前组的成员
members = group.members.list()
# members = group.members.all(all=True)
# 通过组成员ID获取组员member_id
# members = group.members.get(1)
 
# 添加一个成员到指定组
"""
GIT权限:
gitlab.GUEST_ACCESS = 10
gitlab.REPORTER_ACCESS = 20
gitlab.DEVELOPER_ACCESS = 30
gitlab.MAINTAINER_ACCESS = 40
gitlab.OWNER_ACCESS = 50
"""
member = group.members.create({'user_id': user_id,
                               'access_level': gitlab.GUEST_ACCESS})
# 修改组的权限
member.access_level = gitlab.DEVELOPER_ACCESS
member.save()
# or
member.access_level = 10
member.save()
 
# 将成员从某组移除
group.members.delete(1)  # 通过组成员ID进行移除member_id
member.delete()  # 通过组成员对象直接进行移除
                      
#为特定组创建项目
group_id = gl.groups.list(search='my-group')[0].id
project = gl.projects.create({'name': 'myrepo', 'namespace_id': group_id}) 
2.2 查找和搜索project

#获取项目。默认获取第一页的项目,每页20个
projects = gl.projects.list()
 
#获取指定页的项目
projects = gl.projects.list(page=2)
 
#获取所有项目
projects = gl.projects.list(all=True)
 
#根据项目名称搜索项目
projects = gl.projects.list(search='project_name')
 
#通过指定id 获取 project 对象
project = gl.projects.get(project_id)
 
#获取archived项目
projects = gl.projects.list(archived=1)
 
#根据项目visibility获取项目,public,internal,private
projects = gl.projects.list(visibility='public')
 
#获取当前用户(token的账户)拥有的项目
projects = gl.projects.list(owned=True)
 
#获取当前用户(token的账户)启动的项目
projects = gl.projects.list(starred=True)
 
#搜索结果排序
#在不指定的排序标准的情况下默认按照created_at,desc降序排列
#order_by参数:id, name, path, created_at, updated_at, last_activity_at. 
#sort参数:asc,desc.
#查找所有项目,并按照项目id升序排列
projects = gl.projects.list(all=True,order_by='id',sort=‘asc’)
2.3 project基本属性

p=gl.projects.get(460)
print(p)
#输出结果如下:
#可以直接通过p.id,p.name,p.namespace['id']的方式获取单个信息
{
  'id': 460,
  'description': '协议转换转发公共',
  'name': 'xy-transform-forward-common',
  'name_with_namespace': 'xy / xy-transform-forward-common',
  'path': 'xy-transform-forward-common',
  'path_with_namespace': 'xy/xy-transform-forward-common',
  'created_at': '2021-06-11T02:16:33.851Z',
  'default_branch': 'master',
  'tag_list': [],
  'ssh_url_to_repo': 'git@gitlab.xy.in:xy/xy-transform-forward-common.git',
  'http_url_to_repo': 'http://gitlab.xy.in/xy/xy-transform-forward-common.git',
  'web_url': 'http://gitlab.xy.in/xy/xy-transform-forward-common',
  'avatar_url': None,
  'star_count': 0,
  'forks_count': 1,
  'last_activity_at': '2021-07-02T08:47:37.645Z',
  '_links': {
    'self': 'http://gitlab.xy.in/api/v4/projects/460',
    'issues': 'http://gitlab.xy.in/api/v4/projects/460/issues',
    'merge_requests': 'http://gitlab.xy.in/api/v4/projects/460/merge_requests',
    'repo_branches': 'http://gitlab.xy.in/api/v4/projects/460/repository/branches',
    'labels': 'http://gitlab.xy.in/api/v4/projects/460/labels',
    'events': 'http://gitlab.xy.in/api/v4/projects/460/events',
    'members': 'http://gitlab.xy.in/api/v4/projects/460/members'
  },
  'archived': False,
  'visibility': 'private',
  'resolve_outdated_diff_discussions': False,
  'container_registry_enabled': True,
  'issues_enabled': True,
  'merge_requests_enabled': True,
  'wiki_enabled': True,
  'jobs_enabled': True,
  'snippets_enabled': True,
  'shared_runners_enabled': True,
  'lfs_enabled': True,
  'creator_id': 1,
  'namespace': {
    'id': 2,
    'name': 'xy',
    'path': 'xy',
    'kind': 'group',
    'full_path': 'xy',
    'parent_id': None
  },
  'import_status': 'none',
  'import_error': None,
  'open_issues_count': 0,
  'runners_token': 'dWTY9wbm_xMziGKNHLiy',
  'public_jobs': True,
  'ci_config_path': None,
  'shared_with_groups': [],
  'only_allow_merge_if_pipeline_succeeds': False,
  'request_access_enabled': False,
  'only_allow_merge_if_all_discussions_are_resolved': False,
  'printing_merge_request_link_enabled': True,
  'merge_method': 'merge',
  'permissions': {
    'project_access': None,
    'group_access': None
  }
}
2.4 修改和删除project
#修改基本属性
project.snippets_enabled = 1
project.save()
 
#项目头像可以作为数据(文件的内容)或文件来传递
#以二进制模式打开的对象
project.avatar = open('path/to/file.png', 'rb')
project.save()
 
#删除
gl.projects.delete(project_id)
project.delete()
2.5 project基本操作
2.5.1 分支管理
#通过指定project对象获取该项目的所有分支
branches = project.branches.list()
 
# 获取指定分支的属性
branch = project.branches.get('master')
 
# 创建分支
#ref: 从哪创建分支
branch = project.branches.create({'branch_name': 'feature1','ref': 'master'})
 
# 删除分支
project.branches.delete('feature1')
 
# 分支保护/取消保护
branch.protect()
branch.unprotect()
2.5.2 标签管理

# 获取指定项目的所有tags
tags = project.tags.list(all=True)
 
# 获取某个指定tag 的信息
tags = project.tags.list('1.0')
 
# 创建一个tag
tag = project.tags.create({'tag_name':'1.0', 'ref':'master'})
 
# 设置tags 说明:
tag.set_release_description('awesome v1.0 release')
 
# 删除tags
project.tags.delete('1.0')
# or
tag.delete()
2.5.3 提交管理
#获取所有commit
commits = project.commits.list()
 
# 获取指定commit的info
commit = project.commits.get('e3d5a71b')
 
# 创建一个commit
data = {
  'branch_name': 'master', # v3
  'commit_message': 'blah blah blah',
  'actions': [
    {
      'action': 'create',
      'file_path': 'blah',
      'content': 'blah'
    }
  ]
}
commit = project.commits.create(data)
2.5.4 合并管理
# 获取指定项目的所有merge request
mrs = project.mergerequests.list()
 
# 指定条件过滤 所有的merge request
# state: mr状态,可选参数merged, opened or closed
# order_by参数:created_at, updated_at
# sort参数: asc, desc
mrs = project.mergerequests.list(state='merged', sort='asc')
 
# 获取指定mr info
mr = project.mergerequests.get(mr_id)
 
#获取合并的全部提交列表
commits = mr.commits()
 
#获取合并的全部修改列表
changes = mr.changes()
 
#获取合并时将关闭的问题列表
mr.closes_issues()
 
# 创建一个merge request
mr = project.mergerequests.create({'source_branch':'cool_feature',
                  'target_branch':'master',
                  'title':'merge cool feature', })
                  
# 更新一个merge request 的描述
mr.description = 'New description'
mr.save()
 
# 开关一个merge request (close or reopen):
mr.state_event = 'close' # or 'reopen'
mr.save()
 
# 删除:
project.mergerequests.delete(mr_id)
# or
mr.delete()
 
# 接受:
mr.merge()

2.5.5 钩子管理
#获取指定项目的现有hooks:
hooks = project.hooks.list()
 
#获取指定的hook详情:
hook = project.hooks.get(hook_id)
 
#创建hook
hook = project.hooks.create({'url': 'http://my/action/url', 'push_events': 1})
 
#更新hook
hook.push_events = 0
hook.save()
 
#删除hook
project.hooks.delete(hook_id)
# or
hook.delete()
2.5.6 获取项目文件内容
f = project.files.get(file_path=git_path, ref=分支名)
file_content = f.decode()
file_content = file_content.decode()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python-gitlab 的相关文章

  • Django:模拟模型上的字段

    如何将模拟对象分配给该模型上的用户字段 无论如何都要绕过 SomeModel user 必须是 User 实例 检查吗 class SomeModel models Model user models ForeignKey User 我不会
  • 如何将base64字符串直接解码为二进制音频格式

    音频文件通过 API 发送给我们 该文件是 Base64 编码的 PCM 格式 我需要将其转换为 PCM 然后再转换为 WAV 进行处理 我能够使用以下代码解码 gt 保存到 pcm gt 从 pcm 读取 gt 保存为 wav decod
  • boto3 资源(例如 DynamoDB.Table)的类型注释

    The boto3库提供了几种返回资源的工厂方法 例如 dynamo boto3 resource dynamodb Table os environ DYNAMODB TABLE 我想注释这些资源 以便我可以获得更好的类型检查和完成 但我
  • Python从int到string的快速转换

    我正在用 python 求解大量阶乘 并发现当我完成计算阶乘时 需要相同的时间才能转换为字符串以保存到文件中 我试图找到一种将 int 转换为字符串的快速方法 我将举一个计算和 int 转换时间的例子 我正在使用通用的 a str a 但感
  • TF map_fn 或 while_loop 用于不同形状的张量列表

    我想处理不同形状的张量序列 列表 并输出另一个张量列表 考虑每个时间戳上具有不同隐藏状态大小的 RNN 就像是 输入 tf ones 1 2 2 tf ones 2 2 3 tf ones 3 2 1 输出 tf zeros 1 2 4 t
  • Tweepy StreamListener 到 CSV

    我是 python 新手 我正在尝试开发一个应用程序 使用 Tweepy 和 Streaming API 从 Twitter 检索数据并将数据转换为 CSV 文件 问题是此代码不会创建输出 CSV 文件 也许是因为我应该将代码设置为在实现例
  • 更新 Sqlalchemy 中的多个列

    我有一个在 Flask 上运行的应用程序 并使用 sqlalchemy 与数据库交互 我想用用户指定的值更新表的列 我正在使用的查询是 def update table value1 value2 value3 query update T
  • 可以用 Django 制作移动应用程序吗?

    我想知道我是否可以在我的网站上使用 Django 代码 并以某种方式在移动应用程序 Flutter 等框架中使用它 那么是否可以使用我现在拥有的 Django 后端并在移动应用程序中使用它 所以就像models views etc 是的 有
  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • 使用 scipy curve_fit 拟合噪声指数的建议?

    我正在尝试拟合通常按以下方式建模的数据 def fit eq x a b c d e return a 1 np exp x b c np exp x d e x np arange 0 100 0 001 y fit eq x 1 1 1
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • django-admin.py makemessages 不起作用

    我正在尝试翻译一个字符串 load i18n trans Well Hello there how are you to Hola amigo que tal 我的 settings py 文件有这样的内容 LOCALE PATHS os
  • PyTorch DataLoader 对并行运行的批次使用相同的随机种子

    有一个bug https tanelp github io posts a bug that plagues thousands of open source ml projects 在 PyTorch Numpy 中 当并行加载批次时Da
  • 使用 numpy 在 python 中执行最大方差旋转

    我正在研究矩阵的主成分分析 我已经找到了如下所示的组件矩阵 A np array 0 73465832 0 24819766 0 32045055 0 3728976 0 58628043 0 63433607 0 72617152 0 5
  • 检测 IDLE 的存在/如何判断 __file__ 是否未设置

    我有一个脚本需要使用 file 所以我了解到 IDLE 没有设置这个 有没有办法从我的脚本中检测到 IDLE 的存在 if file not in globals file is not set 如果你想做一些特别的事情 file 未设置
  • 更改 Python Cmd 模块处理自动完成的方式

    我有一个 Cmd 控制台 设置为自动完成 Magic the Gathering 收藏管理系统的卡牌名称 它使用文本参数在数据库中查询卡片 并使用结果自动完成 建议卡片 然而 这些卡片名称有多个单词 Cmd 会从last到行尾的空间 例如
  • Python 通过从现有 csv 文件中过滤选定的行来写入新的 csv 文件

    只是一个问题 我试图将 csv 文件中的选定行写入新的 csv 文件 但出现错误 我试图读取的 test csv 文件是这样的 两列 2013 9 1 2013 10 2 2013 11 3 2013 12 4 2014 1 5 2014
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro
  • 长/宽数据到宽/长

    我有一个数据框 如下所示 import pandas as pd d decil 1 decil 1 decil 2 decil 2 decil 3 decil 3 decil kommune AA BB AA BB AA BB 2010

随机推荐

  • 制作Centos7自动安装镜像(三)

    文章总览 制作Centos7自动安装镜像 在这里说明一下 我们制作自动化安装镜像用的是linux的kickstart技术 这个技术的核心是制作一个ks cfg文件 将所有需要自动化安装的内容写成一个脚本 放置在镜像中 并在安装菜单中指定这个
  • 文件I/O和标准I/O的区别

    文件I O 文件I O是操作系统提供的操作文件的API 例如Linux中的open 和write 等 这些函数可以完成文件的操作 但是效率不一定很高 标准I O 标准I O是应用层提供的库函数 例如C语言提供的文件操作函数fopen fcl
  • Qt信息隐藏(Q_D/Q_Q)介绍

    目录 1 基本介绍与二进制兼容 2 二进制兼容的设计原则 3 常见c qt信息隐藏 4 Q Q Q D介绍 5 定制可编辑treewidget与如何访问基类的Private 6 总结 1 基本介绍与二进制兼容 作者虽然一直在linux做开发
  • Vue + Spring Boot 项目实战(分享)

    第一部分Vue Spring Boot 项目实战 一 项目简介Vue Spring Boot 项目实战 二 搭建 Vue js 项目Vue Spring Boot 项目实战 三 前后端结合测试 登录页面开发 Vue Spring Boot
  • Google earth engine学习笔记 2: 通过分析提取植被物候的代码学习gee 1

    Google earth engine学习笔记 2 通过分析提取植被物候的代码学习gee 1 通过一篇 根据 sentinel 2 影像计算植被指数并提取植被物候 的文章所附的代码学习gee 原作者的github 写这个东西是为了自己学习
  • python-scrapy框架(三)Pipeline文件的用法讲解

    Pipeline是一个独立的模块 用于处理从Spider中提取的Item对象 实现对数据的进一步处理 存储和清洗等操作 下面将详细介绍Scrapy框架中Pipeline的用法 1 创建Pipeline类 为了使用Pipeline类 我们需要
  • 物联网终端算法

    物联网终端算法是指在物联网终端设备上运行的各种算法 包括数据采集 数据预处理 数据传输 数据存储 数据处理 数据分析等算法 以下是物联网终端算法的一些具体应用 数据采集算法 用于采集各种传感器数据 包括温度 湿度 气压 光照 声音 震动等信
  • 华为OD机试 Java 实现【最优策略组合下的总的系统消耗资源数】【牛客练习题】,附详细解题思路

    目录 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 4 思路 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 一 题目描述 在通信系统中有一个常见的问题是对用
  • 0成本的售卖高考资料虚拟资源,这样的玩法顶得上一家大公司

    在这个快速发展 每天的信息成千上万的世界中 对于网络从业者来说 网络的信息就是金钱 以至于让活在当下的大多数年轻人 中年人 甚至在校学生 都会想在互联网这个金矿去分一块肉吃 但是每个人的时间都是平等的 一天24小时出去吃饭睡觉 甚至除去上班
  • 同时校验手机号和座机号

    文章目录 同时校验手机号和座机号 一 使用实例 同时校验手机号和座机号 filter方法是js中常用的方法 提示 以下是本篇文章正文内容 下面案例可供参考 一 使用实例 1 同时校验手机号和座机号 export function check
  • 机器学习-XGBoost

    一 XGBoost是什么 XGBoost是基于GBDT实现的 但GBDT算法只利用了一阶的导数信息 xgboost对损失函数做了二阶的泰勒展开 并在目标函数之外加入了正则项对整体求最优解 用以权衡目标函数的下降和模型的复杂程度 避免过拟合
  • 手机java开发环境,看完跪了

    01 分布式限流 Nginx ZooKeeper 1 1 分布式限流之Nginx 请解释一下什么是 Nginx 请列举 x Nginx 的一些特性 请列举 x Nginx 和 和 Apache 之间的不同点 请解释 x Nginx 如何处理
  • VUE实用技术点

    1 路由懒加载 能让你首次加载更快 路由懒加载可以让我们的包不需要一次把所有的页面的加载进来 只加载当前页面的路由组件就行 举个栗子 如果这样写 加载的时候会全部都加载进来 const router new VueRouter routes
  • ESDA in PySal (2) localjoincounts

    ESDA in PySal 2 localjoincounts 参考 https blog csdn net angel0929 article details 128433265 https blog csdn net allenlu20
  • 知乎转来的、、、Nuitka用法

    Python打包exe的王炸 Nuitka Python与模具 Python在制造领域的使用 关注 1 726 人 赞同了该文章
  • Ubuntu安装JDK1.8(手动解压JDK压缩包)

    1 官网下载JDK https www oracle com technetwork java javase downloads jdk8 downloads 2133151 html 2 解压缩 下载的版本jdk 8u211 linux
  • ubuntu18.04安装wireshark3.x与tshark3.x

    默认安装tshark会是2 x 以下是安装3 x的方法 使用命令 sudo add apt repository ppa wireshark dev stable sudo apt update 安装wireshark3 x sudo ap
  • IPv6 PMTUD 路径发现机制 工作原理

    Technorati 标签 IPv6 PMTUD PMTUD IPv6 PMTUD是IPv6的一个工作机制 其主要的目的就是 当网络源发送数据报文到目的的时候 避免分段 也可以称为分片 源节点可以使用发现整个路径上面最大的MTU与目的节点通
  • Android opengles2.0 背景透明

    在Android上开发OpenGL ES应用时 默认的背景不透明的 即使使用了glClearColor来设置了不透明度为0 且纹理图片中有透明的部分也可能被GLView的背景填充 那么首先解决GLView的透明背景问题吧 要设置透明的第一步
  • python-gitlab

    一 安装 pip install python gitlab 官方文档 http python gitlab readthedocs io en stable API https docs gitlab com ce api project