Во время работы в ЛК мне казалось, что Perforce это одно из воплощений Песца на земле. Ну что сказать, я сильно ошибался, и теперь, видимо в наказание за мои заблуждения, мне приходится работать с Clear Case. Причем, типичная тут схема работы это основная машина на Венде, на которой разработчик все пишет и сборочная машина на Linux. Доступ к исходникам осуществляется посредством шареных сетевых папок. В целом схема рабочая, но, во-первых, сборка идет довольно медленно, во-вторых, сборку приходится периодически перезапускать из-за сетевых ошибок, таких как broken pipe, input/output error.
Вдоволь намучившись с подобной работой я решил что так дальше жить нельзя и надо что-то делать. Самым лучшим вариантом, пришедшим мне в голову, оказалось использование Git для собственного контроля версий в процессе разработки.
Итак, для начала надо выгрузить проект из CC на винт и немного его модифицировать. Все дело в том, что в отличие от CC, Git не позволяет создавать пустых папок и это ограничение надо обойти. Для этого, на Windows машине выполняем следующую команду:
После уже можно инициализировать Git репозиторий и добавить в него файлы.
cat << .git/info/exclude
view.dat
lost+found/
git add .
git commit -m init
[Update] Изначально, в качестве следующего шага у меня было создание bare-репозитория, но, как показала практика, на больших репозиториях (у меня репозиторий выходит около 3 Гб) все очень сильно тормозит. Поэтому, для начала необходимо оптимизировать получившийся репозиторий и только потом создавать bare-репозиторий.
И вот теперь пришло время создать bare-репозиторий.
С последующим добавлением его в качестве удаленного репозитория к СС репозиторию.
Для того, что бы свежедобавленный удаленный репозиторий использовался по-умолчанию, необходимо поправить информацию в .git/config:
remote = origin
merge = refs/heads/master
После чего можно клонировать bare репозиторий на рабочую Linux машину:
И работать с ним как с обычным Git репозиторием.
Добрый день, а пробовали потом вливать свои изменения из git обратно в CC?
Да, само собой. Сейчас активно этой схемой пользуюсь. Из минусов: изменения в CC помечаются как hijacked и конфликты приходится в ручную разрешать, но ничего лучшего я пока не придумал.
Используете какие-то скрипты или вручную переносите код? Такая же проблема, и меня пугают, что это ой как не тривиально.
P.S. Это решение не пробовали: https://github.com/charleso/git-cc?
По факту я ничего не переношу, так как мой CC репозиторий и Git репозиторий физически одно и то же. Все что требуется делаю в ручную, все же я только один эту схему использую и работы не так уж и много выходит.