如何使用 Python 完成 Git 管理?

Docker+jenkins+gitlab构建python项目,含项目环境搭建及过程中遇到的各种大坑,附解决方法!!! 阅读详情

点击上方“编程派”,选择设为“设为星标”

优质文章,第一时间送达!

作者:匿蟒

链接:https://note.qidong.name/2018/01/gitpython

有时,需要做复杂的 Git 操作,并且有很多中间逻辑。用 Shell 做复杂的逻辑运算与流程控制就是一个灾难。所以,用 Python 来实现是一个愉快的选择。这时,就需要在 Python 中操作 Git 的库。

0. GitPython 简介

GitPython是一个与Git库交互的Python库,包括底层命令(Plumbing)与高层命令(Porcelain)。它可以实现绝大部分的Git读写操作,避免了频繁与Shell交互的畸形代码。它并非是一个纯粹的Python实现,而是有一部分依赖于直接执行git命令,另一部分依赖于GitDB。

GitDB也是一个Python库。它为.git/objects建立了一个数据库模型,可以实现直接的读写。由于采用流式(stream)读写,所以运行高效、内存占用低。

1. GitPython安装

pip install GitPython

其依赖GitDB会自动安装,不过可执行的git命令需要额外安装。

2. 基本用法

init

import git
repo = git.Repo.init(path='.')

这样就在当前目录创建了一个Git库。当然,路径可以自定义。

由于git.Repo实现了__enter__与__exit__,所以可以与with联合使用。

with git.Repo.init(path='.') as repo:
    # do sth with repo

不过,由于只是实现了一些清理操作,关闭后仍然可以读写,所以使用这种形式的必要性不高。详见附录。

clone

clone分两种。一是从当前库clone到另一个位置:

new_repo = repo.clone(path='../new')

二是从某个URL那里clone到本地某个位置:

new_repo = git.Repo.clone_from(url='git@github.com:USER/REPO.git', to_path='../new')

commit

with open('test.file', 'w') as fobj:
    fobj.write('1st line\n')
repo.index.add(items=['test.file'])
repo.index.commit('write a line into test.file')

with open('test.file', 'aw') as fobj:
    fobj.write('2nd line\n')
repo.index.add(items=['test.file'])
repo.index.commit('write another line into test.file')

status

GitPython并未实现原版git status,而是给出了部分的信息。

>>> repo.is_dirty()
False
>>> with open('test.file', 'aw') as fobj:
>>>     fobj.write('dirty line\n')
>>> repo.is_dirty()
True
>>> repo.untracked_files
[]
>>> with open('untracked.file', 'w') as fobj:
>>>     fobj.write('')
>>> repo.untracked_files
['untracked.file']

checkout(清理所有修改)

>>> repo.is_dirty()
True
>>> repo.index.checkout(force=True)
<generator object <genexpr> at 0x7f2bf35e6b40>
>>> repo.is_dirty()
False

branch

获取当前分支:

head = repo.head

新建分支:

new_head = repo.create_head('new_head', 'HEAD^')

切换分支:

new_head.checkout()
head.checkout()

删除分支:

git.Head.delete(repo, new_head)
# or
git.Head.delete(repo, 'new_head')

merge

以下演示如何在一个分支(other),merge另一个分支(master)。

master = repo.heads.master
other = repo.create_head('other', 'HEAD^')
other.checkout()
repo.index.merge_tree(master)
repo.index.commit('Merge from master to other')

remote, fetch, pull, push

创建remote:

remote = repo.create_remote(name='gitlab', url='git@gitlab.com:USER/REPO.git')

远程交互操作:

remote = repo.remote()
remote.fetch()
remote.pull()
remote.push()

删除remote:

repo.delete_remote(remote)
# or
repo.delete_remote('gitlab')

其它

其它还有Tag、Submodule等相关操作,不是很常用,这里就不介绍了。

GitPython的优点是在做读操作时可以方便地获取内部信息,缺点是在做写操作时感觉很不顺手,隔靴搔痒。当然,它还支持直接执行git操作。

git = repo.git
git.status()
git.checkout('HEAD', b="my_new_branch")
git.branch('another-new-one')
git.branch('-D', 'another-new-one')

这……感觉又回到了老路,而且仍然感觉怪怪的。

3. 其它操作Git的方法

subprocess

这就是所谓『老路』。在另一个进程,执行Shell命令,并通过stdio来解析返回结果。

import subprocess
subprocess.call(['git', 'status'])

dulwich

dulwich是一个纯Python实现的Git交互库,以后有空再研究吧。

官方网站:https://www.dulwich.io/

pygit2

pygit2是基于libgit2实现的一个Python库。底层是C,而上层Python只是接口,运行效率应该是最高的,然而孤还是放弃了。其缺点是,需要环境中预先安装libgit2。相比之下,GitPython只需要环境预置Git,简单多了。

官方网站:http://www.pygit2.org/

4. 参考阅读

  • 《GitPython Documentation》

  • 《Welcome to GitDB’s documentation!》

  • 《Git - 底层命令 (Plumbing) 和高层命令 (Porcelain)》

  • 《GitPython | Hom》

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版
回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版
回复关键词「m」,立即获取Python精选优质文章合集
回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~
题图:pexels,CC0 授权。

好文章,我在看
Delphi 11必备指南:使用Git集成Python4Delphi的完整步骤 1)设置win32-bit选项。2)设置win64-bit选项。 阅读详情

相关推荐

CEF127 编译指南 MacOS 篇 - 安装 Git 和 Python(三)

与系统深度集成支持命令行和图形界面可通过多种方式安装维护与其他开发工具良好兼容获取 CEF 源代码管理代码版本同步依赖项更新项目文件通过本文的指导,我们完成了 Git 和 Python 这两个重要工具在 macOS 系统上的安装和配置。这些工具将在后续的 CEF 编译过程中发挥重要作用。正确安装和配置这些工具是成功编译 CEF 的关键步骤,它们为我们提供了必要的开发环境支持。

守城小轩的技术窝棚 1249

看完这篇还不会用Git,那我就哭了!

你使用过 Git 吗?也许你已经使用了一段时间,但它的许多奥秘仍然令人困惑。 Git 是一个版本控制系统,是任何软件开发项目中的主要内容。通常有两个主要用途:代码备份和代码版本控制。你可以逐步处理代码,在需要回滚到备份副本的过程中保存每一步的进度! 常见的问题是 Git 很难使用。有时版本和分支不同步,你会花很长时间试图推送代码!更糟糕的是,不知道某些命令的确切工作方式很容易导致意外删除或覆盖部分...

武培轩 1万+

VSCode 1.90 集成 Git:5步完成深度学习项目克隆、打开与依赖安装

本文详细介绍了如何利用VSCode 1.90深度集成的Git功能,一站式完成深度学习项目的克隆、打开与依赖安装。通过5个简单步骤,开发者可以高效搭建开发环境,避免传统流程中的碎片化操作。文章还对比了Download ZIP、HTTPS克隆和SSH克隆三种方式,并提供了Gitee镜像加速等实用技巧。

weixin_30562507的博客 356

使用Python操作Git

大家好,当谈及版本控制系统时,Git是最为广泛使用的一种,而Python作为一门多用途的编程语言,在处理Git仓库时也展现了其强大的能力。通过Python,我们可以轻松地与Git仓库进行交互,执行各种操作,从简单的提交文件到仓库,到复杂的分支管理和历史记录查询。在本文中,我们将探讨如何使用Python操作Git,借助GitPython库,我们能够更加便捷地完成这一任务。

若不知道要驶向哪个码头,那么任何风都不会是顺风。 6232

告别命令行!用Pycharm 2023.3的图形化界面搞定Git项目关联(附.ignore文件配置)

本文详细介绍了如何利用Pycharm 2023.3的图形化界面高效管理Git项目,包括项目初始化、远程仓库关联、日常提交等操作,特别提供了Python项目.gitignore文件的配置指南。通过可视化工具,开发者可以完全告别命令行,提升版本控制效率,尤其适合数据分析师和机器学习工程师。

weixin_30325487的博客 367

别再手动敲命令了!Pycharm 2023.2 内置Git功能全解析,从关联到推送的图形化操作指南

本文详细解析了PyCharm 2023.2版本内置的图形化Git功能,从项目关联到代码推送的全流程操作指南。通过直观的界面设计,开发者无需记忆复杂命令即可高效管理版本控制,特别适合Python开发中团队协作与代码质量保障。文章涵盖了环境配置、远程仓库管理、日常开发工作流等核心场景,帮助用户充分利用IDE集成工具提升Git操作效率。

weixin_30706691的博客 286

如何使用python脚本下载git代码_jenkins学习5-jenkins拉取git仓库代码,执行python自动化脚本...

前言python自动化的脚本开发完成后需提交到git代码仓库,接下来就是用Jenkins拉取代码去构建自动化代码了git源码管理打开Jenkins新建一个自由风格的项目源码管理Repository URL 代码仓库地址Credentials git仓库登陆的账号和密码凭证指定分支(为空时代表any)分支默认*/masterRepository URL 代码仓库地址备注:如果是ssh方式链接的,就...

weixin_39551103的博客 208

告别Terminal!Pycharm 2023.2版Git图形化操作全攻略(从关联到推送)

本文详细介绍了Pycharm 2023.2版本的图形化Git操作全流程,从项目初始化到代码推送,帮助开发者告别Terminal命令行。通过直观的界面完成仓库关联、提交管理、分支操作等任务,提升版本控制效率,特别适合Git初学者和追求高效开发的Python程序员。

weixin_30325971的博客 422

在openwrt上安装和配置git、ssh和python3

简单记录在openwrt上安装配置git和ssh的流程。 更新包管理器 openwrt 自带的包管理器是opkg,安装之前先更新一下: opkg update 安装git opkg install git 安装完毕后可输入命令git version检查是否成功安装。 配置git git config --global user.name "xxx" git config --global user.email "xxx@yyy" 配置的用户名和邮箱可以通过git config --global --l

Hsin96的博客 1万+

python如何操作git库

然后,我们修改了一个文件并使用 repo.index.add() 将其添加到 Git 存储库中,然后使用 repo.index.commit() 提交更改,并使用 repo.remotes.origin.push() 将更改推送到远程存储库。例如:git.Repo.clone_from(‘https://github.com/user/repo.git’, ‘/path/to/local/repo’)添加文件:使用 git.Repo.index.add() 方法可以将文件添加到 Git 存储库中。

zhangzhechun的专栏 2092

图片边界矢量化-地理配准

无地理和投影信息的JPG图片,通过ArcGIS进行地理配准(Georeferencing)完成数字化边界。

u012727861的博客 1908

jenkins3—jenkins拉取git仓库代码,执行python自动化脚本

前言 python自动化的脚本开发完成后需提交到git代码仓库,接下来就是用Jenkins拉取代码去构建自动化代码了 git源码管理 代码上传git仓库,这里就不介绍了,可以看之前 打开Jenkins新建一个自由风格的项目 源码管理 Repository URL 填写github上某仓库的地址 Credentials git仓库登录的账号和密码凭证 指定分支(为空时代表any)分支默认*/m...

weixin_44732155的博客 154

不用U盘也能装Ubuntu?手把手教你用EasyUEFI搞定双系统(附企业版资源)

本文详细介绍了无需U盘即可安装Ubuntu双系统的方法。通过使用EasyUEFI工具,在Windows环境下创建虚拟启动分区并配置UEFI引导,即可直接从硬盘启动Ubuntu安装程序。该方法特别适合开发者或技术爱好者快速搭建Linux开发环境,操作安全便捷,无需额外物理介质。

weixin_29215391的博客 287

gitosis在linux服务器上的配置,git服务器配置

1.gitosis的安装,依赖python和python-setuptools(python的包管理工具) sudo yum install python-setuptools 2.下载并安装gitosis mkdir ~/src cd ~/src git clone git://github.com/res0nat0r/gitosis.git cd gitosis python setu...

Yietion的博客 222

华为使用MicroG安装并使用Google服务教程

鉴于众多华为手机用户因无法使用Google服务而感到不便,我经过多次摸索和测试,总结了一份简单易懂的教程,希望能够帮助到大家。无论是需要使用Google Play商店下载应用,还是需要使用Google服务进行工作和学习,本文将详细介绍如何在华为手机上安装并使用Google服务。二、前置条件软件要求:Aurora Store(替代Google Play商店)、MicroG Companion、MicroG Server(替代Google框架)

weixin_41926602的博客 3万+

配置cts performance最优范围

这里写自定义目录标题cts例如此案例中,我们多测几次,发现Measured frame rate 的平均值为average=(380+389+380+371)/4=380 cts by VinterYoung Expected achievable frame rates for OMX.MTK.VIDEO.DECODER.HEVC video/hevc 1280x720: [75.0, 262.0]. Measured frame rate: [380.5645006622224, 389.3983545

o343196469的博客 1321

Windows Terminal v1.24 配置进阶:3步集成 Conda 与 Git 实现开发环境统一

本文详细介绍了如何通过Windows Terminal v1.24配置实现Conda与Git的无缝集成,打造高效统一的开发环境。从基础安装到高级定制,包括多标签页支持、GPU加速渲染、Conda环境自动激活、Git Bash集成等实用技巧,帮助开发者显著提升工作效率。

weixin_33980459的博客 400

使用VNA(Vector Network Analyzer)对S参数进行去嵌(一)

传统上,RF和微波组件被设计成具有同轴接口的封装。通过连接一系列这些单独的同轴设备,可以容易地制造复杂的系统。使用使用类似同轴接口的标准测试设备可以很容易地测量这些部件和系统的性能。然而,现代系统需要更高水平的组件集成、更低的功耗和更低的制造成本。射频组件正在迅速从使用昂贵同轴接口的设计转向使用印刷电路板和表面贴装技术(SMT)的设计。传统的同轴接口甚至可以从最终产品中取消。这就给设计者留下了用需要同轴接口的测试设备测量这些射频和微波组件性能的问题。解决方案是使用连接同轴和非同轴传输线的测试夹具。

小孟同学的博客 1万+

Python环境搭建和Git命令

本文记录了从零开始学习Python的第一天成果,主要包括:1) 使用Anaconda创建名为cv_2026的Python3.9虚拟环境;2) 掌握Git基础工作流,包括初始化仓库、提交代码和推送到GitHub;3) 学习常用Windows命令行操作,如目录切换、文件管理和Python脚本运行。特别记录了"git add ."命令因缺少空格导致的错误及解决方法。这些技能为后续Python数据科学项目开发奠定了基础。

Wik_DD的博客 404

Debezium报错处理系列之二十一:Unable to connect: Communications link failure.The driver has not received any

Debezium报错系列之二十一:Unable to connect: Communications link failure.The driver has not received any。

zhengzaifeidelushang的博客 547

宇瞳杯安防镜头设计

宇瞳杯安防镜头设计

weixin_72050316的博客 1517

如何安装git仓库中的包到anaconda虚拟环境

转自:https://ask.youkuaiyun.com/questions/1065030?spm=1005.2026.3001.5622 在anaconda虚拟环境下无法调用已安装的git时,可以在虚拟环境下使用 conda install git 安装git,安装完成后即可使用 然后pip install git+XXX(网址)在虚拟环境中安装相应的包。例如:$ pip install git+https://github.com/ildoonet/pytorch-gradual-warmup-lr.g...

qq_44191531的博客 7402

基于 STM32 的乒乓球发球机控制系统设计与实现

乒乓球发球机是一种能够按照预设参数自动、连续发出乒乓球的训练设备。本系统以 STM32F103C8T6 为主控核心,通过控制实现球速调节、实现落点与旋转方向控制、实现出球节奏控制,并配合 OLED 显示与按键人机交互,实现速度、频率、落点、旋转四大参数的可调发球训练。

weixin_42300449的博客 212

Python与PyCharm社区版安装配置指南:搭建安全高效的开发环境

在软件开发中,集成开发环境(IDE)和编程语言解释器的正确配置是项目成功的基础。Python作为一门开源、跨平台的高级编程语言,其解释器的安装与环境变量配置是开发流程中的首要环节。通过理解环境变量(如PATH)的工作原理,开发者可以确保命令行能正确调用解释器,这是自动化脚本和依赖管理的基础。PyCharm作为一款功能强大的IDE,其社区版提供了代码智能提示、调试器和版本控制集成等核心功能,能显著提升开发效率。对于初学者和大多数项目而言,PyCharm社区版与Python解释器的组合,配合虚拟环境(Virtu

cuankuangzhong6373的博客 488

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

一行代码没写,服务器前后端就完成了?

最近在总结一些技术,录制了一些视频,一直想完成一个自己的课程管理系统,但是自己关于这块的技术积累几乎为 0。首先需要了解网络知识(https、ddns等),其次 Python 基础、网页基础都要了解,这里每一项都博大精深,鱼鹰花了很多时间学习也只是一知半解。后来了解到 Cusor,试用了一下,相当 Nice,全程几乎没有写代码,都是自己提需求,遇到问题就问它怎么解决。效果远超预期(开始页面非常简陋...

EmbeddedOsprey 293

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

告别命令行!用Pycharm的图形化界面搞定Git全流程(2024最新版)

本文详细介绍了如何在Pycharm 2024版本中利用图形化界面完成Git全流程操作,无需记忆复杂命令。从初始设置到日常开发中的提交、分支管理、远程仓库操作,再到高级功能如查看历史、暂存更改和回退操作,Pycharm的图形化工具让Git版本控制变得简单直观,大幅提升Python开发者的工作效率。

weixin_30325971的博客 377

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 火爆全网!这个 Python 项目很骚气!
下一篇: Python 3.9 很快就要来了!
codingpy
博客等级 码龄11年 1873粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值