[devel] Import cvs to git

Sergey Vlasov =?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Ср Янв 24 20:00:43 MSK 2007


On Wed, Jan 24, 2007 at 04:47:17PM +0300, Vitaly Ostanin wrote:
> Скажите, пожалуйста, какой способ импортирования cvs в git сейчас
> даёт наилучшие результаты?

Из-за неустранимых недостатков cvs (прежде всего неатомарности
коммитов) идеальных результатов не даёт ни один метод - за всеми нужно
проверять.  Особенно плохо, если пользователи cvs любят коммитить
файлы с сообщением "empty log message" - в этом случае соседние
коммиты то и дело путаются друг с другом.

Обычно результат parsecvs или cvs2svn -> git-svn ближе к правильному,
чем результат git-cvsimport; с другой стороны, только git-cvsimport
позволяет отслеживать в git последующие изменения, вносимые в cvs.
Впрочем, и за parsecvs, и за cvs2svn во многих случаях приходится
проводить подчистку с помощью cg-admin-uncommit (удалять ничего не
изменяющие коммиты и прочий мусор, порождаемый cvs2svn).

> Например, чтобы импортировать cvs docs, к которому у меня нет
> прямого доступа.

Думаю, что в данном случае проблем с получением такого доступа при
необходимости не возникнет.  Кстати, это имеет смысл сделать даже в
том случае, если в дальнейшем предполагается отслеживать изменения в
cvs через git-cvsimport - хотя git-cvsimport и может обращаться к
удалённому cvs-репозиторию через pserver или ssh, при этом очень
активно потребляется трафик, поскольку git-cvsimport не умеет
запрашивать от сервера патчи (что делает обычный cvs update) - каждая
версия каждого файла будет передана полностью; да и скорость работы в
таком режиме оставляет желать лучшего.  Кстати, этим долгое время
страдал и git-svn - только в последних версиях в git-1.5.0-rcX
реализовали получение с сервера дельт от предыдущих версий файлов.

> Я правильно понимаю, что для перевода пакета на gear с
> сохранением истории проекта нужно создавать 2 бранча? Один для
> проекта и один для пакета?

Да - в одном бранче отслеживаются изменения в оригинальных исходниках
(импортом либо тарболов, либо VCS апстрима), в другом к этим
исходникам добавляются spec-файл, .gear-rules и прочие изменения,
вносимые в пакете.  Конечно, можно завести любое количество
дополнительных бранчей, содержащих отдельные по смыслу изменения (в
этом случае обычно лучше порождать их от оригинальных исходников, а не
от какой-то версии пакета - так проще получить из этого патчи для
отправки в апстрим).

> В примере с mutt в git импортирована только последняя версия
> исходников. Как импортировать всю историю исходников, или их
> предыдущие версии?

Последовательно закоммитить нужные версии в бранч upstream - для
каждой версии удалить старые файлы (git-rm .; в git-1.5.0 нужно ещё
добавить опцию -r), распаковать очередной архив и переименовать
каталог, добавить файлы (git-add .), закоммитить с faketime, создать
тег с указанием версии.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: Digital signature
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20070124/2330e77a/attachment-0001.bin>


Подробная информация о списке рассылки Devel