Как соединить git с ClearCase? - PullRequest
41 голосов
/ 26 февраля 2010

Я недавно использовал git svn и мне это очень понравилось. Сейчас я начинаю новый проект у другого клиента. На этом сайте SCM по выбору - ClearCase. Я не нашел запеченный эквивалент git svn для ClearCase. Есть ли кто-нибудь, кто пытался использовать git локально в качестве внешнего интерфейса для ClearCase, используя какие-то приемы, конфигурацию или сценарии с какой-либо степенью успеха? Если да, то можете ли вы объяснить используемый метод?

Ответы [ 3 ]

37 голосов
/ 27 февраля 2010

Вот метод, позволяющий избежать взломов, который наша команда использовала этот метод довольно успешно в течение более года, пока мы не удалили ClearCase для Subversion (согласно политике компании, хотя это является шагом назад для нашей команды - мы в основном просто использовали ClearCase как тупая файловая система, и фактически работает в git, но теперь мы используем мост git-svn, который не так хорош, как нативный git.)

Мы использовали два каталога, один для снимка ClearCase и главного репозитория git, который мы разделили для всей команды и никогда не редактировали файлы, а другой для нашего «рабочего» каталога.

Подготовка в представлении снимка экрана ClearCase:

% git init
% git add **/*.cxx **/*.h **/Makefile (and so on)
% git commit -m "initial"

Затем клонируйте в свой рабочий каталог:

% mkdir ~/work
% git clone /path/to/repo

Работа в рабочем каталоге, на ветке:

% git checkout -b feature
% ...edit/compile...
% git add -u
% git commit

Убедитесь, что снимок ClearCase обновлен до нетронутым (что всегда было для нас, потому что мы поделились им в команде и все использовали git).

Затем объедините ветвь с мастером, перебазировав его, чтобы избежать автоматического слияния:

% git checkout master
% git pull
% git checkout feature
% git rebase master
% git checkout master
% git merge feature
% git branch -d feature

% git diff --name-status origin/master

Подготовьте представление ClearCase, проверив / mkelem / rmname все измененные / новые / удаленные файлы, исходя из вывода git diff --name-status. Для этого мы использовали скрученный вручную скрипт. Не забудьте проверить каталоги, в которых были добавлены / удалены файлы:

Затем отодвиньте git и вернитесь с помощью ClearCase:

% git push
% cd /path/to/repo
% git reset --hard
% cleartool ci `cleartool lsco -r -short -me`

Вроде бы много команд, но это включает в себя настройку, и ваш ежедневный рабочий процесс не использует много команд. Вы можете тривиально создать сценарий на шаге push-back-to-ClearCase и постепенно обнаруживать / показывать своей команде все классные дополнительные элементы git по мере того, как все привыкнут к основному рабочему процессу.

Настоящая прелесть этой системы в том, что через некоторое время, когда все будут компетентны с git, вы можете тривиально отказаться от ClearCase и от всех связанных с ней индивидуальных работ и сборов обезьян. Может быть, дать парню компании ClearCase столь необходимый отпуск и некоторую переподготовку с экономией. (К сожалению, в моей компании все эти мерзавцы были скунс-рунами, и мы перешли на Subversion - вперед из ClearCase, но назад из git!)

I настоятельно рекомендуется использовать сценарий pristine из ClearCase Global, Git Locally , который выполняется в представлении снимка экрана ClearCase и обеспечивает синхронизацию между ним и git. Мы настроили это как работу cron, которая выполнялась два раза в день, а также запускали ее вручную, когда мы собирались вернуться к git. К сожалению, ссылка на сообщение в блоге больше не действительна. Однако скрипт все еще доступен на Github .

12 голосов
/ 19 марта 2010

Хотя это может быть и без нескольких бородавок (вы были предупреждены), я чувствую, что должен упомянуть, что написал своего рода мост.

http://github.com/charleso/git-cc

Соединение двух систем нелегко, и я бы хотел, чтобы мое решение было в два раза меньше, чем git-svn. Большим ограничением является то, что вы действительно ограничены отражением одного потока; git-cc не может клонировать все ваши ветви Clearcase (как бы хорошо это ни было). Тем не менее, учитывая, что большинство альтернативных сценариев разрешаются в одном представлении Clearcase, вы ничем не хуже (IMO).

Лично я нахожу историю довольно важной, и чего не хватает другим решениям, так это их импортированию истории в Git. Возможность время от времени запускать git-blame для файлов и видеть их настоящих авторов весьма полезна.

Если больше ничего git-cc не может обработать вышеупомянутый шаг 'git log --name-status' в решении Мэтта выше.

Мне, конечно, любопытно услышать, что VonC и Мэтт (и другие) думают об этом, поскольку я согласен, что любой мост в Clearcase сопряжен с трудностями и может быть больше проблем, чем стоит.

5 голосов
/ 26 февраля 2010

Один процесс, которым я обычно следую, это:

  • снимок компакт-диска в ClearCase view/vobs/myComponent
  • git init.

Это позволяет мне рассматривать компонент ClearCase как репозиторий Git.
После этого я могу выполнить все необходимые ветвления и «частные» коммиты в этом репо, делая файл доступным для записи по мере необходимости (возможно в виде снимка).

Как только у меня будет стабильный финальный коммит, я обновляю свое представление снимка, в котором перечислены все «угнанные» файлы: я извлекаю их и возвращаю обратно в ClearCase.

Учитывая ограничения Git , компонент репо на ClearCase (UCM) является правильным размером для репозитория Git.
См. Также Какие базовые концепции ClearCase должен знать каждый разработчик? для сравнения между ClearCase и Git.

Идея остается:

  • без мерзавца
  • нет необходимости импортировать все историю ClearCase (которая не имеет представления о базовой линии хранилища, в отличие от версий SVN)
  • создание репозитория Git в представлении ClearCase для промежуточных коммитов
  • окончательная фиксация Git, отраженная в представлении ClearCase, путем проверки всех измененных файлов.
...