0

ライブラリ pygit2 を使用して、プロジェクトに git モジュールを実装しています。現在、私は次の 2 つのシナリオでブロックされています: - プッシュよりもタグを削除 - プッシュよりもブランチを削除

これは私がやろうとしていることです:

>>> 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
4

1 に答える 1

0

名前refs/remotes/origin/1249somethingはブランチの名前ではなく、リモートのブランチがどのように見えるかについてのローカルのアイデアです。デフォルトの fetch 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)

そのブランチをリモートから削除します。

リモートとリモート トラッキング ブランチがリモート リポジトリとどのように関連しているかについての理解を深めるために、リモートの操作を読むことをお勧めします。

于 2015-05-17T13:43:58.187 に答える