设为首页 收藏本站
查看: 917|回复: 0

[经验分享] 使用 Python 操作 Git 版本库

[复制链接]

尚未签到

发表于 2018-1-13 16:07:13 | 显示全部楼层 |阅读模式
  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()

  参考链接:
  https://my.oschina.net/hopeMan/blog/141221
  http://gitpython.readthedocs.io/en/stable/tutorial.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-434739-1-1.html 上篇帖子: git中https和SSH的区别 下篇帖子: windows下git的安装和使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表