如何使用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 相关文章推荐
使用Pyrex来扩展和加速Python程序的教程
Apr 13 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
Mac 上切换Python多版本
Jun 17 Python
详解pyqt5 动画在QThread线程中无法运行问题
May 05 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
Jun 22 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
pygame实现贪吃蛇游戏(下)
Oct 29 Python
Keras 实现加载预训练模型并冻结网络的层
Jun 15 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 Python
用python对oracle进行简单性能测试
Dec 05 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
Feb 22 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
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
2018/04/26 jQuery
深入解读Node.js中的koa源码
2019/06/17 Javascript
Python中使用中文的方法
2011/02/19 Python
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
Python 40行代码实现人脸识别功能
2017/04/02 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
一道写SQL的面试题和答案
2013/11/19 面试题
新大陆软件面试题
2016/11/24 面试题
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
结婚喜宴家长答谢词
2014/01/15 职场文书
秋季运动会通讯稿
2014/01/24 职场文书
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
经管应届生求职信范文
2014/05/18 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
学院党委班子四风问题自查报告及整改措施
2014/10/25 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js