如何使用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 获取文件列表(或是目录例表)
Mar 25 Python
python 数据清洗之数据合并、转换、过滤、排序
Feb 12 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
Jan 08 Python
python 中的list和array的不同之处及转换问题
Mar 13 Python
Python使用ConfigParser模块操作配置文件的方法
Jun 29 Python
python实现手机销售管理系统
Mar 19 Python
pytorch 模型可视化的例子
Aug 17 Python
python 解决tqdm模块不能单行显示的问题
Feb 19 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 Python
django models里数据表插入数据id自增操作
Jul 15 Python
python的数学算法函数及公式用法
Nov 18 Python
python实现学生信息管理系统(精简版)
Nov 27 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一句话cmdshell新型 (非一句话木马)
2009/04/18 PHP
php精确的统计在线人数的方法
2015/10/21 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
PHP开发实现快递查询功能详解
2019/04/08 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
Javascript中的async awai的用法
2017/05/17 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
2019/11/09 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
javascript实现移动端轮播图
2020/12/09 Javascript
python下载文件时显示下载进度的方法
2015/04/02 Python
python利用datetime模块计算时间差
2015/08/04 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
python自带的http模块详解
2016/11/06 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
Python实现上下班抢个顺风单脚本
2018/02/07 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
花店创业计划书范文
2014/02/07 职场文书
销售内勤岗位职责
2014/04/15 职场文书
政府法律服务方案
2014/06/14 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python