# How to git push mirror local refs only?

4 messages from 2017-06-09 to 2017-06-19. Participants: Robert Dailey, Junio C Hamano.
Thread: https://gitlist.dev/t/46149

## Robert Dailey, 2017-06-09 16:12

Subject: How to git push mirror local refs only?
Message-ID: <CAHd499BBNsai4SScOe6kADsgbGRLyGnDKyUcm8LZL-w8c9Webw@mail.gmail.com>
URL: https://gitlist.dev/e/CAHd499BBNsai4SScOe6kADsgbGRLyGnDKyUcm8LZL-w8c9Webw%40mail.gmail.com

```
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, 2017-06-10 01:53

Subject: Re: How to git push mirror local refs only?
Message-ID: <xmqqpoec4nib.fsf@gitster.mtv.corp.google.com>
URL: https://gitlist.dev/e/xmqqpoec4nib.fsf%40gitster.mtv.corp.google.com
In-Reply-To: <CAHd499BBNsai4SScOe6kADsgbGRLyGnDKyUcm8LZL-w8c9Webw@mail.gmail.com>

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






```

## Robert Dailey, 2017-06-19 14:20

Subject: Re: How to git push mirror local refs only?
Message-ID: <CAHd499Aft6yE=8f8DGRVxMYNR5kg6AVs3tECVtz1VDdwFeL5fg@mail.gmail.com>
URL: https://gitlist.dev/e/CAHd499Aft6yE%3D8f8DGRVxMYNR5kg6AVs3tECVtz1VDdwFeL5fg%40mail.gmail.com
In-Reply-To: <xmqqpoec4nib.fsf@gitster.mtv.corp.google.com>

```
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
>>
>> 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, 2017-06-19 17:58

Subject: Re: How to git push mirror local refs only?
Message-ID: <xmqq4lvbuaef.fsf@gitster.mtv.corp.google.com>
URL: https://gitlist.dev/e/xmqq4lvbuaef.fsf%40gitster.mtv.corp.google.com
In-Reply-To: <CAHd499Aft6yE=8f8DGRVxMYNR5kg6AVs3tECVtz1VDdwFeL5fg@mail.gmail.com>

```
Robert Dailey <rcdailey.lists@gmail.com> writes:

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

```
