用Python操作git命令

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(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, ‘https://gitee.com/wupeiqi/fuck.git‘)
    branch_list = repo.branches()
    print(branch_list)
    repo.change_to_branch(‘dev‘)
    repo.pull()

原文地址:https://www.cnblogs.com/hulk-1029/p/12118474.html

时间: 2024-07-31 14:02:21

用Python操作git命令的相关文章

python操作git,代码发布流程

代码发布流程 服务器管理 项目管理 发布任务管理 django+channels发布/部署 python如何操作git 安装 pip3 install gitpython 基本使用 # 从远处仓库下载代码到本地 import os from git.repo import Repo # 创建本地存储地址 download_path = os.path.join('jason','NB') # 从远程仓库下载代码 Repo.clone_from('https://github.com/Domini

代码发布项目(三)——python操作git、代码发布流程(服务器管理、项目管理)

一.python如何操作git 如果你想用python代码操作git需要下载一个模块 安装 pip install gitpython 基本使用 # 从远处仓库下载代码到本地 import os from git.repo import Repo # 创建本地存储地址,没有会自动创建文件 download_path = os.path.join('jason','NB') # 从远程仓库下载代码 Repo.clone_from('https://github.com/DominicJi/Teac

用cmder操作git 命令

1. 安装 sudo apt-get install git 2. 配置 因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址. $ git config --global user.name Yourname $ git config --global user.email [email protected] 就算自保家门也可能会出现如下问题,不知道是哪个用户,所以我们可以输入:git config --global credential.helper sto

git bash 常用操作文件命令

git bash常用操作文件命令 在Windows下使用Git Bash,用的是Linux命令,常用几个文件操作命令如下: Windows命令 Linux 命令 意义 Windows命令 Linux 命令 意义 cd e:\xxx cd /e/xxx 切换到xxx目录 cd pwd 显示当前目录路径 dir ls 列出当前目录内容 copy nul xxx.txt touch xxx.txt 生成名为xxx.txt的空文件 del xxx.txt rm xxx.txt 删除xxx.txt文件 m

3.Git 命令行操作

1.Git 命令行操作(本地库操作): 1.1. 创建本地库(本地库初始化): 第一步:首先在D盘建了个名为git空文件夹,命令行中cd到这个文件夹: 第二步:通过git init命令把这个目录变成Git可以管理的仓库: 文件夹会生成一个.git目录,不用去改它,这个目录默认是隐藏的,用ls -lah命令就可以看见 注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要进行修改: 参考:https://blog.csdn.net/songkuiyuansky/article/d

Python 命令行之旅:使用 docopt 实现 git 命令

作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Article 一.前言 在前面两篇介绍 docopt 的文章中,我们全面了解了 docopt 的能力.按照惯例,我们要像使用 argparse 一样使用 docopt 来实现 git 命令. 为了让没读过 使用 argparse 实现 git 命令 的小伙伴也能读明白本文,我们仍会对 git 常用命令和 gitpy

GIT → 05:Git命令行操作

5.1 打开命令行窗口 安装Git后,在资源管理器的空白处,单击鼠标右键打开窗口,点击 Git Bash Here ,打开Git命令行窗口,在窗口中可直接使用Linux命令操作: 5.2 初始化Git本地库 命令: git init效果: 注意: .git 目录中存放的是本地库相关核心配置文件,也不要随意删除与修改 .git 目录仓库目录说明: hooks目录:脚本文件的目录. info目录:保存了不希望在 .gitignore 文件中管理的忽略模式的全局可执行文件 logs目录:日志目录 ob

git命令与操作

Git基础 Git使用前的配置 配置用户姓名和邮箱(多人协作时很有用) 配置姓名 $ git config --global user.name xxxx 配置邮箱 $ git config --global user.email [email protected] 查看配置是否成功 $ git config --list 注意: 更改配置-->重复上述命令 或直接修改 C:\Users\用户\.gitconfig 路径不统一 提交文件步骤 git init 初始化git仓库 git statu

python实现git代码更新后发送邮件通知

当一个团队使用git进行开发时,一旦代码更新就需要通知团队成员.现在利用git的钩子文件以及python写的脚本自动去帮我们做成这件事. git的钩子文件分为服务器(远端仓库)钩子文件和客户端(本地)钩子文件,进行脚本编写时要区分好不同端所用的钩子文件.编写错误会导致邮件无法发送, 一般来讲,只编写服务端的钩子文件,服务端钩子文件主要有三种: pre-receiver: 处理来自客户端的推送操作时,首先执行的钩子文件 update: 与pre-receiver类似,会为每一个被推送的分支各运行一