Как соединить мерзавца мостом к ClearCase?

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

41
задан Bas Bossink 26 February 2010 в 14:08
поделиться

3 ответа

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

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

Затем верните содержимое 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 столь необходимый отпуск и немного переобучиться на сэкономленные средства. (К сожалению, в моей компании вся эта штука с git была скунсом, и мы перешли на Subversion - вперед от ClearCase, но обратно от git!)

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

37
ответ дан 27 November 2019 в 00:49
поделиться

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

  • snapshot cd внутри ClearCase view/vobs/myComponent
  • git init .

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

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

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

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

  • нет git-cc
  • нет необходимости импортировать всю историю ClearCase (у которого нет понятия базовой линии репозитория, в отличие от SVN-ревизий)
  • создание Git-репо внутри представления ClearCase для промежуточных коммитов
  • финальный Git-коммит зеркально отражается в представлении ClearCase через проверку всех измененных файлов.
5
ответ дан 27 November 2019 в 00:49
поделиться

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

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

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

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

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

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

13
ответ дан 27 November 2019 в 00:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: