午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術(shù)文章
文章詳情頁

基于python實現(xiàn)操作git過程代碼解析

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

安裝

pip3 install gitpython

基本使用

# 從遠(yuǎn)處倉庫下載代碼到本地import osfrom git.repo import Repo# 創(chuàng)建本地存儲地址download_path = os.path.join(’jason’,’NB’)# 從遠(yuǎn)程倉庫下載代碼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) # 將所有提交記錄結(jié)果格式成json格式字符串 方便后續(xù)反序列化操作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實現(xiàn)操作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()

項目代碼

服務(wù)器管理

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

代碼優(yōu)化

1.公用添加頁面

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

3.對modelform再次優(yōu)化 對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.給項目表新增線上項目地址和服務(wù)器字段

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 成人欧美片 | 国产一二区视频 | 少妇又色又爽又黄的视频 | 国产一区二区三区免费视频 | 色中文字幕 | 毛片网站免费观看 | 黄色二级视频 | 99热这里精品 | 日本久久中文字幕 | 综合狠狠 | 在线欧美成人 | 98国产在线 | 成人短片 | 欧美a在线观看 | 黄色录像特级片 | 综合久久久久综合 | 欧美ww| 国产成人精品影院 | 欧美黑人性xxx猛交 欧美日韩在线播放视频 | 夜夜操天天 | 深爱激情综合网 | 日韩黄色一区 | 亚洲午夜激情视频 | 欧美在线播放视频 | 亚洲综合在线观看视频 | 日本久久久久 | 国产成人专区 | 婷婷视频网站 | 成人高潮免费视频 | 欧美另类videoxo高潮 | 男女国产视频 | 国产在线一 | 一本综合久久 | 欧美黄色一区二区 | 亚洲欧美另类色图 | 日韩av午夜| 亚洲精品久久久久久久久 | 成年人网站免费在线观看 | 九九热这里只有 | 日本久久成人 | 大地资源高清播放在线观看 |