14

我如何使用GitPython来确定是否:

  • 我的本地分支在远程之前(我可以安全地推送)
  • 我的本地分支在遥控器后面(我可以安全地拉)
  • 我的本地分支与远程分支不同了?

要检查本地和远程是否相同,我这样做:

def local_and_remote_are_at_same_commit(repo, remote):
    local_commit = repo.commit()
    remote_commit = remote.fetch()[0].commit
    return local_commit.hexsha == remote_commit.hexsha
4

2 回答 2

16

https://stackoverflow.com/a/15862203/197789

例如

commits_behind = repo.iter_commits('master..origin/master')

commits_ahead = repo.iter_commits('origin/master..master')

然后,您可以使用以下内容从迭代器转到计数:

count = sum(1 for c in commits_ahead)

(您可能想在运行之前从远程获取iter_commits,例如repo.remotes.origin.fetch():)

这是最后一次使用 GitPython 1.0.2 检查。

于 2014-01-29T12:56:01.583 回答
1

以下对我来说效果更好,这是我从这个stackoverflow答案中得到的

commits_diff = repo.git.rev_list('--left-right', '--count', f'{branch}...{branch}@{{u}}')
num_ahead, num_behind = commits_diff.split('\t')
print(f'num_commits_ahead: {num_ahead}')
print(f'num_commits_behind: {num_behind}')
于 2021-04-15T13:44:46.610 回答