[英]Replicating "git checkout <commit> with PyGit2
我试图复制命令“git checkout(commit)”的行为,其中(commit)是对特定提交的引用,而不是分支名称。
使用此命令时,存储库的“HEAD”指向提交(分离的头),工作目录与此提交中的状态相同。
目前,我设法使存储库的HEAD指向使用PyGit2的提交:
def go(self, repo_name, version):
repo = pygit2.Repository(bdd[repo_name])
#commit = repo.revparse_single(version)
#repo.reset(version, pygit2.GIT_RESET_HARD)
repo.set_head(pygit2.Oid(hex=version))
print repo.head_is_detached
我的问题是我找不到如Git CLI那样回滚工作目录的方法。 我试过用:
repo.checkout_head()
:它对工作目录没有任何作用。 repo.checkout()
:崩溃与GitError: X conflicts prevent checkout
有没有办法在不使用Repository.reset(ref, pygit2.GIT_RESET_HARD)
情况下复制此行为?
低级结账是git read-tree -um HEAD $target && git update-ref HEAD $target;
pygit2显然只理解单树读取而没有任何选项,所以它正在进行结账和合并以及任何其他操作,它提供的不仅仅是实际git的粗略模型。 看起来你可以通过在你的提交中添加一个ref来检查它,检查出来,然后重置HEAD并删除ref。
repo.checkout_tree可以直接使用提交。 完成后,您仍然需要set_head。 此外,如果您想要'git reset'等效,请将以下策略传递给checkout_tree: pygit2.GIT_CHECKOUT_FORCE | pygit2.GIT_CHECKOUT_RECREATE_MISSING
pygit2.GIT_CHECKOUT_FORCE | pygit2.GIT_CHECKOUT_RECREATE_MISSING
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.