如何使用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中的try和finally和with方法
May 05 Python
python基础之入门必看操作
Jul 26 Python
使用Kivy将python程序打包为apk文件
Jul 29 Python
python matplotlib中文显示参数设置解析
Dec 15 Python
python正则表达式之对号入座篇
Jul 24 Python
使用Selenium破解新浪微博的四宫格验证码
Oct 19 Python
详解Python Matplot中文显示完美解决方案
Mar 07 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
wxPython+Matplotlib绘制折线图表
Nov 19 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
python字典按照value排序方法
Dec 28 Python
Pygame如何使用精灵和碰撞检测
Nov 17 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实现小偷程序实例
2016/10/31 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
Javascript动态绑定事件的简单实现代码
2010/12/25 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
JavaScript检测鼠标移动方向的方法
2015/05/22 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
JavaScript中ES6 Babel正确安装过程
2016/07/18 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
js实现旋转木马效果
2017/03/17 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
Vue和React有哪些区别
2020/09/12 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
2020/10/21 Javascript
Python中动态检测编码chardet的使用教程
2017/07/06 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
python 实现屏幕录制示例
2019/12/23 Python
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
行政助理岗位职责范文
2013/12/03 职场文书
招商业务员岗位职责
2013/12/16 职场文书
检察官就职演讲稿
2014/01/13 职场文书
《穷人》教学反思
2014/04/08 职场文书
死亡证明书样本说明
2014/10/18 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
解决pytorch-gpu 安装失败的记录
2021/05/24 Python