删除pygit2中的引用

时间:2015-04-13 10:26:23

标签: python git pygit2

我正在使用库pygit2在我的项目上实现git模块。 现在我被这两种情况所阻止: - 删除标签而不是推送 - 删除分支而不是推送

这就是我想要做的事情:

>>> branch = repo.lookup_branch('origin/1249something', pygit2.GIT_BRANCH_REMOTE)
>>> branch
<_pygit2.Branch object at 0xb7350270>
>>> branch.delete()
>>> branch_to_push = 'refs/remotes/origin/1249something'
>>> pusher = pygit2.Signature('test TESTSSSSSSSS', 'test-test1@site.com')
>>> message = "just test message"
>>> remote_repo = repo.remotes[0]
>>> remote_repo.push(branch_to_push, pusher, message)

这是我得到的结果:

File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pygit2/remote.py", line 358, in push
    check_error(err)
  File "/usr/local/lib/python2.7/dist-packages/pygit2/errors.py", line 56, in check_error
    raise GitError(message)
_pygit2.GitError: src refspec 'refs/remotes/origin/1249something' does not match any existing object

1 个答案:

答案 0 :(得分:0)

名称refs/remotes/origin/1249something不是分支机构的名称,而是您对本地远程分支的看法。假设默认提取refspecs(即你做git remote add origin <url>),遥控器上的分支称为refs/heads/1249something。当您查找origin/1249something时,它不是远程分支,而是远程跟踪分支,它在上次运行提取时充当该分支状态的镜像。

在本地删除远程跟踪分支不会以任何方式影响远程存储库,下次执行提取时,它会再次显示。

如果您要从遥控器中删除分支,则需要指定一个说明此内容的refspec。这是通过提供空的本地部分来完成的,在您的情况下,您可以通过提供:refs/heads/1249something作为要推送的refspec来完成。冒号左侧的空白部分表示您希望删除右侧的引用。

remote = repo.remotes[0]
remote.push(':refs/heads/1249something', pusher, message)

将从遥控器中删除该分支。

我建议阅读Working with Remotes以巩固您对遥控器和远程跟踪分支与远程存储库的关系的理解。