使用Python的连接和执行GIT命令

时间:2019-01-30 13:57:15

标签: python git gitpython

我正在尝试使用python连接并执行GIT命令,例如pull,检查状态,添加和提交新文件等。

我将python 3.7,PyCharm for IDE和GitPython 2.1.7用作库。我还使用了以下教程:https://www.fullstackpython.com/blog/first-steps-gitpython.html

但是似乎GIT可执行文件有问题。我已经按照教程中的代码执行到T,除非PyCharm会为我这样做,否则请设置环境。

我收到以下错误:

” 引发ImportError(err)
ImportError:错误的git可执行文件。
必须通过以下方式之一指定git可执行文件:
    -包含在您的$ PATH
中     -通过$ GIT_PYTHON_GIT_EXECUTABLE
进行设置     -通过git.refresh()显式设置
在解决此问题之前,所有git命令都将出错。
通过设置$ GIT_PYTHON_REFRESH环境变量,以后可以使此初始警告静音或加剧。
使用以下值之一:
    -安静| q |静音| s |无| n | 0:无警告或异常
    -warn | w | warning | 1:用于打印警告
    -error | e | raise | r | 2:引发异常
示例:
    出口GIT_PYTHON_REFRESH =安静

我已将环境变量“ Path”设置为我的Git \ bin路径,这是由另一个用户在此处询问类似的问题时告知的,但无济于事。

非常感谢您的帮助!

import os
from git import Repo


COMMITS_TO_PRINT = 5


def print_commit(commit):
    print('----')
    print(str(commit.hexsha))
    print("\"{}\" by {} ({})".format(commit.summary,
                                     commit.author.name,
                                     commit.author.email))
    print(str(commit.authored_datetime))
    print(str("count: {} and size: {}".format(commit.count(),
                                              commit.size)))


def print_repository(repo):
    print('Repo description: {}'.format(repo.description))
    print('Repo active branch is {}'.format(repo.active_branch))
    for remote in repo.remotes:
        print('Remote named "{}" with URL "{}"'.format(remote, remote.url))
    print('Last commit for repo is {}.'.format(str(repo.head.commit.hexsha)))


if __name__ == "__main__":
    repo_path = os.getenv('GIT_REPO_PATH')
    # Repo object used to programmatically interact with Git repositories
    repo = Repo(repo_path)
    # check that the repository loaded correctly
    if not repo.bare:
        print('Repo at {} successfully loaded.'.format(repo_path))
        print_repository(repo)
        # create list of commits then print some of them to stdout
        commits = list(repo.iter_commits('master'))[:COMMITS_TO_PRINT]
        for commit in commits:
            print_commit(commit)
            pass
    else:
        print('Could not load repository at {} :('.format(repo_path))

0 个答案:

没有答案