成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

基于python實現操作git過程代碼解析

瀏覽:2日期:2022-07-16 11:07:14

安裝

pip3 install gitpython

基本使用

# 從遠處倉庫下載代碼到本地import osfrom 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’)

常用方法大全

# ############## 2. pull最新代碼 ##############import osfrom git.repo import Repo local_path = os.path.join(’jason’, ’NB’)repo = Repo(local_path)repo.git.pull()# ############## 3. 獲取所有分支 ##############import osfrom git.repo import Repo local_path = os.path.join(’jason’, ’NB’)repo = Repo(local_path) branches = repo.remote().refsfor item in branches: print(item.remote_head) # ############## 4. 獲取所有版本 ##############import osfrom git.repo import Repo local_path = os.path.join(’jason’, ’NB’)repo = Repo(local_path) for tag in repo.tags: print(tag.name)# ############## 5. 獲取所有commit ##############import osfrom git.repo import Repo local_path = os.path.join(’jason’, ’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 osfrom git.repo import Repo local_path = os.path.join(’jason’, ’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. 打包代碼 ##############with open(os.path.join(’jason’, ’NB.tar’), ’wb’) as fp: repo.archive(fp)

基于python實現操作git過程代碼解析

封裝成類

需要使用直接拷貝即可

import osfrom git.repo import Repofrom git.repo.fun import is_git_dirclass 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) git_local_path = os.path.join(self.local_path, ’.git’) if not is_git_dir(git_local_path): self.repo = Repo.clone_from(repo_url, to_path=self.local_path, branch=branch) else: self.repo = Repo(self.local_path) def pull(self): ''' 從線上拉最新代碼 :return: ''' self.repo.git.pull() def branches(self): ''' 獲取所有分支 :return: ''' branches = self.repo.remote().refs return [item.remote_head for item in branches if item.remote_head not in [’HEAD’, ]] def commits(self): ''' 獲取所有提交記錄 :return: ''' commit_log = self.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') return [eval(item) for item in log_list] def tags(self): ''' 獲取所有tag :return: ''' return [tag.name for tag in self.repo.tags] def change_to_branch(self, branch): ''' 切換分值 :param branch: :return: ''' self.repo.git.checkout(branch) def change_to_commit(self, branch, commit): ''' 切換commit :param branch: :param commit: :return: ''' self.change_to_branch(branch=branch) self.repo.git.reset(’--hard’, commit) def change_to_tag(self, tag): ''' 切換tag :param tag: :return: ''' self.repo.git.checkout(tag)if __name__ == ’__main__’: local_path = os.path.join(’codes’, ’luffycity’) repo = GitRepository(local_path,remote_path) branch_list = repo.branches() print(branch_list) repo.change_to_branch(’dev’) repo.pull()

項目代碼

服務器管理

class Project(models.Model): ''' 項目表 ''' title = models.CharField(max_length=32,verbose_name=’項目名’) repo = models.CharField(max_length=255,verbose_name=’倉庫地址’) # choices參數 env_choices = ( (’prod’,’正式’), (’test’,’測試’) ) env = models.CharField(max_length=16,verbose_name=’環境’,choices=env_choices,default=’test’)

代碼優化

1.公用添加頁面

2.將所有的modlform單獨開設文件夾存儲

3.對modelform再次優化 對modelform定義一個父類

from django.forms import ModelFormclass BaseModelForm(ModelForm): # 將不需要bootstrap樣式的字段放入 exclude_bootstrap = [] def __init__(self,*args,**kwargs): super().__init__(*args,**kwargs) # 給字段加上form-control樣式 # self.fields = {’字段名’:字段對象} for k,field in self.fields.items(): if k in self.exclude_bootstrap: # 排除不需要加樣式的字段continue field.widget.attrs[’class’] = ’form-control’ # 其他modelform書寫from app01 import modelsfrom app01.myform.mybase import BaseModelFormclass ProjectModelForm(BaseModelForm): class Meta: model = models.Project fields = ’__all__’

4.給項目表新增線上項目地址和服務器字段

# 擴展字段path = models.CharField(max_length=255,verbose_name=’線上項目地址’,default=’/data/tmp’)# 項目與服務器的關系表servers = models.ManyToManyField(to=’Server’,verbose_name=’關聯服務器’)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
精品国产免费视频| 91在线观看成人| 欧美黄免费看| 日韩一卡二卡三卡四卡| 麻豆免费精品视频| 久久国产手机看片| 亚洲成av人片一区二区梦乃| 99精品视频免费观看| 亚洲女同ⅹxx女同tv| 亚洲精品1区| 亚洲精品欧美在线| 亚洲激情一区二区三区| 亚洲精品日日夜夜| 日韩一级在线| 亚洲一区欧美一区| 亚洲免费综合| 亚洲成av人片在线| 久久精品欧美| 美女脱光内衣内裤视频久久网站| 欧洲一区在线电影| 免费成人性网站| 欧美男同性恋视频网站| 国产一区福利在线| 精品少妇一区二区三区在线播放| av动漫一区二区| 欧美国产一区二区| 亚洲精品资源| 视频一区在线播放| 欧美色涩在线第一页| 国产伦精品一区二区三区在线观看| 91精品国产一区二区三区香蕉| 国产精品白丝av| 26uuu亚洲综合色欧美| 欧美另类视频| 一区二区三区四区中文字幕| 国产亚洲欧美一区二区| 五月激情丁香一区二区三区| 在线亚洲免费视频| 国产在线不卡一区| 精品国产123| 欧美日本韩国在线| 一区二区三区毛片| 欧洲另类一二三四区| 国产麻豆精品在线| 久久综合九色欧美综合狠狠| 韩日精品在线| 天天操天天综合网| 日韩一级大片在线观看| 欧美精品黄色| 亚洲综合一区二区精品导航| 欧洲一区在线电影| 国产不卡视频一区二区三区| 久久蜜桃香蕉精品一区二区三区| 欧美日韩国产色综合一二三四| 亚洲综合一二区| 欧美日韩久久久久久| 99精品一区二区| 曰韩精品一区二区| 欧美午夜电影网| 成人福利视频在线看| 国产精品二区一区二区aⅴ污介绍| 亚洲欧美清纯在线制服| 国产在线国偷精品产拍免费yy| 亚洲精品一区二区三区福利| 18成人免费观看视频| 青青草国产成人99久久| 欧美大片在线观看一区二区| 红桃视频国产一区| 日韩国产欧美在线视频| 欧美一区二区播放| 激情欧美一区| 毛片一区二区三区| 国产无人区一区二区三区| 亚洲在线观看| 成人h动漫精品一区二区| 亚洲精品日产精品乱码不卡| 欧美精品精品一区| 亚洲成色精品| 国产999精品久久久久久| 亚洲免费av高清| 91精品国模一区二区三区| 韩国免费一区| 国产一区二区福利视频| 亚洲伦理在线精品| 日韩写真欧美这视频| 国产日韩一区| 成人一区二区视频| 亚洲一级二级在线| 337p粉嫩大胆噜噜噜噜噜91av | 欧美a级一区二区| 国产亚洲一区二区三区在线观看| 久久久久久一区二区| 欧美一区二区在线| 午夜电影一区二区| 久久久久国色av免费看影院| 日本道色综合久久| 欧美日韩国产综合网| 韩国欧美国产一区| 亚洲精品国产一区二区精华液| 欧美一区二区精美| 亚洲一区二区三区高清不卡| 成人毛片在线观看| 视频一区中文字幕| 国产精品久久久久aaaa樱花| 欧美一区二区在线视频| 亚洲影视在线| 欧美日韩国产不卡在线看| 国产一区二区三区久久悠悠色av | 福利一区二区在线观看| 亚洲第一会所有码转帖| 久久综合色天天久久综合图片| 久久亚洲精品伦理| 国产精品成人观看视频免费| 国产精品综合二区| 亚洲电影一级片| 国产日韩视频一区二区三区| 欧美在线一区二区三区| 亚洲欧洲日本国产| 成人深夜在线观看| 久久av资源站| 亚洲电影视频在线| 亚洲日本在线a| 久久久午夜电影| 91精品国产入口| 91激情在线视频| 国产日韩欧美精品| 欧美日韩午夜| 成人97人人超碰人人99| 久久精品二区亚洲w码| 亚洲综合成人在线| 国产精品国模大尺度视频| 日韩精品一区二区三区四区| 欧日韩精品视频| 久久xxxx精品视频| 一区二区三区|亚洲午夜| 欧美成人一区二区在线| 高清shemale亚洲人妖| 捆绑调教美女网站视频一区| 亚洲成人福利片| 亚洲精品videosex极品| 国产精品久久久久永久免费观看 | 国产精品天干天干在线综合| 日韩西西人体444www| 精品视频在线免费| 色久综合一二码| 国产精品一区亚洲| 一道本一区二区| 欧美日韩视频一区二区三区| youjizz久久| 成人免费福利片| 国产成人av影院| 国产精品亚洲一区二区三区妖精| 久久国内精品视频| 另类综合日韩欧美亚洲| 蜜臀久久久99精品久久久久久| 亚洲一区在线视频观看| 亚洲免费资源在线播放| 亚洲色图在线播放| 国产精品美女视频| 国产喷白浆一区二区三区| 久久综合色鬼综合色| 26uuu另类欧美亚洲曰本| 欧美一区二区三区思思人| 在线播放中文字幕一区| 欧美嫩在线观看| 欧美男人的天堂一二区| 欧美精品高清视频| 欧美一区二区三区在线看| 欧美一级一级性生活免费录像| 在线不卡的av| 91精品国产欧美一区二区成人| 在线成人午夜影院| 欧美一区二区日韩| 欧美大白屁股肥臀xxxxxx| 日韩欧美一二区| 精品国产一区二区三区四区四| 日韩视频在线观看一区二区| 欧美一区二区三区在线视频| 日韩视频一区二区| 精品国产一区二区三区不卡| 久久噜噜亚洲综合| 欧美激情综合在线| 日韩美女久久久| 一区二区三区精品在线观看| 亚洲亚洲人成综合网络| 亚洲成人tv网| 免费观看30秒视频久久| 国内不卡的二区三区中文字幕 | 国产日韩欧美电影| 国产日韩综合av| 中文字幕一区三区| 一区二区三区四区av| 香蕉成人啪国产精品视频综合网 | www久久久久| 中文欧美字幕免费| 亚洲精品成人悠悠色影视| 日韩专区在线视频| 国产一区91精品张津瑜| 91丨porny丨国产入口| 在线不卡欧美|