当使用 pygit2从远程拉取和集成更改时,最后一步是使用Repository.checkout()
or签出Repository.checkout_head()
。使用哪个?
两者都以检查策略为论据。现在有几种检查策略,即 GIT_CHECKOUT_SAFE、GIT_CHECKOUT_SAFE_CREATE、GIT_CHECKOUT_FORCE等
。我面临的问题是,即使在检查了索引文件之后,它也被修改了,即其中有几个文件是暂存的。
r.repo.status()
{'README.md': 2}
使用策略 GIT_CHECKOUT_FORCE 时,索引为空,并且提交也被存储。
什么时候不应该使用 GIT_CHECKOUT_FORCE 策略?
这是该过程的分步代码:
r.repo
是Repository对象。remo
是有名字的遥控器ssh-sansa
>>> r.repo.status()
{}
>>> z = remo.fetch()
>>> remoref = r.repo.lookup_reference('refs/remotes/ssh-sansa/master')
>>> rref = r.repo.lookup_reference(r.ref)
>>> r.ref
'refs/heads/master'
>>> remoref.target.hex
'23aac24f65c775d0524095d422133c63caf3826a'
>>> rref.target.hex
'29f5f99722e9c93a58ec085a55c6a4814c4adffb'
>>> rref.target=remoref.target.hex
>>> rref.target.hex
'23aac24f65c775d0524095d422133c63caf3826a'
>>> r.repo.status()
{'README.md': 2}
>>> r.repo.checkout_head(repo_.pygit2.GIT_CHECKOUT_SAFE_CREATE)
>>> r.repo.status()
{'README.md': 2}
>>> r.repo.checkout('HEAD',strategy=repo_.pygit2.GIT_CHECKOUT_SAFE_CREATE)
>>> r.repo.status()
{'README.md': 2}
>>> r.repo.checkout('HEAD',strategy=repo_.pygit2.GIT_CHECKOUT_FORCE)
>>> r.repo.status()
{}