jjzjj

Gitpython实战(第一弹)

山山来吃 2024-02-24 原文

坑坑洼洼的代码路

Gitpython实战(第一弹 checkout&pull)


前言

作者风格:通俗易懂,幽默风趣,志在为构建和谐社会主义奉献力量 --- from 作者同桌

本文旨在以工作中实战的经验讲述gitpython的应用案例,语言简单粗暴,请知悉!


一、gitpython环境配置(Windows)

1.在线安装

方式一:如果老板们身处外网环境,且网络环境自由的话可直接在pycharm自行下载
步骤:pycharm路径:File->Setting->搜索Python Interpreter->所有可以通过+号进行安装,如下图(为防止小仙女小帅哥们对pycharm不熟悉,下图已标记具体位置及操作顺序啦):

方式二:通过pip安装
步骤:打开提示符界面->输入:pip3 install gitpython

作者本人工作环境由于产品特性,身处内网环境且无yum源,只能通过离线方式安装,呜呜呜~~~

2.离线安装

方式一:通过pip安装(非复制错误哈,通过pip也可以本地安装)
步骤:
1、在PyPi官网下载gitpython及其依赖包:gitdbgitpythonsmmaptyping_extensions(可以是whl包,也可以是tar包)
各位注意自己本地python版本与下载包版本是否适配,举例如下图:

2、whl包安装
找到whl包路径,选中后直接输入cmd(即可进入对应目录控制命令符界面)-> 执行python -m pip install xxx.whl

3、tar包安装(本人强推,省心)
解压zip包->进入文件夹后找到setup.py文件->执行python setup.py
[此处也可以将解压缩后的包直接放到pycharm工程中,在Terminal界面进行setup安装]

二、需求分析

对比同一分支不同版本的代码,具体修改内容,修改代码行数。本篇文章为该需求的第一步根据使用者需求checkout分支:
1、本地库已clone,无需检查或clone库
2、用户可指定checkout分支
3、检查用户分支是否拉取过,是则无需进行重新创建本地分支
4、checkout实现
5、分支切换后进行pull

三、代码实现

1.引入库

代码如下(示例):

import os
from git.repo import Repo

2.checkout分支&pull

代码如下(示例):

def git_branch_checkout(local_code_path,checkout_branch):

	"""
	description:
	is_from_origin:是否为新拉取远端分支
	local_code_path:目标库.git所在路径
	checkout_branch:目标checkout分支
	"""
	# 获取当前分支
	repo = Repo(local_code_path,search_parent_directories=True)
	git = repo.git
	active_branch = repo.active_branch
	# 'origin/xxx/xxx/'为远端分支路径头,由各项目自行定义
	origin_branch_path = r'origin/xxx/xxx/' + checkout_branch
	print('当前分支为:',str(active_branch))
	print('目标分支为:',checkout_branch)
	
	# 判断本地是否已存在该分支
	is_from_origin = checkout_branch not in repo.branches
	print('本地是否已存在目标分支:',is_from_origin )

	# 拉取代码,获取远端更新
	git.pull()
	
	# 切换分支
	if str(active_branch)!= checkout_branch:
		if is_from_origin:
			git.checkout('-b',checkout_branch,origin_branch_path)
		else:
			git.checkout(checkout_branch)
	else:
		print('当前分支即为目标拉取分支,无需重复checkout')
	active_branch = repo.active_branch
	print('切换后分支为:',active_branch)
	
	# 再次拉取代码,获取更新
	git.pull()
	

后续直接调用该方法即可。


总结

文本为作者第一次接触gitpython的使用经验,欢迎萌新及大佬不吝赐教!

有关Gitpython实战(第一弹)的更多相关文章

  1. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  2. ruby-on-rails - CarrierWave - PDF - 只选择第一页 - 2

    我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful

  3. ruby - 如何跳过 CSV 文件的第一行并将第二行作为标题 - 2

    有没有办法跳过CSV文件的第一行,让第二行作为标题?我有一个CSV文件,第一行是日期,第二行是标题,所以我需要能够在遍历它时跳过第一行。我尝试使用slice但它会将CSV转换为数组,我真的很想将其读取为CSV,以便我可以利用header。 最佳答案 根据您的数据,您可以使用另一种方法和skip_lines-option此示例跳过所有以#开头的行require'csv'CSV.parse(DATA.read,:col_sep=>';',:headers=>true,:skip_lines=>/^#/#Markcomments!)do|

  4. arrays - 在一行中选择数组的第一个和最后一个元素 - 2

    我的任务是从数组中选择最高和最低的数字。我想我很清楚我想做什么,但只是努力以正确的格式访问信息以满足通过标准。defhigh_and_low(numbers)array=numbers.split("").map!{|x|x.to_i}array.sort!{|a,b|ba}putsarray[0,-1]end数字可能看起来像"80917234100",要通过,我需要输出"9234"。我正在尝试putsarray.first.last,但一直无法弄明白。 最佳答案 有Array#minmax完全满足您需要的方法:array=[80,

  5. ruby-on-rails - Ruby 或 Rails 有只将第一个字符大写的方法吗? - 2

    或者好像我必须自己写方法?(保持DHA不变):ruby-1.9.2-p180:001>s='omega-3(DHA)'=>"omega-3(DHA)"ruby-1.9.2-p180:002>s.capitalize=>"Omega-3(dha)"ruby-1.9.2-p180:003>s.titleize=>"Omega3(Dha)"ruby-1.9.2-p180:005>s[0].upcase+s[1..-1]=>"Omega-3(DHA)" 最佳答案 如果我的回答只是垃圾,我深表歉意(我不做ruby)。但我相信我已经为您找到了答

  6. ruby - gsub 删除第一个逗号前的所有内容 - 2

    我有这个字符串:auteur="comtedeFlandreetHainaut,Baudouin,Jacques,Thierry"我想删除第一个逗号之前的所有内容,即在这种情况下保留“Baudouin,Jacques,Thierry”试过这个:nom=auteur.gsub(/.*,/,'')但这会删除最后一个逗号之前的每个逗号,只保留“Thierry”。 最佳答案 auteur.partition(",").last#=>"Baudouin,Jacques,Thierry" 关于rub

  7. ruby-on-rails - Order Hash 并删除第一个键值对 - 2

    我有一个以时间戳为键的哈希。hash={"2016-05-31T22:30:58+02:00"=>{"path"=>"/","method"=>"GET"},"2016-05-31T22:31:23+02:00"=>{"path"=>"/tour","method"=>"GET"},"2016-05-31T22:31:05+02:00"=>{"path"=>"/contact_us","method"=>"GET"}}我订购了这个系列并得到了第一双这样的:hash.sort_by{|k,_|k}.first.first但是我该如何删除它呢?删除方法requiresyou知道key的准确

  8. arrays - 字符串数组中字符串第一部分的总和 - 2

    我有一个字符串数组,我需要从中提取第一个单词,将它们转换为整数并获得它们的总和。示例:["5Apple","5Orange","15Grapes"]预期输出=>25我的尝试:["5","5","15"].map(&:to_i).sum 最佳答案 我从你的问题中找到了答案。["5Apple","5Orange","15Grapes"].map(&:to_i).sum在数组中,如果存在任何整数可转换值,那么它将自动转换为整数。 关于arrays-字符串数组中字符串第一部分的总和,我们在Sta

  9. ruby-on-rails - Rails 3 : Looping through array of objects, 忽略数组中的第一个对象? - 2

    在我看来,我正在尝试显示一个对象表,这是我的代码:CategoriesCBB's">然而这是抛出一个错误说:can'tconvertCapabilityBuildingBlockintoArray关系是正确的,错误来self尝试在此处减去数组的第一个对象的行:有什么方法可以忽略数组中的第一个对象来遍历数组吗?谢谢 最佳答案 尝试使用Array.drop-http://www.ruby-doc.org/core/classes/Array.html#M000294 关于ruby-on-ra

  10. ruby-on-rails - 我如何跳过前三行而不是 FasterCSV 中的第一行 - 2

    我正在使用FasterCSV我正在循环使用这样的foreachFasterCSV.foreach("#{Rails.public_path}/uploads/transfer.csv",:encoding=>'u',:headers=>:first_row)do|row|但问题是我的csv将前3行作为标题...有什么方法可以使fasterCSV跳过前三行而不是仅跳过第一行?? 最佳答案 不确定FasterCSV,但在Ruby1.9标准CSV库(由FasterCSV制作)中,我可以执行以下操作:c=CSV.open'/path/to/

随机推荐