remote does not support deleting refs
Hi,
I tried to setup a central git repository. Access is via ssh. How do I delete a remote branch? If I try it using
Quoted 2 lines
git branch -d -r origin/testbranch
git push origin :refs/heads/testbranch
I get the error
To ssh://myserver.com/my/path/to/repository
! [rejected] testbranch (remote does not support deleting refs)
error: failed to push some refs to 'ssh://myserver.com/my/path/to/repository'
So how do I setup my remote repository to allow deleting remote branches?
Thanks,
Martin
Quoted 3 lines · Martin
To ssh://myserver.com/my/path/to/repository
! [rejected] testbranch (remote does not support deleting refs)
What version of Git do you use on the server? I think Git before v1.5 does not support deleting remote refs. You have to upgrade Git on your server.
Dmitry
error: unlink(.git/refs/remotes/origin/testbranch) failed: was remote does not support deleting refs
In reply to MartinHi,
it seems that an old verison on the remote site was the problem:
On debian/etch git seems to be too old. I upgraded git to the testing version and now I can delete remote branches.
But I get another error:
$ git push origin :testbranch To ssh://myserver.com/my/path/to/repository - [deleted] testbranch error: unlink(.git/refs/remotes/origin/testbranch) failed: No such file or directory error: Failed to delete
Any idea?
Thanks,
Martin
Quoted 21 lines · Martin
Hi,
I tried to setup a central git repository. Access is via ssh. How do I delete a remote branch? If I try it using
Quoted 2 lines
git branch -d -r origin/testbranch
git push origin :refs/heads/testbranchI get the error
To ssh://myserver.com/my/path/to/repository
! [rejected] testbranch (remote does not support deleting refs)
error: failed to push some refs to 'ssh://myserver.com/my/path/to/repository'So how do I setup my remote repository to allow deleting remote branches?
Thanks,
MartinSignature · 3 lines
To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: error: unlink(.git/refs/remotes/origin/testbranch) failed: was remote does not support deleting refs
Hi,
[please do not top post]
Quoted 10 lines · Martin
_
But I get another error:$ git push origin :testbranch To ssh://myserver.com/my/path/to/repository - [deleted] testbranch error: unlink(.git/refs/remotes/origin/testbranch) failed: No such file_ or directory error: Failed to delete _ Any idea?
It is harmless. It is just that "git push origin :refs/heads/testbranch" cannot remove your local reference to that branch because you already have removed it by running "git branch -d -r origin/testbranch"
Normally you just run "git push origin :refs/heads/testbranch" without "git branch -d -r origin/testbranch" and then you will not have this error.
Dmitry
Re: error: unlink(.git/refs/remotes/origin/testbranch) failed: was remote does not support deleting refs
Quoted 11 lines · Dmitry Potapov
Quoted 9 lines · Martin
But I get another error:
$ git push origin :testbranch To ssh://myserver.com/my/path/to/repository - [deleted] testbranch error: unlink(.git/refs/remotes/origin/testbranch) failed: No such file_ or directory error: Failed to delete _ Any idea?
Quoted 3 lines
It is harmless. It is just that "git push origin :refs/heads/testbranch" cannot remove your local reference to that branch because you already have removed it by running "git branch -d -r origin/testbranch"
It is harmless, but it still feels a little wrong to scare the user with that message, especially since "Failed to delete" is ambiguous; it looks like the main operation, deleting the remote ref, failed. But it didn't; the operation that failed was something not even explicitly asked for.
How about this cleanup:
-- >8 --
make deleting a missing ref more quiet
If git attempts to delete a ref, but the unlink of the ref file fails, we print a message to stderr. This is usually a good thing, but if the error is ENOENT, then it indicates that the ref has _already_ been deleted. And since that's our goal, it doesn't make sense to complain to the user.
This harmonizes the error reporting behavior for the unpacked and packed cases; the packed case already printed nothing on ENOENT, but the unpacked printed unconditionally.
Additionally, send-pack would, when deleting the tracking ref corresponding to a remote delete, print "Failed to delete" on any failure. This can be a misleading message, since we actually _did_ delete at the remote side, but we failed to delete locally. Rather than make the message more precise, let's just eliminate it entirely; the delete_ref routine already takes care of printing out a much more specific message about what went wrong.
--- builtin-send-pack.c | 3 +-- refs.c | 2 +- t/t5404-tracking-branches.sh | 7 +++++++ 3 files changed, 9 insertions(+), 3 deletions(-)
builtin-send-pack.c +1 -2
@@ -226,8 +226,7 @@ static void update_tracking_ref(struct remote *remote, struct ref *ref)if (args.verbose)fprintf (stderr,"updating local tracking ref '%s'\n" , rs.dst);if (ref->deletion) { -if (delete_ref (rs.dst,NULL )) -error ("Failed to delete" ); +delete_ref (rs.dst,NULL ); }else update_ref ("update by push" , rs.dst, ref->new_sha1,NULL ,0 ,0 );
refs.c +1 -1
@@ -925,7 +925,7 @@ int delete_ref(const char *refname, const unsigned char *sha1) i =strlen (lock->lk->filename) -5 ;/* .lock */ lock->lk->filename[i] =0 ; err =unlink (lock->lk->filename); -if (err) { +if (err && errno !=ENOENT ) { ret =1 ;error ("unlink(%s) failed: %s" , lock->lk->filename,strerror (errno));
t/t5404-tracking-branches.sh +7 -0
@@ -10,6 +10,7 @@ test_expect_success 'setup' ' git commit -m 1 && git branch b1 && git branch b2 && + git branch b3 && git clone . aa && git checkout b1 && echo b1 >>file &&
@@ -50,4 +51,10 @@ test_expect_success 'deleted branches have their tracking branches removed' ' test "$(git rev-parse origin/b1)" = "origin/b1" ' +test_expect_success 'already deleted tracking branches ignored' ' + git branch -d -r origin/b3 && + git push origin :b3 >output 2>&1 && + ! grep error output +' + test_done
Signature · 1 line
1.5.6.2.381.ga86b
Re: error: unlink(.git/refs/remotes/origin/testbranch) failed: was remote does not support deleting refs
Quoted 6 lines · Jeff King
It is harmless, but it still feels a little wrong to scare the user with that message, especially since "Failed to delete" is ambiguous; it looks like the main operation, deleting the remote ref, failed. But it didn't; the operation that failed was something not even explicitly asked for.
How about this cleanup:
Ack.