GitPython中“git remote show origin”的等效命令是什么?

9

我正在尝试更新一个Python脚本,使用GitPython替换了subprocess,以检查几个本地仓库与远程仓库的状态。在GitPython中,git remote show origin的等效命令是什么?或者有没有更好的方法来检查本地仓库是否可以进行fast-forwardableout-of-date等操作?

$ git remote show origin
* remote origin
  Fetch URL: <url>
  Push  URL: <url>
  HEAD branch: master
  Remote branches:
    XYZ    tracked
    master tracked
  Local branches configured for 'git pull':
    XYZ    merges with remote XYZ
    master merges with remote master
  Local refs configured for 'git push':
    XYZ    pushes to XYZ    (up to date)
    master pushes to master (up to date)

我最关心的是最后两行。看起来可以通过使用GitPython遍历git.Repo.headsgit.Repo.remotes.origin.refs并比较.master.commit (等等)哈希值来实现这一点。 这似乎比上面的单个本机git命令更多工作,并且需要更多的工作才能确定哪些方面已过时。我希望能像 git.Repo.remotes.origin.status() 那样做。在GitPython中,确定这一点的正确方式是什么?

2个回答

4

如果gitpython没有提供所需的功能,您可以使用git.cmd.Git()。它直接调用git,非常方便,虽然我猜大部分只是一个子进程的包装器:

import git

g = git.cmd.Git("/path/to/git/repo")
print(g.execute("git remote show origin"))  # git remote show origin
print(g.execute(["git", "remote", "show", "origin"]))  # same as above
print(g.remote(verbose=True))  # git remote --verbose

0

如果您需要一个简洁的每个分支报告,我不知道有什么比运行git remote show origin作为子进程更好的选择。 如果您只关心单个分支,并且假设您已经执行了一次获取操作,则可以像这样检查您落后或领先多少个提交:

commits_behind = list(repo.iter_commits(
            '{branch}..{tracking_branch}'.format(
                branch=branch,
                tracking_branch=repo.heads[branch].tracking_branch())))

commits_ahead = list(repo.iter_commits(
            '{tracking_branch}..{branch}'.format(
                branch=branch,
                tracking_branch=repo.heads[branch].tracking_branch())))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接