如何使用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编程实现及时获取新邮件的方法示例
Aug 10 Python
基于python OpenCV实现动态人脸检测
May 25 Python
numpy向空的二维数组中添加元素的方法
Nov 01 Python
Appium Python自动化测试之环境搭建的步骤
Jan 23 Python
python如何获取当前文件夹下所有文件名详解
Jan 25 Python
python字符串替换第一个字符串的方法
Jun 26 Python
python文件操作的简单方法总结
Nov 07 Python
keras的load_model实现加载含有参数的自定义模型
Jun 22 Python
利用python爬取有道词典的方法
Dec 08 Python
python opencv肤色检测的实现示例
Dec 21 Python
python中xlutils库用法浅析
Dec 29 Python
python 单机五子棋对战游戏
Apr 28 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
jQuery 性能优化指南 (1)
2009/05/21 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
javascript Event对象详解及使用示例
2013/11/22 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
2014/09/11 Javascript
jquery实现图片预加载
2015/12/25 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
详解webpack 多页面/入口支持&公共组件单独打包
2017/06/29 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
VUE 解决mode为history页面为空白的问题
2019/11/01 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
python模拟Django框架实例
2016/05/17 Python
Python学习教程之常用的内置函数大全
2017/07/14 Python
python爬取足球直播吧五大联赛积分榜
2018/06/13 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
python opencv 实现对图像边缘扩充
2020/01/19 Python
PageFactory设计模式基于python实现
2020/04/14 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
Linux机考试题
2015/10/16 面试题
党校学习自我鉴定
2014/02/24 职场文书
专题组织生活会方案
2014/06/15 职场文书
就业推荐表导师评语
2014/12/31 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
Python初识逻辑与if语句及用法大全
2021/08/07 Python