如何使用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中Continue语句的用法的举例详解
May 14 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 Python
让代码变得更易维护的7个Python库
Oct 09 Python
在Mac上删除自己安装的Python方法
Oct 29 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 Python
python消除序列的重复值并保持顺序不变的实例
Nov 08 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
Flask中endpoint的理解(小结)
Dec 11 Python
Django 多对多字段的更新和插入数据实例
Mar 31 Python
python实现小程序推送页面收录脚本
Apr 20 Python
Jupyter notebook如何修改平台字体
May 13 Python
Django实现前台上传并显示图片功能
May 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
mysql5写入和读出乱码解决
2006/11/25 PHP
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
php下网站防IP攻击代码,超级实用
2010/10/24 PHP
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
jquery中常用的SET和GET
2009/01/13 Javascript
JavaScript 数组循环引起的思考
2010/01/01 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
JavaScript Serializer序列化时间处理示例
2014/07/31 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
Vue表单及表单绑定方法
2018/09/04 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
机器学习python实战之决策树
2017/11/01 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
python处理“
2019/06/10 Python
C和C++经典笔试题附答案解析
2014/08/18 面试题
new修饰符是起什么作用
2015/06/28 面试题
电大物流学生的自我评价
2013/10/25 职场文书
优秀党员获奖感言
2014/02/18 职场文书
安全保证书范文
2014/04/29 职场文书
班级文化建设标语
2014/06/23 职场文书
初中学校对照检查材料
2014/08/19 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
python爬虫框架feapde的使用简介
2021/04/20 Python
python实现图片批量压缩
2021/04/24 Python
手写实现JS中的new
2021/11/07 Javascript