Why does Git only store branches under refs/remotes/origin?
<p>After looking at Git tags and seeing how they are propagated and how many workarounds there are to <em>pruning</em> them, I concluded that the best fix would be to change the structure of <code>refs/remotes/origin/</code>. So, why are refs under <code>refs/remotes/origin/</code> assumed to be branches? It would have been easy to replicate the top-level structure under the remote ref too:</p>

<pre><code>refs/remotes/origin/heads/  &lt;-- remote tracking branches
refs/remotes/origin/tags/   &lt;-- remote tracking tags
refs/remotes/origin/notes/  &lt;-- remote tracking notes
</code></pre>

<p>But all tools that work with Git assume that refs under <code>refs/remotes/origin/</code> are branches.</p>

<p>Is there an actual reason this is the way things are or is it merely an accident?</p>

<p><strong>Edit 1:</strong></p>

<p>After looking into this a little more I found that <code>git log --decorate</code> will correctly show <em>annotated tags</em> under the <code>refs/remotes/origin/tags/*</code> but <em>lightweight tags</em> show up as branches.</p>

<p>Config file:</p>

<pre><code>[remote "origin"]
    url = ssh://git@github.com/test/example.git
    fetch = +refs/heads/*:refs/remotes/origin/heads/*
    fetch = +refs/tags/*:refs/remotes/origin/tags/*
</code></pre>

<p>Lightweight tag:</p>

<pre><code>commit e447ca1e2f3c765072c6bd783981619da3d6a090 (tag: v0.2, origin/tags/v0.2)
Author: Joanna Blogs &lt;joanna@blogs.com&gt;
Date:   Thu Aug 18 14:38:48 2016 -0500

    Testing out a light weight tag
</code></pre>

<p>Annotated tag:</p>

<pre><code>commit 334d587e8f9bad1756665384056760c0cb798f32 (tag: v0.1, tag: origin/tags/v0.1)
Author: Joe Blogs &lt;joe@blogs.com&gt;
Date:   Fri Jul 1 09:24:25 2016 -0500

    Testing an annotated tag
</code></pre>

<p>However, as expected, the <code>git tag -l</code> command doesn't show them at all.</p>