如何使用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获取DLL和EXE文件版本号的方法
Mar 10 Python
Python用GET方法上传文件
Mar 10 Python
Python编程给numpy矩阵添加一列方法示例
Dec 04 Python
python使用TensorFlow进行图像处理的方法
Feb 28 Python
解决Django migrate No changes detected 不能创建表的问题
May 27 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
对django2.0 关联表的必填on_delete参数的含义解析
Aug 09 Python
Python依赖包整体迁移方法详解
Aug 15 Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
pytorch学习教程之自定义数据集
Nov 10 Python
Python基础之hashlib模块详解
May 06 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中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
JavaScript 原型学习总结
2010/10/29 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
详解AngularJs ui-router 路由的简单介绍
2017/04/26 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
jquery+css实现简单的图片轮播效果
2017/08/07 jQuery
js定时器实现倒计时效果
2017/11/05 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
[10:21]2018DOTA2国际邀请赛寻真——Winstrike
2018/08/11 DOTA
Python实现的概率分布运算操作示例
2017/08/14 Python
django数据库migrate失败的解决方法解析
2018/02/08 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
python批量处理txt文件的实例代码
2020/01/13 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
Amara美国站:英国高端家居礼品网站,世界各地的奢侈家具品牌
2017/07/26 全球购物
班组长工作职责
2013/12/25 职场文书
员工培训邀请函
2014/02/02 职场文书
会计员岗位职责
2014/03/15 职场文书
室内趣味活动方案
2014/08/24 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
个人四风问题整改措施
2014/10/24 职场文书
工作自我评价范文
2019/03/21 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang
i7 6700处理器相当于i5几代
2022/04/19 数码科技