如何使用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中writelines()方法的使用
May 25 Python
python入门教程之识别验证码
Mar 04 Python
Python运算符重载详解及实例代码
Mar 07 Python
简单了解Django模板的使用
Dec 20 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
详解Python的数据库操作(pymysql)
Apr 04 Python
Django中的cookie和session
Aug 27 Python
Python-openCV读RGB通道图实例
Jan 17 Python
Python 实现向word(docx)中输出
Feb 13 Python
django的autoreload机制实现
Jun 03 Python
使用python-cv2实现视频的分解与合成的示例代码
Oct 26 Python
Python学习开发之图形用户界面详解
Aug 23 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
新52大事件
2020/03/03 欧美动漫
使用PHP编写的SVN类
2013/07/18 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
yii2 数据库读写分离配置示例
2017/02/10 PHP
限制复选框的最大可选数
2006/07/01 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
2014/01/08 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
Python 2/3下处理cjk编码的zip文件的方法
2019/04/26 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
2020/01/20 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
html Table 表头固定的实现
2019/01/22 HTML / CSS
一个精品风格的世界:Atterley
2019/05/01 全球购物
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
一篇.NET面试题
2014/09/29 面试题
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
儿子婚宴答谢词
2014/01/09 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
乡镇食品安全责任书
2014/07/28 职场文书
交通事故代理词范文
2015/05/23 职场文书