GitPython检查git pull是否更改了本地文件

GitPython检查git pull是否更改了本地文件,python,python-3.x,git,gitpython,Python,Python 3.x,Git,Gitpython,使用GitPython,我只想在拉取后本地文件发生更改时调用函数。例如,如果我在一台单独的计算机上按下按钮。然后拉动第一台计算机,它按预期工作,但不提供任何输出。理想的输出是更改的文件列表。或者只是告诉我如果拉操作有错误,什么也不拉,因为分支是最新的,或者是发生了更改的布尔值。我相信我可以勉强得到repo.git.status(),但这似乎很粗糙。环顾四周,我似乎也可以比较分支的变化,但似乎有很多额外的代码和远程调用。有没有正确的方法只使用拉式呼叫 while True: repo =

使用GitPython,我只想在拉取后本地文件发生更改时调用函数。例如,如果我在一台单独的计算机上按下按钮。然后拉动第一台计算机,它按预期工作,但不提供任何输出。理想的输出是更改的文件列表。或者只是告诉我如果拉操作有错误,什么也不拉,因为分支是最新的,或者是发生了更改的布尔值。我相信我可以勉强得到repo.git.status(),但这似乎很粗糙。环顾四周,我似乎也可以比较分支的变化,但似乎有很多额外的代码和远程调用。有没有正确的方法只使用拉式呼叫

while True:
    repo = git.Repo()
    o = repo.remotes.origin
    o.pull()
    changed = NOT_SURE
    if changed:
        do_something()
    print(repo.git.status())
    time.sleep(POLLING_RATE)
更新:这可用于检查是否进行了更改,但不会在没有额外远程调用的情况下提供文件更改

while True:
    print(str(time.ctime())+": Checking for updates")
    repo = git.Repo()
    current_hash = repo.head.object.hexsha
    o = repo.remotes.origin
    o.pull()
    pull_hash = repo.head.object.hexsha
    if current_hash != pull_hash:
        print("files have changed")
    else:
        print("no changes")

    time.sleep(config.GIT_POLL_RATE)

我理解这已经晚了两年,但我希望它仍然有一些用处

我刚刚编写了一个简单的脚本,可以从回购中提取,检查更改,然后在发现更改时重新启动目标。我发现这个方法能够识别拉的变化

def git_pull_change(path):
    repo = git.Repo(path)
    current = repo.head.commit

    repo.remotes.origin.pull()

    if current == repo.head.commit:
        print("Repo not changed. Sleep mode activated.")
        return False
    else:
        print("Repo changed! Activated.")
        return True

如果您只想检查远程端发生了什么样的更改,也可以使用
git fetch

如果您想打印更改,您可能应该浏览
git diff
,例如:


轮询率=10
REM_分支=‘主’
def(不同):
对于不同变化类型的cht:
变更=列表(不同的iter变更类型(cht))
如果len(变化)==0:
持续
打印(“更改类型:”,cht)
对于变更中的d:
打印(d.b_路径)
尽管如此:
repo=git.repo(‘.)
当前_hash=repo.head.object.hexsha
o=repo.remotes.origin
o、 fetch()
已更改=o.refs[REM_BRANCH]。object.hexsha!=当前\u散列
如有更改:
#做某事
diff=repo.head.commit.diff(o.refs[REM_BRANCH].object.hexsha)
漂亮的差别(差别)
睡眠时间(轮询率)
git diff
支持不同的更改类型:

打印(不同的更改类型)
#(‘A’、‘C’、‘D’、‘R’、‘M’、‘T’)

您可以针对不同的更改类型执行不同的操作。

要确定最新提交(拉取后)和早期提交之间的差异,您可以使用
git diff
。但是,我无法告诉您如何在GitPython中实现这一点,比较哈希值可以告诉您是否通过拉取收到了新的提交。但是,两次提交之间的文件可能没有差异。