当pulling and integrating changes from remote使用pygit2时,最后一步是使用Repository.checkout()
或Repository.checkout_head()
结帐。哪个用?
这两个都以结账策略为参数。
现在有几种策略可以检查出GIT_CHECKOUT_SAFE,GIT_CHECKOUT_SAFE_CREATE,GIT_CHECKOUT_FORCE etc.
我面临的问题是,即使在签出后,索引文件也被修改,即其中有几个文件被暂存。
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()
{}
注意:这是pulling and integrating changes using pygit2和another question here
的后续问题答案 0 :(得分:0)
没有区别。如果您将refname
'HEAD'
传递给Repository.checkout()
,则会致电Repository.checkout_head()
。
至于为什么文件仍然被修改,这是因为你告诉图书馆不要覆盖更改。有关每种策略的作用的说明,请参阅the strategy docs。具体地,
在它们之间是GIT_CHECKOUT_SAFE和GIT_CHECKOUT_SAFE_CREATE,它们都只进行不会丢失变化的修改。
当您的文件被修改时,覆盖它会导致我们失去更改,因此它会拒绝。如果要覆盖它,请使用FORCE
或使文件不处于修改状态。