如何使用 python 检查 git 仓库中是否有 unstaged/uncommitted 更改或未推送的提交

How to use python to check whether there are unstaged/uncommitted change or unpushed commit in a git repo

如何使用 python 检查 git 仓库中是否有 unstaged/uncommitted 更改或未推送的提交?

我只知道命令行

git status 会告诉

如果我为函数提供根路径,例如 ("C:/ProgramFiles"), 如果代码能给出一个列表就更好了,其中每个元素都是

(path of this repos found under the root path, Unstaged/uncommited changes, Untracked files: , Latest commit is pushed)

您可以使用 GitPython 包来提供帮助。

pip install GitPython

那么这个脚本可以给你一个起点:

from git import Repo

repo = Repo('.')

print(f"Unstaged/uncommited changes: {repo.is_dirty()}")
print(f"Untracked files: {len(repo.untracked_files)}")

remote = repo.remote('origin')
remote.fetch()
latest_remote_commit = remote.refs[repo.active_branch.name].commit
latest_local_commit = repo.head.commit

print(f"Latest commit is pushed: {latest_local_commit == latest_remote_commit}")

使用os.system()函数你可以通过python发送shell命令:

import os

os.system('git status')

如果您想管理输出,您可以使用 os.popen():

import os

stream = os.popen('git status')
output = stream.read()

并在 output 中找到 shell 个印刷品。