#!/usr/bin/python3import osfrom git import Repofrom git.repo.fun import is_git_dirfile = "."ROOT_DIR = os.path.dirname(os.path.abspath(file))repo = Repo(ROOT_DIR)# 查看当前分支print(ROOT_DIR, repo.active_branch)# 切换分支repo.git.checkout('master')# 获取版本库暂存区index = repo.index#添加修改文件 – 注意这里today为你需要修改或新增的文件index.add(['today'])#提交修改到本地仓库index.commit('update report folder')#获取远程仓库remote = repo.remote()#拉取远程仓库数据remote.pull()#推送本地修改到远程仓库remote.push()# 创建本地路径用来存放远程仓库下载的代码download_path = os.path.join('NB')# 拉取代码Repo.clone_from('https://github.com/DominicJi/TeachTest.git',to_path=download_path,branch='master')# ############## 2. pull最新代码 ##############import osfrom git.repo import Repolocal_path = os.path.join('NB')repo = Repo(local_path)repo.git.pull()# ############## 3. 获取所有分支 ##############import osfrom git.repo import Repolocal_path = os.path.join('NB')repo = Repo(local_path)branches = repo.remote().refsfor item in branches:print(item.remote_head)# ############## 4. 获取所有版本 ##############import osfrom git.repo import Repolocal_path = os.path.join('NB')repo = Repo(local_path)for tag in repo.tags:print(tag.name)# ############## 5. 获取所有commit ##############import osfrom git.repo import Repolocal_path = os.path.join('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 Repolocal_path = os.path.join('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. 打包代码 ##############import osfrom git.repo import Repolocal_path = os.path.join('NB')repo = Repo(local_path)with open(os.path.join('NB.tar'), 'wb') as fp:repo.archive(fp)class GitRepository(object):"""git仓库管理"""def __init__(self, local_path, repo_url, branch='master'):self.local_path = local_pathself.repo_url = repo_urlself.repo = Noneself.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().refsreturn [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, 'https://github.com/DominicJi/TeachTest.git', 'master')branch_list = repo.branches()print(branch_list)repo.change_to_branch('dev')repo.pull()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。