如何使用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脚本来删除指定容量以上的文件的教程
May 04 Python
Python中的id()函数指的什么
Oct 17 Python
django 实现编写控制登录和访问权限控制的中间件方法
Jan 15 Python
python实现一个简单的udp通信的示例代码
Feb 01 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
Feb 22 Python
【python】matplotlib动态显示详解
Apr 11 Python
python项目对接钉钉SDK的实现
Jul 15 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
pytorch 固定部分参数训练的方法
Aug 17 Python
python创建子类的方法分析
Nov 28 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
Jan 08 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
Feb 22 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 解压rar文件及zip文件的方法
2014/05/05 PHP
yii中widget的用法
2014/12/03 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2018/08/21 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
python安装以及IDE的配置教程
2015/04/29 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
python常见排序算法基础教程
2017/04/13 Python
Python 中的Selenium异常处理实例代码
2018/05/03 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
使用Python轻松完成垃圾分类(基于图像识别)
2019/07/09 Python
python通过http下载文件的方法详解
2019/07/26 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
电厂职工自我鉴定
2014/02/20 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
教师暑期培训感言
2014/08/15 职场文书
暑期培训班招生方案
2014/08/26 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技