Существуют ли проблемы с помещением "/" в имя тега git для создания иерархических/вложенных тегов?

Мы создали тег "2012/02/16" в нашем репозитории git. Затем мы заметили, что внутри Source Tree 2012 и 01 были представлены как папки, которые можно было бы аккуратно открыть и закрыть, чтобы выявить и скрыть теги. Наличие вложенной иерархии меток кажется хорошим способом организовать теги, а не просто иметь один плоский список.

Есть ли проблема с этим?

Когда я делаю git ls-remote, я вижу следующие записи:

8430572c89362b875109628c33a18e782aa38488    refs/tags/2012/02/16
d247e38159c8c4998bf8b555edfd7ffe7b945255    refs/tags/2012/02/16^{}

Я не уверен, что означают символы {{} в конце второго тега, и я хочу убедиться, что это поведение мы натолкнулись не на то, что мы не должны делать, прежде чем идти и использовать его для очистите наши теги.

Мы не видим символы {{} на наших "не вложенных" тегах.

Ответ 1

Нет проблем, использование косой черты - стандартная практика, например, в дисциплине "git -flow". Вы можете проверить правила синтаксиса для имен тегов на странице руководства git -check-ref-format (1): http://schacon.github.com/git/git-check-ref-format.html

Каретка с скобками - это то, что git пытается рассказать вам об этом теге, а не о том, что вы набрали. Вы можете интерпретировать его с помощью руководства gitrevisions (7): http://schacon.github.com/git/gitrevisions.html

Ответ 2

Единственная проблема, с которой вы столкнетесь, - бесполезное сообщение об ошибке, если вы попытаетесь создать тег, который сталкивается с "каталогом" в вашей иерархии (вызванный непосредственно каталогами, которые git использует для хранения встречных тегов):

% git tag foo/bar
% git tag foo
error: there are still refs under 'refs/tags/foo'
fatal: refs/tags/foo: cannot lock the ref

Это вряд ли будет проблемой на практике, обычно это происходит, когда люди пытаются и делают:

v0.0.1/rc1
v0.0.1/rc2
v0.0.1/beta1
v0.0.1/beta2

тогда попробуйте и пометьте v0.0.1, который ударит по вышеуказанной проблеме.

Ответ 3

Как и проблема столкновения файлов/каталогов, вы также можете столкнуться с проблемой чувствительности к регистру. Если вы работаете с файловой системой без учета регистра, такой как Windows и Mac OS X, тогда есть возможность иметь теги в удаленном репозитории, которые вы не можете получить/вытащить. Например, следующее столкновение:

archive/some-tag-or-other
Archive/a-different-tag

как когда git создает второй тег, который он фактически получает, помещается в каталог .git/refs/tags/archive. После того, как вы в этом состоянии, последующие выборки/вытягивания будут постоянно пытаться повторно получить второй тег.

Однако для этого существует простой способ: git pack-refs, который объединяет отдельные файлы ref в текстовый файл .git/packed-refs. После запуска отдельный файл тега для первого тега будет удален вместе с каталогом .git/refs/tags/archive, тогда второй тег может быть успешно извлечен/выведен.