如何使用python代码操作git代码

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

安装模块

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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在Python中处理字符串之isdigit()方法的使用

    isdigit()方法检查字符串是否只包含数字(全由数字组成). 语法 以下是isdigit()方法的语法: str.isdigit() 参数 NA 返回值 如果字符串中的所有字符都是数字,并至少有一个字符此方法返回true,否则返回false. 例子 下面的例子显示了isdigit()方法的使用. #!/usr/bin/python str = "123456"; # Only digit in this string print str.isdigit(); str = "

  • Python的高级Git库 Gittle

    Gittle是一个高级纯python git 库.构建在dulwich之上,提供了大部分的低层机制. Install it pip install gittle Examples : Clone a repository from gittle import Gittle repo_path = '/tmp/gittle_bare' repo_url = 'git://github.com/FriendCode/gittle.git' repo = Gittle.clone(repo_url,

  • 使用python分析git log日志示例

    用git来管理工程的开发,git log是非常有用的'历史'资料,需求就是来自这里,我们希望能对git log有一个定制性强的过滤.此段脚本就是在完成这种类型的任务.对于一个repo所有branch中的commit,脚本将会把message中存在BUG ID的一类commits给提取整理出来,并提供了额外的search_key, 用于定制过滤. 复制代码 代码如下: # -*- coding: utf-8 -*-# created by vince67 Feb.2014# nuovince@gm

  • Python使用GitPython操作Git版本库的方法

    GitPython 是一个用于操作 Git 版本库的 python 包,它提供了一系列的对象模型(库 - Repo.树 - Tree.提交 - Commit等),用于操作版本库中的相应对象. 1.导包 from git import * 2.初始化git仓库 CURRENT_DIR = os.path.dirname(os.path.abspath(__file__)) empty_repo = Repo.init(os.path.join(CURRENT_DIR, 'bbs')) # bbs目

  • Python Gitlab Api 使用方法

    简述 公司使用gitlab 来托管代码,日常代码merge request 以及其他管理是交给测试,鉴于操作需经常打开网页,重复且繁琐,所以交给Python 管理. 官方文档 安装 pip install python-gitlab 环境: py3 DEMO # -*- coding: utf-8 -*- __Author__ = "xiewm" __Date__ = '2017/12/26 13:46' """ gitlab 经常使用到的api DOC_

  • 使用Python快乐学数学Github万星神器Manim简介

    高考在即,笔者想为孩子以后能够快乐学习数学.学习编程找到一个比较合适的项目,经过一番比较发现github上的万星项目manim(https://github.com/3b1b/manim)就非常好.它能够快速构建有关数学的动画,而且非常精确形象.  安装Manim 虽然manim已经支持Python3.7的,不过安装起来还是比较麻烦,我在ubantu18.04上直接使用安装的过程如下: 1.首先尝试直接使用pip install manimlib命令安装,但是会有以下报错 Cannot unin

  • 如何使用python代码操作git代码

    git简介 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持. Git 与 SVN 区别 Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等. 如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,

  • python 日期操作类代码

    完整代码 # -*- coding: utf-8 -*- '''获取当前日期前后N天或N月的日期''' from time import strftime, localtime from datetime import timedelta, date import calendar year = strftime("%Y",localtime()) mon = strftime("%m",localtime()) day = strftime("%d&qu

  • 基于python实现操作git过程代码解析

    安装 pip3 install gitpython 基本使用 # 从远处仓库下载代码到本地 import os from git.repo import Repo # 创建本地存储地址 download_path = os.path.join('jason','NB') # 从远程仓库下载代码 Repo.clone_from('https://github.com/DominicJi/TeachTest.git',to_path=download_path,branch='master') 常用

  • Python 字符串操作实现代码(截取/替换/查找/分割)

    Python 截取字符串使用 变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾. 复制代码 代码如下: # 例1:字符串截取str = '12345678'print str[0:1]>> 1   # 输出str位置0开始到位置1以前的字符print str[1:6]  >> 23456   # 输出str位置1开始到位置6以前的字符num = 18str = '0000' + str(num) # 合并字符串pr

  • Python FTP操作类代码分享

    复制代码 代码如下: #!/usr/bin/py2# -*- coding: utf-8 -*-#encoding=utf-8 '''''    ftp自动下载.自动上传脚本,可以递归目录操作''' from ftplib import FTPimport os, sys, string, datetime, timeimport socket class FtpClient: def __init__(self, host, user, passwd, remotedir, port=21):

  • Python 文件操作实现代码

    open(filename,mode,buffer) 其中第一个参数是要打开的文件的文件名,必选:第二个是打开方式,可选:第三个为缓冲区,可选.默认情况下是以"读"模式打开文件.该函数返回的是流类型对象. mode有如下几种: r:读模式(默认值) w:写模式 a:追加写模式 b:二进制模式 t:文本模式(默认值) +:更新已有硬盘文件(读和写模式) U:通用换行模式(Universal new line mode) 如果到打开的文件不存在或者其他问题,会跑出IOError异常. 常用

  • python 布尔操作实现代码

    和别的语言布尔类型定义1为真,0为假不同,python定义的真假比较多. 先说下假吧: false,none,0,"",{},[],() 而真的话,只要和上面的相反就行,比如上面是false,那真为true,[]空列表为假,不为空的列表为真.明白了这些.我们就可以用到python判断语句 如果你要把别的类型转换为bool类型的话,可以通过内置方法bool方法来进行转换.

  • Python list操作用法总结

    本文实例讲述了Python list操作用法.分享给大家供大家参考,具体如下: List是python中的基本数据结构之一,和Java中的ArrayList有些类似,支持动态的元素的增加.list还支持不同类型的元素在一个列表中,List is an Object. 最基本的创建一个列表的方法 复制代码 代码如下: myList = ['a','b','c'] Python list常见操作如下: 创建列表 复制代码 代码如下: sample_list = ['a',1,('a','b')] P

  • 使用Python对Csv文件操作实例代码

    csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存储为csv文件,文件内容是: No.,Name,Age,Score 1,mayi,18,99 2,jack,21,89 3,tom,25,95 4,rain,19,80 假设上述csv文件保存为"test.csv" 1.读文件 如何用Python像操作Excel一样提取其中的一列,即一个字段,利用Python自带的csv模块,有两种方法可以实现: 第一种方法使用read

  • Python文件操作基本流程代码实例

    文件操作之基本流程 #文本 近日,上市药企--浙江莎普爱思药业股份有限公司频遭质疑. 12月2日,一篇名为<一年卖出7.5亿的洗脑"神药",请放过中国老人>的文章称, 多位眼科医生并不认可莎普爱思滴眼液的"白内障防治功效".质疑者认为, 莎普爱思滴眼液是"假科普,真营销",通过广告误导患者. 针对质疑,莎普爱思3日晚发布的公告称, 0.5%苄达 赖氨酸滴眼液已于上世纪90年代通过了临床试验, 是一种安全的.有效的抗白内障药物.假的 #

随机推荐