使用 Python 操作 Git 版本库 - GitPython
GitPython 是一个用于操作 Git 版本库的 python 包,
它提供了一系列的对象模型(库 - Repo、树 - Tree、提交 - Commit等)
用于操作版本库中的相应对象。
版本库对象 - Repo
首先,使用包含 .git 文件夹的版本库路径创建 git.Repo 对象
from git import Repo
# 创建版本库对象
repo = git.Repo(r'E:\Notes')
然后便可以使用这个 Repo 对象对版本库进行操作,如:
# 版本库是否为空版本库
repo.bare
# 当前工作区是否干净
repo.is_dirty()
# 版本库中未跟踪的文件列表
repo.untracked_files
# 克隆版本库
repo.clone('clone_path')
# 压缩版本库到 tar 文件
with open('repo.tar', 'wb') as fp:
repo.archive(fp)
# 新建分支
repo.create_head('branchname')
# 查看当前分支
repo.active_branch
索引/暂存区对象 - Index
Git 术语中,index 表示暂存区,为下次将要提交到版本库里的文件,
GitPython 提供 Repo.Index 来操作暂存区,如添加、提交操作
index = repo.index
index.add(['new.txt'])
index.remove(['old.txt'])
index.commit('this is a test')
远程版本库操作 - Remotes
Remotes 用于操作远程版本库,可以通过 Repo.remote 方法获取远程版本库,
Repo.Remotes 属性获取远程版本库列表
# 获取默认版本库 origin
remote = repo.remote()
# 从远程版本库拉取分支
remote.pull()
# 推送本地分支到远程版本库
remote.push()
# 重命名远程分支
# remote.rename('new_origin')
直接执行 Git 命令
一般我们在工作目录做了改变之后,就会调用 git add 命令添加文件到暂存区,
然后调用 git commit 命令提交更改,Repo 虽然没有添加、提交方法,
但取而代之提供了一个 git.cmd.Git 对象实现对 Git 命令的调用,
通过 Repo.git 来进行 Git 命令操作。
git = repo.git
git.add('test1.txt') # git add test1.txt
git.commit('-m', 'this is a test') # git commit -m 'this is a test'
Repo.git.[command] 即相当于调用对应的 git 命令,而调用对应命令方法所用的参数,
会被转换成跟在命令后的参数。
而调用命令方法所用的命名参数会被转换成对应的完整参数,如:git.command(flag=True)
会被转换成 git command --flag 命令执行
总结
基本的 Git 操作可以概括如下:
# 新建版本库对象
repo = Repo(r'E:\Notes')
# 进行文件修改操作
# 获取版本库暂存区
index = repo.index
# 添加修改文件
index.add(['new.txt'])
# 提交修改到本地仓库
index.commit('this is a test')
# 获取远程仓库
remote = repo.remote()
# 推送本地修改到远程仓库
remote.push()
参考链接:
使用 Python 操作 Git 版本库 - GitPython的更多相关文章
- python操作git
GitPython 是一个用于操作 Git 版本库的 python 包,它提供了一系列的对象模型(库 - Repo.树 - Tree.提交 - Commit等),用于操作版本库中的相应对象. 模块安装 ...
- Git - Git版本库相关操作
创建Git版本库 如下命令实现在“E:\GitCode\01_TestGit”路径下,01_TestGit项目的Git版本库. $ cd E: #将当前目录转到E盘下 $ cd GitCode ...
- hg(Mercurial)版本库迁移到git版本库
这几天没事干净搞迁移了,迁移完MVC又迁移版本库,还把工作电脑迁移了一下,开始用Win8.1了.这个迁移主要是因为实在不想在工作电脑上又装git又装hg了,点个右键出来一大堆菜单,况且现在git已经成 ...
- 萌新笔记——git的问题(error: object file .git/objects/* is empty...)的解决方案及对git版本库文件的了解
由于操作不当,导致git版本库出了大问题,如下所示: error: object file .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e ...
- redmine整合GIT版本库
redmine整合GIT版本库 服务器的环境: Ubuntu 11.10 64位 Redmine 1.4.5.stable.10943 git version 1.7.5.4 + gitolite ...
- git 版本库回滚(转载)
From:http://www.cnblogs.com/qualitysong/archive/2012/11/27/2791486.html From: http://www.tech126.com ...
- git的问题(error: object file .git/objects/* is empty...)的解决方案及对git版本库文件的了解
由于操作不当,导致git版本库出了大问题,如下所示: error: object file .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e ...
- 解决git提交敏感信息(回退git版本库到某一个commit)
解决git提交敏感信息(回退git版本库到某一个commit) Fri 07 June 2013 git是一个很好的版本库, 现在很多人用它, 并在github上创建项目, 相信大家都有过将敏感信息提 ...
- 【Git】3、创建Git版本库、配置Git仓库用户邮箱信息
初识Git 文章目录 初识Git 1.创建Git版本库 认识.git 2.基础配置 2.1.查看配置信息 2.2.配置昵称邮箱信息 2.3.修改配置信息 1.通过命令行 2.通过修改配置文件. 修改全 ...
随机推荐
- Qt——QScrollArea
1.QScrollArea是否显示滚动条是由一个主要的子控件决定.检查滚动条未显示(1)是否只有一个子控件(2)是否设置 setWidgetResizable(true);,因为这个的本质是QWidg ...
- cocos2d中锚点概念
这两天看了下锚点的概念. /** * Sets the anchor point in percent. * * anchorPoint is the point around which all t ...
- 笔记-sql语句
笔记-sql语句 1. sql语句基础 虽然经常使用sql语句,但没有一个整体式的文档,整理了一下. 1.1. select foundation: select <colnum ...
- 老曹眼中的Linux基础
Linux 几乎无处不在,不论是服务器构建,还是客户端开发,对操作系统的基本理解和基础技能的掌握对全栈来说都是必备的. 系统的选择 Linux发行版本大体分为两类,一类是商业公司维护的发行版本,一类是 ...
- 13 内建属性 _getattribute_ 内建函数
1.内建属性 2.__getattribute__ 属性访问时拦截器 class Itcast(object): def __init__(self,subject1): self.subject1 ...
- STM32的GUI库使用
1. 实验平台使用百为的STM32F103开发板 2. 例程目录\百为stm32开发板光盘\stm32_gui_lib\Project\Embedded_GUI_Example\EWARM 3. 直接 ...
- Web自动化selenium技术快速实现爬虫
selenium是大家众所周知的web自动化测试框架,主要用来完成web网站项目的自动化测试,但其实如果要实现一个web爬虫,去某些网站爬取数据,其实用selenium来实现也很方便. 比如,我们现在 ...
- Django创建App报错
在django下创建APP项目时遇到的坑 python manage.py startapp app01 报错内容如下: 解决:找到报错中的文件夹151行删除items(),)中的逗号即可 在命令行下 ...
- 火狐metamask账号
火狐metamask lock trophy pyramid sunny aim inmate body sense sing castle cinnamon cram
- Centos7 下nginx nginx-1.13.4 安装
环境:CentOS Linux release 7.3.1611 (Core) Linux localhost.localdomain 3.10.0-514.26.2.el7.x86_64 #1 S ...