使用gitpython获取两个分支之间的提交差异

时间:2020-10-13 10:21:29

标签: python python-3.x git github gitpython

我想要实现的目标可以使用命令行git如下

git log stage..develop

commit ea31b4f01f02af91f31.....b34895e1c825 (origin/develop, develop)
Author: author <author@gmail.com>
Date:   Tue Oct 13 11:59:01 2020 +0400

    chore: 15th commit

我想使用gitpython做同样的事情

我无法找到合适的文档。我检查了docs,但没有运气。

import git
import shutil
import os

from git import Git

ssh_key_identify_file_path = ""


class SCMRepo(object):
    repo_url = ""
    repo_name = ""
    repo_obj = None

    def __init__(self, r_url, r_name):
        self.repo_url = r_url
        self.repo_name = r_name

    def git_clone(self, r_clone_dir):
        git.Git(r_clone_dir).clone(self.repo_url)
        self.repo_obj = git.Repo.init(r_clone_dir + self.repo_name)

    def git_checkout(self, r_branch_name):
        self.repo_obj.git.checkout(r_branch_name)

    def git_reset(self, reset_to_branch_name):
        self.repo_obj.git.reset('--hard', reset_to_branch_name)

    def git_push(self):
        origin = self.repo_obj.remote(name='origin')
        origin.push()

    def git_log(self):
        if os.path.isdir("/tmp/" + self.repo_name):
            repository_path = "/tmp/" + self.repo_name
            gitObj = git.Git(repository_path)
            loginfo = gitObj.log()
            print(type(loginfo))
            print(loginfo)
        else:
            print("Repo path does not exist")



def get_scm_object(repository_url):
    repository_name = repository_url.split("/")[1].replace(".git", "")
    if os.path.isdir("/tmp/" + repository_name):
        shutil.rmtree("/tmp/" + repository_name.replace(".git", ""))
    scm_object = SCMRepo(repository_url, repository_name)
    scm_object.git_clone("/tmp/")
    return scm_object



def get_git_log_of_branch(scm_object, branch_name):
    scm_object.git_checkout(branch_name)
    scm_object.git_log()


scm_obj = get_scm_object("git@github.author/test-ff.git")
get_git_log_of_branch(scm_obj, "stage")
print("*********************************")

1 个答案:

答案 0 :(得分:1)

请参阅this。好像是一样的。它将打印显影和阶段分支之间的差异。

相关问题