首页 > 解决方案 > 从 gitPython 返回的 FetchInfo 对象的区别是当有东西要获取/拉取时与没有时?

问题描述

我正在尝试评估远程存储库中是否存在我可能需要在某段代码之前提取的更改。

我通过将FetchInfo对象获取fetch()到远程源来做到这一点:

>>> import git
>>> my_repo = git.Repo.init(my_dir)
>>> repo_fetch = my_repo.remotes.origin.fetch()[0]
>>> repo_fetch
<git.remote.FetchInfo object at 0x10192c650>

但是,我无法在文档中清楚地看到有东西要获取/拉取和没有的时候有什么区别。

我知道pull()输出一个str变量,其中包含Already up to date.本地存储库何时是最新的,但我不想拉,我只想获取。

当我知道远程存储库中没有任何更改时,我发现其属性存在一些差异:

>>> repo_fetch.ref 
<git.RemoteReference "refs/remotes/origin/master">
>>> repo_fetch.flags
4
>>> repo_fetch.note
''
>>> repo_fetch.old_commit
>>> repo_fetch.remote_ref_path
'master    '

当有变化时:

>>> repo_fetch.ref 
<git.RemoteReference "refs/remotes/origin/master">
>>> repo_fetch.flags
64
>>> repo_fetch.note
''
>>> repo_fetch.old_commit
<git.Commit "[some_string]">
>>> repo_fetch.remote_ref_path
' '

标签: pythonpython-3.xgitpython

解决方案


关键是属性,在文档flags中不是很直观或清楚地呈现:

ERROR = 128
FAST_FORWARD = 64
FORCED_UPDATE = 32
HEAD_UPTODATE = 4
NEW_HEAD = 2
NEW_TAG = 1
REJECTED = 16
TAG_UPDATE = 8

出于问题的目的,只要标志不等于4( HEAD_UPTODATE),我需要采取不同于本地和远程存储库相同的操作。


推荐阅读