[BUG?] git remote rm repo nukes local refs for mirror repo

3 messages, 2 authors, 2016-06-15 · open the first message on its own page

[BUG?] git remote rm repo nukes local refs for mirror repo

From: Michael J Gruber <hidden>
Date: 2016-06-15 22:45:29

I just noticed the hard way that "git remote rm repo" nukes all local
(mirrored) refs if repo had been setup with "git remote add --mirror
repo url".
Some may argue that this behaviour fits the description "deletes all
remote tracking branches" but I would claim it does not: mirrored
branches are not remote tracking branches in the proper sense.

So:
- Is this behaviour intended?
- If yes, how else would I remove a remote mirror configuration without
destroying a local repo? git config, I know, but that can't be the way.

Michael

Technical:
remote_find_tracking() in remote.c returns "branch" as the remote
tracking branch of "branch" (itself) in a mirror setup. Is this the
right thing to do?

Re: [BUG?] git remote rm repo nukes local refs for mirror repo

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:45:29

Hi,

On Tue, 14 Oct 2008, Michael J Gruber wrote:
I just noticed the hard way that "git remote rm repo" nukes all local 
(mirrored) refs if repo had been setup with "git remote add --mirror 
repo url".

Some may argue that this behaviour fits the description "deletes all 
remote tracking branches" but I would claim it does not: mirrored 
branches are not remote tracking branches in the proper sense.
Count me into the former group.  If you set up a "--mirror" repository, it 
defeats the purpose to mix that with _true_ local branches.

I'd color this a pilot error,
Dscho

Re: [BUG?] git remote rm repo nukes local refs for mirror repo

From: Michael J Gruber <hidden>
Date: 2016-06-15 22:45:29

Johannes Schindelin venit, vidit, dixit 14.10.2008 11:32:
Hi,

On Tue, 14 Oct 2008, Michael J Gruber wrote:
quoted
I just noticed the hard way that "git remote rm repo" nukes all local 
(mirrored) refs if repo had been setup with "git remote add --mirror 
repo url".

Some may argue that this behaviour fits the description "deletes all 
remote tracking branches" but I would claim it does not: mirrored 
branches are not remote tracking branches in the proper sense.
Count me into the former group.  If you set up a "--mirror" repository, it 
defeats the purpose to mix that with _true_ local branches.

I'd color this a pilot error,
Dscho
OK, I'll give some background about the motivation:

I have a "local" repo.
I want to create a "backup repo" which contains the same branches
(including proper remotes, svn remotes).

So, I create an empty bare repo somewhere (say store:backuprepo.git),
and in the local repo I do:

git remote add --mirror backup store:backuprepo.git
git push backup

I need "mirror=true" because otherwise branches are not created
automatically (on push) on the remote side. I need the '+refs/*:refs/*'
refspec because otherwise not all refs are mirrored. But now I can't use
"git remote rm backup" to remove the configuration because that would
take away all my local branches, too.

Instead, I could set up things with

git remote add backup store:backuprepo.git
git config remote.backup.push '+refs/*:refs/*'

Then all branches are mirrored on the remote automatically. But
interesting things happen after fetch and push... Read "recursion". So,
in order to avoid any remote/backup/foo branches on the local side I
would have to use

git remote add backup store:backuprepo.git
git config remote.backup.push '+refs/*:refs/*'
git config --unset remote.backup.fetch

in order to create a "backup remote" configuration. Maybe I'm just being
dense (which is actually OK for a functional analyst); I'd be happy
about any more direct solution. At least I think there should be one, a
backup bare remote mirror is a common use case, and the config massaging
above is not something to recommend to novice users.

Michael

P.S.: Yeah I know, git's no backup tool, there's rsync... ;)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help