threads / discuss / 46149

How to git push mirror local refs only?

Subject: How to git push mirror local refs only?

## tl;dr

4 messages between Jun 9, 2017 and Jun 19, 2017.

replies: 3people: 2as markdown or json

Robert Dailey· Jun 9, 2017, 16:12 UTC · lore

So I want to update my remote fork with all my local branches. Normally I'd do this:

$ git push --mirror fork

However this will also push everything under `refs/remotes` which I do not want. And it fails if I specify a refspec parameter with --mirror.

Is there a way to achieve this through one or more git commands? Note I'm doing this on a non-bare clone and have to keep it that way since I'm pushing branches I actively work on.

An intrinsic benefit of what I'm trying to do is that the mirror command will also batch delete branches on the remote that do not exist locally, which is behavior I want since I do not need them anymore.

Thanks in advance.
Junio C Hamano· Jun 10, 2017, 01:53 UTC · re: Robert Dailey · lore

Re: How to git push mirror local refs only?

Robert Dailey <rcdailey.lists@gmail.com> writes:
Show 16 quoted lines
> So I want to update my remote fork with all my local branches.
> Normally I'd do this:
>
> $ git push --mirror fork
>
> However this will also push everything under `refs/remotes` which I do
> not want. And it fails if I specify a refspec parameter with --mirror.
>
> Is there a way to achieve this through one or more git commands? Note
> I'm doing this on a non-bare clone and have to keep it that way since
> I'm pushing branches I actively work on.
>
> An intrinsic benefit of what I'm trying to do is that the mirror
> command will also batch delete branches on the remote that do not
> exist locally, which is behavior I want since I do not need them
> anymore.
Something along this line in your .git/config:
	[remote "fork"]
		url = ...
		push = refs/heads/*:refs/heads/*
and then
	$ git push --prune --follow-tags fork
Robert Dailey· Jun 19, 2017, 14:20 UTC · re: Junio C Hamano · lore

Re: How to git push mirror local refs only?

On Fri, Jun 9, 2017 at 8:53 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 28 quoted lines
> Robert Dailey <rcdailey.lists@gmail.com> writes:
>
>> So I want to update my remote fork with all my local branches.
>> Normally I'd do this:
>>
>> $ git push --mirror fork
>>
>> However this will also push everything under `refs/remotes` which I do
>> not want. And it fails if I specify a refspec parameter with --mirror.
>>
>> Is there a way to achieve this through one or more git commands? Note
>> I'm doing this on a non-bare clone and have to keep it that way since
>> I'm pushing branches I actively work on.
>>
>> An intrinsic benefit of what I'm trying to do is that the mirror
>> command will also batch delete branches on the remote that do not
>> exist locally, which is behavior I want since I do not need them
>> anymore.
>
> Something along this line in your .git/config:
>
>         [remote "fork"]
>                 url = ...
>                 push = refs/heads/*:refs/heads/*
>
> and then
>
>         $ git push --prune --follow-tags fork

Sorry for the late reply, I was out of town all last week. Thanks for your help. Does this serve as a good general default? I can't imagine a case where I'd ever want to push something inside refs/remotes.

Junio C Hamano· Jun 19, 2017, 17:58 UTC · re: Robert Dailey · lore

Re: How to git push mirror local refs only?

Robert Dailey <rcdailey.lists@gmail.com> writes:
Show 21 quoted lines
> On Fri, Jun 9, 2017 at 8:53 PM, Junio C Hamano <gitster@pobox.com> wrote:
>> Robert Dailey <rcdailey.lists@gmail.com> writes:
>>
>>> So I want to update my remote fork with all my local branches.
>>> Normally I'd do this:
>>>
>>> $ git push --mirror fork
>>> ...
>> Something along this line in your .git/config:
>>
>>         [remote "fork"]
>>                 url = ...
>>                 push = refs/heads/*:refs/heads/*
>>
>> and then
>>
>>         $ git push --prune --follow-tags fork
>
> Sorry for the late reply, I was out of town all last week. Thanks for
> your help. Does this serve as a good general default? I can't imagine
> a case where I'd ever want to push something inside refs/remotes.

It may, as a good general default to something other than --mirror, perhaps. When I ask for mirroring the state of my repository, I'd expect it to preserve as much state as possible, including the tips of histories I received from elsewhere.

← back to recent threads