Подтвердить что ты не робот

Как соединить git с ClearCase?

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

4b9b3361

Ответ 1

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

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

Подготовка в виде снимка 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. Для этого мы использовали ручную script. Не забудьте проверить любые каталоги, в которые были добавлены/удалены файлы:

Затем отпустите файл git и выполните регистрацию с помощью ClearCase:

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

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

Обычно я выполняю следующий процесс:

  • моментальный снимок cd в ClearCase view/vobs/myComponent
  • git init.

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

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

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

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

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