2010-02-26 3 views
40

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

+0

ИМХО, используя мост, ухудшает ситуацию. ClearCase может служить немой файловой системой, в которой вы можете использовать полный, собственный git сверху - см. Мой ответ ниже для подробной информации о методе, который мы использовали. –

ответ

35

Вот метод, который позволяет избежать угоняет, что наша команда использовала этот метод довольно успешно в течение года, пока мы не выбыть ClearCase для подрывной деятельности (в соответствии с политикой компании, хотя это шаг назад для нашей команды - мы были в основном просто используя ClearCase как тупую файловую систему и практически действуя изначально в git, но теперь мы используем мост git-svn, который не так хорош, как родной 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 обновлен с pristine (который он всегда вал для нас, потому что мы разделили его среди команды, и все мы использовали 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, но в обратном направлении от мерзавца)

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

+1

Еще одно преимущество этой системы - некоторые члены команды все еще могут использовать ClearCase, если захотят. Это немного страннее, пока это происходит, так как пользователям git нужно будет синхронизировать ситуацию, когда пользователь не выполняет git. В конце концов, выдержки будут видеть преимущества, которые есть у git-пользователей, и эта проблема исчезнет ! –

+1

Кроме того, наш скрипт push-back-to-ClearCase генерировал комментарий для ClearCase из журнала git изменений с момента создания/master, который он использовал с «cleartool co -c» и т. Д., Поэтому наша чистка cleartool не нужна комментарий вообще! –

+3

Интересная техника, +1. Как «парень ClearCase» в моем магазине, я мог бы использовать праздничные дни;) Но я тоже парень SVN. И Гит Гай. И немного Perforce и CM Synergy парень ... Тогда никаких каникул для меня. – VonC

4

Тот процесс, который я обычно следуют за это:

  • снимок кд в ClearCase view/vobs/myComponent
  • мерзавца инициализации.

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

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

Принимая во внимание Git limits, компонент repo per ClearCase (UCM) является правильным размером для репликации Git.
См. Также What are the basic clearcase concepts every developer should know? для сравнения ClearCase и Git.

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

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

Работает ли этот подход с переименованными файлами? – neves

+0

@neves: не напрямую, потому что вам нужен скрипт для запроса git repo, с просьбой о любых переименованных файлах (Git сможет обнаруживать переименованные файлы), проверять исходный каталог в ClearCase, проверять каталог назначения (если он отличается от исходный каталог), выполните команду 'cleartool move src/file dst/renamedFile', checkin' src' и 'dst'. – VonC

12

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

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

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

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

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

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

+1

Я загляну в. +1 для даже попыток;) – VonC

+0

Я второй это. ;) –

+0

Я третье! +1 к разработке git-cc :) –