安装

pip3 install gitpython

基本使用

# 从远处仓库下载代码到本地

import os

from git.repo import Repo

# 创建本地存储地址

download_path = os.path.join('jason','NB')

# 从远程仓库下载代码

Repo.clone_from('https://github.com/DominicJi/TeachTest.git',to_path=download_path,branch='master')

常用方法大全

# ############## 2. pull最新代码 ##############

import os

from git.repo import Repo

local_path = os.path.join('jason', 'NB')

repo = Repo(local_path)

repo.git.pull()

# ############## 3. 获取所有分支 ##############

import os

from git.repo import Repo

local_path = os.path.join('jason', 'NB')

repo = Repo(local_path)

branches = repo.remote().refs

for item in branches:

print(item.remote_head)

# ############## 4. 获取所有版本 ##############

import os

from git.repo import Repo

local_path = os.path.join('jason', 'NB')

repo = Repo(local_path)

for tag in repo.tags:

print(tag.name)

# ############## 5. 获取所有commit ##############

import os

from git.repo import Repo

local_path = os.path.join('jason', 'NB')

repo = Repo(local_path)

# 将所有提交记录结果格式成json格式字符串 方便后续反序列化操作

commit_log = repo.git.log('--pretty={"commit":"%h","author":"%an","summary":"%s","date":"%cd"}', max_count=50,

date='format:%Y-%m-%d %H:%M')

log_list = commit_log.split("\n")

real_log_list = [eval(item) for item in log_list]

print(real_log_list)

# ############## 6. 切换分支 ##############

import os

from git.repo import Repo

local_path = os.path.join('jason', 'NB')

repo = Repo(local_path)

before = repo.git.branch()

print(before)

repo.git.checkout('master')

after = repo.git.branch()

print(after)

repo.git.reset('--hard', '854ead2e82dc73b634cbd5afcf1414f5b30e94a8')

# ############## 7. 打包代码 ##############

with open(os.path.join('jason', 'NB.tar'), 'wb') as fp:

repo.archive(fp)

封装成类

需要使用直接拷贝即可

import os

from git.repo import Repo

from git.repo.fun import is_git_dir

class GitRepository(object):

"""

git仓库管理

"""

def __init__(self, local_path, repo_url, branch='master'):

self.local_path = local_path

self.repo_url = repo_url

self.repo = None

self.initial(repo_url, branch)

def initial(self, repo_url, branch):

"""

初始化git仓库

:param repo_url:

:param branch:

:return:

"""

if not os.path.exists(self.local_path):

os.makedirs(self.local_path)

git_local_path = os.path.join(self.local_path, '.git')

if not is_git_dir(git_local_path):

self.repo = Repo.clone_from(repo_url, to_path=self.local_path, branch=branch)

else:

self.repo = Repo(self.local_path)

def pull(self):

"""

从线上拉最新代码

:return:

"""

self.repo.git.pull()

def branches(self):

"""

获取所有分支

:return:

"""

branches = self.repo.remote().refs

return [item.remote_head for item in branches if item.remote_head not in ['HEAD', ]]

def commits(self):

"""

获取所有提交记录

:return:

"""

commit_log = self.repo.git.log('--pretty={"commit":"%h","author":"%an","summary":"%s","date":"%cd"}',

max_count=50,

date='format:%Y-%m-%d %H:%M')

log_list = commit_log.split("\n")

return [eval(item) for item in log_list]

def tags(self):

"""

获取所有tag

:return:

"""

return [tag.name for tag in self.repo.tags]

def change_to_branch(self, branch):

"""

切换分值

:param branch:

:return:

"""

self.repo.git.checkout(branch)

def change_to_commit(self, branch, commit):

"""

切换commit

:param branch:

:param commit:

:return:

"""

self.change_to_branch(branch=branch)

self.repo.git.reset('--hard', commit)

def change_to_tag(self, tag):

"""

切换tag

:param tag:

:return:

"""

self.repo.git.checkout(tag)

if __name__ == '__main__':

local_path = os.path.join('codes', 'luffycity')

repo = GitRepository(local_path,remote_path)

branch_list = repo.branches()

print(branch_list)

repo.change_to_branch('dev')

repo.pull()

项目代码

服务器管理

class Project(models.Model):

"""

项目表

"""

title = models.CharField(max_length=32,verbose_name='项目名')

repo = models.CharField(max_length=255,verbose_name='仓库地址')

# choices参数

env_choices = (

('prod','正式'),

('test','测试')

)

env = models.CharField(max_length=16,verbose_name='环境',choices=env_choices,default='test')

代码优化

1.公用添加页面

2.将所有的modlform单独开设文件夹存储

3.对modelform再次优化 对modelform定义一个父类

from django.forms import ModelForm

class BaseModelForm(ModelForm):

# 将不需要bootstrap样式的字段放入

exclude_bootstrap = []

def __init__(self,*args,**kwargs):

super().__init__(*args,**kwargs)

# 给字段加上form-control样式

# self.fields = {'字段名':字段对象}

for k,field in self.fields.items():

if k in self.exclude_bootstrap: # 排除不需要加样式的字段

continue

field.widget.attrs['class'] = 'form-control'

# 其他modelform书写

from app01 import models

from app01.myform.mybase import BaseModelForm

class ProjectModelForm(BaseModelForm):

class Meta:

model = models.Project

fields = '__all__'

4.给项目表新增线上项目地址和服务器字段

# 扩展字段

path = models.CharField(max_length=255,verbose_name='线上项目地址',default='/data/tmp')

# 项目与服务器的关系表

servers = models.ManyToManyField(to='Server',verbose_name='关联服务器')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持python博客。

python怎么直接操作git_基于python实现操作git过程代码解析相关推荐

  1. python批量处理csv_Python批量处理csv并保存过程代码解析

    本篇文章小编给大家分享一下Python批量处理csv并保存过程代码解析,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 需求: 1.大量csv文件,以数字命 ...

  2. “基于医疗知识图谱的问答系统”代码解析(一)

    "基于医疗知识图谱的问答系统"代码解析(一) build_medicalgraph.py -建立医疗知识图谱的代码解析 "基于医疗知识图谱的问答系统"代码解析( ...

  3. python工业自动化仿真_ABAQUS 中基于 Python 脚本语言开发实现仿真自动化操作

    进行 ABAQUS 开发编程前,首先需要明白 ABAQUS 有限元分析思路和基本流程,以及 Python 基本语法和面向对象编程有基本的认识,下面是 Python 和 ABAQUS 的开发模板: # ...

  4. python查询银行汇款_基于Python实现一个简单的银行转账操作

    前言 在进行一个应用系统的开发过程中,从上到下一般需要四个构件:客户端-业务逻辑层-数据访问层-数据库,其中数据访问层是一个底层.核心的技术.而且在实际开发中,数据库的操作也就是说数据访问层都是嵌套在 ...

  5. python自动化测试xpath_Selenium自动化测试实例基于python

    一.Selenium介绍 Selenium是一个Web开源自动化测试框架,具有页面级操作.模拟用户真实操作.API从系统层面触发事件等特点. 1.版本 Selenium 1.0  Sever/Clie ...

  6. 用python做炒股软件-python程序源码_基于python的炒股软件

    股票模拟交易系统设计与实现 不但能够进行界面的设计,还可以实现各个窗口的关联,通过WPF实现和其余窗口的关联,而且WPF中的类不但能够和其中一个窗口进行关联,还可以跟许多功能操作接口,WPF在对窗口对 ...

  7. 用python做双人五子棋_基于python的socket实现单机五子棋到双人对战

    基于python的socket实现单机五子棋到双人对战,供大家参考,具体内容如下 本次实验使用python语言.通过socket进行不同机器见的通信,具体可以分为以下四步:1.创建ServerSock ...

  8. python appium自动化测试框架unittest_Appium基于Python unittest自动化测试 自动化测试框架 -- PO并生成html测试报告...

    基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...

  9. python 工资管理软件_基于[Python]的员工管理系统

    基于[Python]的员工管理系统 -------------------------------- 简介 使用python语言来完成一个员工管理系统,员工信息包含:员工工号,姓名, 年龄,性别,职位 ...

最新文章

  1. Servlet运行原理以及生命周期
  2. Nature:iHMP之“微生物组与炎症性肠病”
  3. oracle解锁system密码,Oracle System密码忘记 密码修改、删除账号锁定lock
  4. python资料书-《Python数据分析与应用》——图书配套资料下载
  5. 设计模式6——创建型模式之原型模式
  6. SAP Fiori Elements List Report table 里的普通按钮,Global 按钮 和 Determining 按钮
  7. azure机器学习_Microsoft Azure机器学习x Udacity —第4课笔记
  8. Tips--Anaconda安装TensorFlow报错ImportError: DLL load failed
  9. Java8中的Stream
  10. 微型计算机由5大部分,微机原理答案 (5)
  11. 谷歌语音识别_谷歌 语音识别 语种 - 云+社区 - 腾讯云
  12. HTML 多选框
  13. 调用Yahoo API监控外汇汇率
  14. ESP32-C3入门教程 系统篇①——FreeRTOS系统时钟Tick
  15. 5-基于51单片机步进电机的控制研究(原理图工程+仿真工程+答辩论文+答辩PPT)
  16. 信息系统监理与审计 我国实践与美国的经验
  17. 基于结构光投影三维重建:格雷码编码与解码
  18. (附源码)计算机毕业设计ssm高校学生综合素质测评系统
  19. Radware攻击缓解措施成功抵御DDoS攻击
  20. Experience 发现问题 分析问题 解决问题

热门文章

  1. 【求助】Android开发中的数据持久化
  2. C#的变迁史 - C# 4.0 之多线程篇
  3. 《不要做浮躁的嵌入式工程师》观后感
  4. 大型企业网络配置系列课程详解(六) --PPP链路的配置与相关概念的理解
  5. Checkbox与RadioGroup的使用方法
  6. 使用xorm工具,根据数据库自动生成 go 代码
  7. deepin系统15.6版本安装执行那个exe文件_深度系统(Deepin Linux)U盘安装教程
  8. python卸载_手把手教Python环境安装
  9. 原生mysql启动_单实例MySQL的启动和关闭的方法
  10. 并注册烧写钩子 获取启动介质类型_鸿蒙OS开源代码精要解读之—— 系统服务框架子系统(服务启动)...