Вы должны объяснить, почему git-cvsimport у вас не работает. Также для этого вопроса git-svn совершенно не имеет отношения (или предоставьте ссылку, если есть инструмент svn-git, который имеет дело с CVS). Benjamin Bannier 09.07.2012
@honk, я считаю, что git-cvsimport - это билет в Git только в один конец shytikov 11.07.2012
@AlexeyShytikov, есть еще git-cvsexportcommit, чтобы разместить вашу работу в репозитории CVS. Хотя он и не такой классный, как git-svn, он все же гораздо более полезен, чем простой CVS. Benjamin Bannier 11.07.2012
@ Здравствуйте, вы правы, я упустил этот момент. shytikov 12.07.2012
возможный дубликат Есть ли средство миграции с CVS на Git? < / а> kenorb 19.03.2015
Я действительно не могу понять, почему это нужно закрыть. основанный на мнении? Как копировать исходный репозиторий туда и обратно? Albert van der Horst 23.10.2017
target-cvs - это каталог, в котором будет храниться моя локальная копия репозитория.
cvs - это имя, используемое для ссылки на удаленный репозиторий. Итак, cvs/master, cvs/HEAD и т. Д. Будут указываться локально master.
authors-file.txt - это файл, содержащий совпадения между учетной записью CVS и именем + адрес электронной почты, каждая строка содержит userid=User Name <useremail@hostname>
$CVSROOT - это сервер репозитория CVS. Если я использую анонимное клонирование из какого-нибудь репозитория sourceforge, я бы использовал: :pserver:anonymous@project_name.cvs.sourceforge.net:/cvsroot/project_name
module - это модуль внутри репозитория, который я хочу клонировать. Если в репозитории только один модуль, то скорее всего будет такой же, как project_name.
Обновите репозиторий
Можно повторить команду, которую я написал ранее. В этом конкретном примере он должен запускаться в родительском каталоге target-cvs. Чтобы упростить задачу в будущем, вы можете настроить некоторые переменные (более подробную информацию вы можете прочитать в ответе на "Как экспортировать историю ревизий из mercurial или git в cvs?")
$ git cvsimport
Этого было бы достаточно, чтобы локальный репозиторий в git синхронизировался с удаленным в CVS.
Дневная работа
С этого момента каждое изменение должно происходить в локальной ветке git. Одна функция, одна ветка. Для этого я использую рабочий процесс, описанный в "Успешное ветвление Git модель ". Единственная разница в том, что master указывает на CVS, но концептуально здесь можно применить те же рабочие процессы. Это просто условность.
Как только ваш коммит будет помещен в CVS, он вернется к мастеру в следующем обновлении (git cvsimport). Затем вы можете удалить локальную ветвь, в которой реализована эта функция.
Для незавершенной работы (в локальных ветках) вы должны rebase использовать их против мастера. Поскольку у вас есть отдельные функции, должно быть проще разрешать конфликты. Сложность - это когда одни ветки зависят от других, но все же управляемы. Микро-коммиты очень помогают (как и в любом рабочем процессе git).
Если каждая локальная ветка перебазирована, а мастер никогда не касался (кроме обновлений), то git
cvsexportcommit должно работать. Помните, это работает для одного коммита. Это немного утомительно, но это лучше, чем ничего. В предыдущем примере команда должна выглядеть примерно так:
$ git cvsexportcommit -vc commit-id
Если у вас есть доступ только для чтения к удаленной CVS, вы можете отправить исправления по электронной почте или сделать свой репозиторий git общедоступным, чтобы коммитеры могли получить ваши исправления и применить их. В этом случае ничем не отличается от нормальной работы CVS. Опять же, в следующем обновлении вы увидите изменения в master.
Это создаст два выходных файла в формате git fast-import. Имена этих файлов указываются вашим файлом опций или аргументами командной строки. В примере эти файлы называются cvs2git-tmp/git-blob.dat и cvs2git-tmp/git-dump.dat.
Эти файлы можно импортировать в пустой репозиторий git следующим образом:
cat git-blob.dat git-dump.dat | git fast-import
Затем удалите ветвь TAG.FIXUP и запустите gitk --all, чтобы просмотреть результаты преобразования.
Узнайте больше, запустив: cvs2git --help.
Ответ 3 · рейтинг 2 · shytikov
Я считаю, что в вашем случае готового рецепта не существует. Но вы можете попробовать следующее:
Синхронизируйте данные CVS с Git вручную или напишите для этого сценарии. Они получат информацию из CVS и поместят ее в Git. Это даст вам некую историю в Git. Не полностью чистый, не полностью пригодный для использования, но все же.
Перенесите репозиторий CVS в Git с помощью инструментов, например git cvsimport. И попросите Git притвориться CVS для других разработчиков, используя git cvsserver.