新功能: 添加后端代码
This commit is contained in:
104
backend/dvadmin/utils/git_utils.py
Normal file
104
backend/dvadmin/utils/git_utils.py
Normal file
@@ -0,0 +1,104 @@
|
||||
import os
|
||||
from git.repo import Repo
|
||||
from git.repo.fun import is_git_dir
|
||||
|
||||
|
||||
class 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(self.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 tags_exists(self, tag):
|
||||
"""
|
||||
tag是否存在
|
||||
:return:
|
||||
"""
|
||||
return tag in self.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', 't1')
|
||||
# repo = GitRepository(local_path, remote_path)
|
||||
# branch_list = repo.branches()
|
||||
# print(branch_list)
|
||||
# repo.change_to_branch('dev')
|
||||
# repo.pull()
|
||||
Reference in New Issue
Block a user