日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:24日期: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 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久免费影院| 精品中国亚洲| 999精品一区| 亚洲91精品| 日韩亚洲国产欧美| 爽好久久久欧美精品| 亚洲日本在线观看视频| 日本午夜精品视频在线观看| 久久中文字幕一区二区三区| 日韩一区二区三区免费播放| 欧美日韩中文字幕一区二区三区 | 欧美日韩a区| 欧美激情三区| 九色porny丨国产首页在线| 免费视频亚洲| 日韩va亚洲va欧美va久久| 国产精品玖玖玖在线资源| 肉色欧美久久久久久久免费看| 日韩视频一区二区三区在线播放免费观看| 亚洲女人av| 麻豆91精品视频| 亚洲精品在线观看91| 欧美精品影院| 成人片免费看| 久久国产精品久久久久久电车 | 日韩国产激情| 国产精品社区| 国产精品欧美日韩一区| 欧美aa一级| 日韩三区四区| 久久国产毛片| 日韩av资源网| 99成人超碰| 91国内精品| 亚洲高清不卡| 欧美xxxx性| 欧美日韩国产免费观看| 国产欧美精品| 国产模特精品视频久久久久| 国产亚洲一区| 在线日韩欧美| 国产欧美日韩| 在线亚洲自拍| 国产精品不卡| 综合色一区二区| 日韩伦理福利| 欧美伊人久久| 欧美aa国产视频| 国产剧情一区| 国产精品日本欧美一区二区三区| 国产精品久久久久久妇女| 影视先锋久久| 精品亚洲a∨| 清纯唯美亚洲综合一区| 狠狠干成人综合网| 一区二区三区四区日本视频| 久久精品超碰| 蜜臀va亚洲va欧美va天堂| 日韩免费视频| 毛片不卡一区二区| 日本成人中文字幕在线视频| 亚洲精品1区| 99久久婷婷| 国产精品久久久久蜜臀| 国产精品亚洲片在线播放| 在线观看亚洲精品福利片| 欧美aa一级| 久久这里只有精品一区二区| 91精品国产自产观看在线 | 在线看片不卡| 91亚洲国产成人久久精品| 日韩精品中文字幕吗一区二区| 欧美日韩在线观看视频小说| 98精品视频| 精品一区二区男人吃奶 | 成人精品亚洲| 精品亚洲成人| 国产图片一区| 亚洲18在线| 亚洲我射av| 免费视频久久| 欧美成人国产| 欧美日韩中文一区二区| 福利一区在线| 久久免费视频66| 国产精久久久| 国产精品成人国产| 国产精品hd| 国产精品chinese| 国产精品亚洲二区| 国产日韩一区二区三区在线| 亚洲深夜福利在线观看| 亚洲欧美日韩国产一区| 久热精品在线| 亚洲一级大片| 午夜精品影视国产一区在线麻豆| 免费人成精品欧美精品| 亚洲另类黄色| 日本欧美韩国一区三区| 日本视频在线一区| 国产探花一区| 国产精品欧美日韩一区| 国产精品一区二区精品视频观看| 国产免费播放一区二区| 麻豆国产精品一区二区三区| 久久精品二区亚洲w码| 久久亚州av| 国产美女高潮在线| 91精品国产调教在线观看| 欧美成人日韩| 视频在线观看91| 欧美自拍一区| 精品视频黄色| 久久蜜桃精品| 久久亚洲电影| 国产伦理久久久久久妇女| 精品国产精品国产偷麻豆| 亚洲精品**中文毛片| 神马久久午夜| 99国产精品99久久久久久粉嫩| 亚洲精品观看| 欧美片第1页综合| 麻豆91小视频| 欧美日韩在线播放视频| 亚洲作爱视频| 69堂免费精品视频在线播放| 成人在线免费观看网站| 久久裸体视频| 亚洲精品九九| 麻豆一区二区三| 久久精品青草| 日韩国产欧美一区二区三区| 精品视频一区二区三区在线观看 | 国产精品99久久精品| 国产精品av一区二区| 老司机精品久久| 国产乱码精品一区二区三区亚洲人 | 少妇精品导航| 欧美特黄一级大片| 日本一不卡视频| 神马午夜在线视频| 亚洲精品成人一区| 高清一区二区三区av| 免费精品视频| 精品五月天堂| 久久高清一区| 另类专区亚洲| 国产日韩一区二区三区在线 | 久久成人高清| 一区二区视频欧美| 国产欧美日韩一区二区三区四区| 国产超碰精品| 国产美女精品视频免费播放软件| 99久精品视频在线观看视频| 91精品国产自产精品男人的天堂| 久久久五月天| 欧美黄页在线免费观看| 亚洲专区在线| 国产资源在线观看入口av| 亚洲视频二区| 青青青免费在线视频| 日韩久久99| 午夜久久久久| 桃色av一区二区| 免费观看亚洲天堂| 蜜桃一区二区三区在线| 中文在线中文资源| 国产精品免费99久久久| 亚洲一区免费| 日韩欧美不卡| 福利一区二区三区视频在线观看| 深夜福利一区| 九一成人免费视频| 成人在线视频免费| 国产免费久久| 亚洲aⅴ网站| 黄色av日韩| 日韩精品欧美| 久久久免费人体| 91福利精品在线观看| 99香蕉国产精品偷在线观看 | 午夜在线一区二区| 999精品在线| av资源中文在线| 国产精品巨作av| 日韩在线观看中文字幕| 国产亚洲精品v| 婷婷精品视频| 日韩精品首页| 久久三级福利| 丝袜美腿诱惑一区二区三区 | 激情综合网站| 成人自拍av| 九九精品调教| 视频二区不卡| 国产亚洲一区二区手机在线观看| 成人片免费看| 午夜影院一区| 色在线中文字幕| 日韩理论片av|