Clear Case –> Git

Во время работы в ЛК мне казалось, что Perforce это одно из воплощений Песца на земле. Ну что сказать, я сильно ошибался, и теперь, видимо в наказание за мои заблуждения, мне приходится работать с Clear Case. Причем, типичная тут схема работы это основная машина на Венде, на которой разработчик все пишет и сборочная машина на Linux. Доступ к исходникам осуществляется посредством шареных сетевых папок. В целом схема рабочая, но, во-первых, сборка идет довольно медленно, во-вторых, сборку приходится периодически перезапускать из-за сетевых ошибок, таких как broken pipe, input/output error.
Вдоволь намучившись с подобной работой я решил что так дальше жить нельзя и надо что-то делать. Самым лучшим вариантом, пришедшим мне в голову, оказалось использование Git для собственного контроля версий в процессе разработки.

Итак, для начала надо выгрузить проект из CC на винт и немного его модифицировать. Все дело в том, что в отличие от CC, Git не позволяет создавать пустых папок и это ограничение надо обойти. Для этого, на Windows машине выполняем следующую команду:

find . -type d -empty -exec touch {}/.gitignore \;

После уже можно инициализировать Git репозиторий и добавить в него файлы.

git init

cat << .git/info/exclude
view.dat
lost+found/

git add .
git commit -m init

[Update] Изначально, в качестве следующего шага у меня было создание bare-репозитория, но, как показала практика, на больших репозиториях (у меня репозиторий выходит около 3 Гб) все очень сильно тормозит. Поэтому, для начала необходимо оптимизировать получившийся репозиторий и только потом создавать bare-репозиторий.

git gc

И вот теперь пришло время создать bare-репозиторий.

git clone --bare /path/to/cc_repo /path/to/public_repo.git

С последующим добавлением его в качестве удаленного репозитория к СС репозиторию.

git remote add origin file:///path/to/public_repo.git

Для того, что бы свежедобавленный удаленный репозиторий использовался по-умолчанию, необходимо поправить информацию в .git/config:

[branch "master"]
remote = origin
merge = refs/heads/master

После чего можно клонировать bare репозиторий на рабочую Linux машину:

git clone --verbose file:///path/to/public_repo.git

И работать с ним как с обычным Git репозиторием.

4 Comments Clear Case –> Git

  1. TyVik

    Добрый день, а пробовали потом вливать свои изменения из git обратно в CC?

    Reply
    1. Alexander Stavonin

      Да, само собой. Сейчас активно этой схемой пользуюсь. Из минусов: изменения в CC помечаются как hijacked и конфликты приходится в ручную разрешать, но ничего лучшего я пока не придумал.

      Reply
  2. TyVik

    Используете какие-то скрипты или вручную переносите код? Такая же проблема, и меня пугают, что это ой как не тривиально.
    P.S. Это решение не пробовали: https://github.com/charleso/git-cc?

    Reply
    1. Alexander Stavonin

      По факту я ничего не переношу, так как мой CC репозиторий и Git репозиторий физически одно и то же. Все что требуется делаю в ручную, все же я только один эту схему использую и работы не так уж и много выходит.

      Reply

Leave a Reply to TyVik Cancel reply