如何使用python代码操作git代码


Posted in Python onFebruary 29, 2020

git简介

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

Git 与 SVN 区别

Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征。

Git 与 SVN 区别点:

1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。

2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。

3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。

4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。

5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

如何使用python代码操作git代码

python操作git

安装模块

pip3 install gitpython

基本使用

import os
from git.repo import Repo
# 创建本地路径用来存放远程仓库下载的代码
download_path = os.path.join('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('NB')
repo = Repo(local_path)
repo.git.pull()
# ############## 3. 获取所有分支 ##############
import os
from git.repo import Repo
local_path = os.path.join('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('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('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('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. 打包代码 ##############
import os
from git.repo import Repo
local_path = os.path.join(NB')
repo = Repo(local_path)
with open(os.path.join('NB.tar'), 'wb') as fp:
 repo.archive(fp)

将上述所有的方法封装到类中以便后续的调用(后续如果你想要操作git直接拷贝使用即可)

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)

到此这篇关于如何使用python代码操作git代码的文章就介绍到这了,更多相关python 操作git内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python 爬取微信文章
Jan 30 Python
python cx_Oracle模块的安装和使用详细介绍
Feb 13 Python
遗传算法之Python实现代码
Oct 10 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
Python3.5文件修改操作实例分析
May 01 Python
详解python编译器和解释器的区别
Jun 24 Python
pyQt5实时刷新界面的示例
Jun 25 Python
python字符串查找函数的用法详解
Jul 08 Python
零基础学python应该从哪里入手
Aug 11 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
安装python依赖包psycopg2来调用postgresql的操作
Jan 01 Python
Elasticsearch 数据类型及管理
Apr 19 Python
使用 Python 遍历目录树的方法
Feb 29 #Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 #Python
在python3中实现查找数组中最接近与某值的元素操作
Feb 29 #Python
python pandas移动窗口函数rolling的用法
Feb 29 #Python
基于Python fminunc 的替代方法
Feb 29 #Python
浅谈SciPy中的optimize.minimize实现受限优化问题
Feb 29 #Python
使用python求解二次规划的问题
Feb 29 #Python
You might like
用php实现批量查询清除一句话后门的代码
2008/01/20 PHP
PHP缓存机制Output Control详解
2014/07/14 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
JavaScript下利用fso判断文件是否存在的代码
2010/12/11 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
js opener的使用详解
2014/01/11 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
2016/05/10 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
2019/04/11 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
2款Python内存检测工具介绍和使用方法
2014/06/01 Python
从Python的源码来解析Python下的freeblock
2015/05/11 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
浅析PEP572: 海象运算符
2019/10/15 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
麦当劳印度网上订餐:McDelivery
2020/03/16 全球购物
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
参观接待方案
2014/03/17 职场文书
爱心捐助倡议书
2014/05/19 职场文书
奉献演讲稿范文
2014/05/21 职场文书
面试必备的求职信
2014/05/25 职场文书
小学端午节活动总结
2015/02/11 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
2019年年中职场激励人心语录30条
2019/08/07 职场文书
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS