On Wed, 2 Dec 2009 09:34:37 +0300 "Dmitry E. Oboukhov" <unera@debian.org> wrote: > >>>> однако при попытке сделать git push --tags в другой репозитарий > >>>> эти метки игнорируются. > AGG>>> потому что это не локальные рефы, а удаленные. Добейся, > AGG>>> вначале, чтобы у тебя были обычные тэги, которые отображаются > AGG>>> командой git tag и потом уже пуш. > >> > >> так в том то и вопрос: как этого добиться? > > AGG> Ну смотри, у тебя есть некоторые ref'ы грубо говоря в другом > AGG> неймспейсе. refs/remotes/tags/tag1 > AGG> Нормальные tag'и должны быть в refs/tags > AGG> При чем сделано это вполне понятно почему: в svn нету тэгов, а > AGG> есть только копии поддеревьев. То есть, в лучшем случае то, что > AGG> подразумевается под тегом в svn, на самом деле такая ветка, > AGG> которую просто по-договоренности не принято изменять. Опять же > AGG> это вполне конкретный коммит с коммит логом. > > AGG> Если ты хочешь, чтобы на соответствующие вершины указывали > AGG> гитовские тэги, то создай их руками. Например так: > > AGG> for tag in $(git branch -r | grep tags/);do > AGG> git tag $(basename $tag) $tag > AGG> done > > я так делал (в первом письме писал), вебгуй после этого показывает > список тагов, но в листе коммитов их (такие таги) не распознает. > > я с этого собственно и начал. > после такой команды создаются refs/tags/release_0.1.10 которые по > show-ref имеют _тот_ же commit-id. я полагаю что чтобы в вебгуе это > распознавалось как таги, надо чтобы это был не тот же, а предыдущий. На предыдущий - это просто: for tag in $(git branch -r | grep tags/);do if git diff $tag $tag'^';then git tag $(basename $tag) $tag'^' else echo "Warning: $tag differs from $tag'^', taggin $tag." git tag $(basename $tag) $tag fi done Вот только так ты потеряешь коммит-обжекты соответствующие тэгам, а в них могут содержаться комментарии. Хотя как раз комментарии можно вытащить и засунуть внутрь tag object, если делать тэги не простыми рефами, а annotated тэгами. Что-то вроде for tag in $(git branch -r | grep tags/);do if git diff $tag $tag'^';then git tag -a -m \ "$(git show remotes/tags/tag1|grep -v '^commit' | grep -v \ '^\s*git-svn-id:')" $(basename $tag) $tag'^' else echo "Warning: $tag differs from $tag'^', taggin $tag." git tag $(basename $tag) $tag fi done -- Best regards, Alexander GQ Gerasiov Contacts: e-mail: gq@cs.msu.su Jabber: gq@jabber.ru Homepage: http://gq.net.ru ICQ: 7272757 PGP fingerprint: 04B5 9D90 DF7C C2AB CD49 BAEA CA87 E9E8 2AAC 33F1
Attachment:
signature.asc
Description: PGP signature