python - 从 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
' '
解决方案
关键是属性,在文档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
),我需要采取不同于本地和远程存储库相同的操作。
推荐阅读
- php - 自定义页面模板无法识别定义在
- python - 打印正在以相反的字母顺序打印所有字母而不是单词
- sql - Varchar 到日期转换
- oracle - 嵌套在循环中的案例,PLS-00103:遇到符号“;” 预期以下情况之一时:案例
- swift - 如何模糊父视图,同时保持子视图不模糊
- python - 如何检查数组A中的元素是否存在于数组B中并返回B的索引
- csv - 从 MySQL 结果生成 .CSV 文件
- php - mysqli_fetch_row() 在 PHP 中的 foreach() 之后不显示
- php - 如何强制浏览器下载巨大的 mp4 文件而不是播放它
- concurrency - Apache Kafka 按特定顺序使用来自不同主题的事件