如何使用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实现批量修改文件名实例
Jul 08 Python
在Python的while循环中使用else以及循环嵌套的用法
Oct 14 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 Python
python中numpy基础学习及进行数组和矢量计算
Feb 12 Python
Python实现按特定格式对文件进行读写的方法示例
Nov 30 Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 Python
influx+grafana自定义python采集数据和一些坑的总结
Sep 17 Python
详解Django的CSRF认证实现
Oct 09 Python
python中pytest收集用例规则与运行指定用例详解
Jun 27 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
详解字符串在Python内部是如何省内存的
Feb 03 Python
Python实现对word文档添加密码去除密码的示例代码
Dec 29 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垃圾回收机制对内存泄露的处理
2013/06/14 PHP
PHP中的类型约束介绍
2015/05/11 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
网页右下角弹出窗体实现代码
2014/06/05 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
vue2.0 datepicker使用方法
2018/02/04 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
vuex与组件联合使用的方法
2018/05/10 Javascript
ES6 系列之 Generator 的自动执行的方法示例
2018/10/19 Javascript
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
python实现按长宽比缩放图片
2018/06/07 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
python的re模块使用方法详解
2019/07/26 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
护士自我鉴定
2013/10/23 职场文书
给校长的建议书300字
2014/05/16 职场文书
幼儿园重阳节活动总结
2015/05/05 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书
安全生产培训心得体会
2016/01/18 职场文书
vue 实现上传组件
2021/05/31 Vue.js