В прошлом я делал следующее:
Импортировать репозиторий CVS
С использованием:
$ git cvsimport -C target-cvs -r cvs -k -vA authors-file.txt -d $CVSROOT module
Где:
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.
person
gpoo
schedule
15.07.2012
git-cvsexportcommit, чтобы разместить вашу работу в репозитории CVS. Хотя он и не такой классный, какgit-svn, он все же гораздо более полезен, чем простой CVS. - person Benjamin Bannier   schedule 11.07.2012