Feature request: separate namespace for remote tags

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

Feature request: separate namespace for remote tags

From: Avi Kivity <hidden>
Date: 2016-06-15 22:48:19

Currently, 'git remote add foo ...' will allocate a separate namespace 
for foo branches (refs/remotes/foo/*) but will store foo tags in the 
main tag namespace (refs/tags/*).  This leads to several problems:

- the main tag namespace becomes polluted with zillions of tags
- if the tags from a remote conflict with a local (or perhaps another 
remote) tag, information is lost
- 'git remote rm' will not delete the remote tags, and so 'git gc' will 
not recover much of the space used by the remote

A workaround is to use tagopt = --no-tags and a separate fetch line in 
the remote configuration, but that is clumsy and error prone (a common 
error being to remember doing that only after the first fetch).  I'd 
like to request that remote tags be placed into a separate namespace 
(refs/remote-tags/foo/*?) that can be managed by 'git remote' subcommands.

My suggestion is:

- 'git clone' and subsequent fetches would continue to place tags in the 
global namespace (unless overridden by a switch)
- 'git remote add', if a switch of config flag is present, will place 
tags in a remote namespace; after a while the config flag can default to 
true
- 'git describe' will prefer local tags to remote tags
- the various commands which look at tags will be enhanced to consider 
remote tag namespaces
- possibly ignore remote tags which have the same name and value as 
existing local tags (so we don't have identical v1.7.0 and foo/v1.7.0)

Thoughts?

-- 
error compiling committee.c: too many arguments to function

Re: Feature request: separate namespace for remote tags

From: Avery Pennarun <hidden>
Date: 2016-06-15 22:48:19

On Mon, Feb 22, 2010 at 7:44 AM, Avi Kivity [off-list ref] wrote:
Currently, 'git remote add foo ...' will allocate a separate namespace for
foo branches (refs/remotes/foo/*) but will store foo tags in the main tag
namespace (refs/tags/*).  This leads to several problems:

- the main tag namespace becomes polluted with zillions of tags
- if the tags from a remote conflict with a local (or perhaps another
remote) tag, information is lost
- 'git remote rm' will not delete the remote tags, and so 'git gc' will not
recover much of the space used by the remote
I've sometimes wished for such a feature myself.  When merging things
using git-subtree, for example, you can easily end up importing
"v1.2.3" type tags from two different projects and causing yourself
total confusion.

However, just dividing the tags into namespaces removes one of the
nicest features of tags, which is that they uniquely identify a
particular revision across all repositories.  The whole point is that
ap/v1.2.3 isn't ever supposed to differ from origin/v1.2.3.

One option would be to split the tags into namespaces, but then
automatically search all namespaces when looking for a particular tag.
 Then when you drop a particular remote, you'd lose all its tags, but
if you *don't* drop that remote, things look like they always have.

Have fun,

Avery

Re: Feature request: separate namespace for remote tags

From: Avi Kivity <hidden>
Date: 2016-06-15 22:48:19

On 02/22/2010 08:22 PM, Avery Pennarun wrote:
On Mon, Feb 22, 2010 at 7:44 AM, Avi Kivity[off-list ref]  wrote:
   
quoted
Currently, 'git remote add foo ...' will allocate a separate namespace for
foo branches (refs/remotes/foo/*) but will store foo tags in the main tag
namespace (refs/tags/*).  This leads to several problems:

- the main tag namespace becomes polluted with zillions of tags
- if the tags from a remote conflict with a local (or perhaps another
remote) tag, information is lost
- 'git remote rm' will not delete the remote tags, and so 'git gc' will not
recover much of the space used by the remote
     
I've sometimes wished for such a feature myself.  When merging things
using git-subtree, for example, you can easily end up importing
"v1.2.3" type tags from two different projects and causing yourself
total confusion.

However, just dividing the tags into namespaces removes one of the
nicest features of tags, which is that they uniquely identify a
particular revision across all repositories.  The whole point is that
ap/v1.2.3 isn't ever supposed to differ from origin/v1.2.3.
   
That's why I suggested not creating ap/v1.2.3 if it matches 
refs/tags/v1.2.3 (a clone would default to using regs/tags, not 
refs/remote-tags/origin).  If they don't match, at least you don't lost 
information.
One option would be to split the tags into namespaces, but then
automatically search all namespaces when looking for a particular tag.
  Then when you drop a particular remote, you'd lose all its tags, but
if you *don't* drop that remote, things look like they always have.
   
Yes.

-- 
Do not meddle in the internals of kernels, for they are subtle and quick to panic.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help