如何使用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的Scrapy框架编写web爬虫的简单示例
Apr 17 Python
python从sqlite读取并显示数据的方法
May 08 Python
python实现求最长回文子串长度
Jan 22 Python
Python列表list排列组合操作示例
Dec 18 Python
Python制作exe文件简单流程
Jan 24 Python
python 二维数组90度旋转的方法
Jan 28 Python
对python中字典keys,values,items的使用详解
Feb 03 Python
基于Python实现用户管理系统
Feb 26 Python
基于python生成器封装的协程类
Mar 20 Python
详解python运行三种方式
May 13 Python
Python使用psutil获取进程信息的例子
Dec 17 Python
使用 Python 读取电子表格中的数据实例详解
Apr 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
PHP daddslashes 使用方法介绍
2012/10/26 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
2015/04/21 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
如果文字过长,则将过长的部分变成省略号显示
2006/06/26 Javascript
jQuery 选择器理解
2010/03/16 Javascript
jquery学习笔记二 实现可编辑的表格
2010/04/09 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
Node接收电子邮件的实例代码
2017/07/21 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
Python中optparser库用法实例详解
2018/01/26 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
详解如何在登录过期后跳出Ifram框架
2020/09/10 HTML / CSS
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
服装店员工管理制度
2015/08/07 职场文书
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android