[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: git-svn



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


Reply to: