Использование git лично и SCCS для всего проекта - PullRequest
4 голосов
/ 20 июня 2011

Я работаю в компании, которая использует SCCS для разработки своего основного приложения. В настоящее время у нас есть два потока разработки, которые называются стабильными и экспериментальными. В стабильную версию в настоящее время вносятся изменения, которые в основном являются исправлениями ошибок, а также могут устранять проблемы в Experimental. Experimental добавляет довольно большую новую функцию.

Основная проблема, с которой я сталкиваюсь, заключается в том, что разработчики, работающие над стабильной версией, также не вносят свои изменения в Experimental. Поскольку я работаю над Experimental, мне нужно объединить обе ветви.

Я сам использую Git около года, и он отлично работал с одной веткой (стабильной), так как я могу просто:

git checkout master
<copy all Stable files over, which will add changes>
git commit -a -m "Updated files 06/19/2011"
git checkout New_Feature
git rebase master

Это обновляет все мои файлы с изменениями из стабильной. Однако теперь, когда они используют две ветви разработки, я получаю много конфликтов слияния. Это связано с тем, что SCCS помещает метаданные в верхнюю часть исходных файлов, например:

#pragma ident "@(#)file1.c   1.233 06/17/11 Company_Experimental"

Обратите внимание на номер версии (1.233), дату и ключевые слова компании / филиала. Дата и номер версии меняются при каждой регистрации, а ветка меняется между обновлениями в Стабильном и Экспериментальном. Мне все равно, что находится наверху, так как, когда я проверяю файлы, он сбрасывает верх и получает новые значения в зависимости от того, когда и где я его проверяю.

С учетом всего сказанного эта строка всегда будет наверху. Есть ли способ игнорировать верхнюю строку или каким-то образом сделать этот рабочий процесс немного более управляемым, чтобы я мог объединять потоки разработки со своей собственной работой и не проходить через множество бессмысленных конфликтов слияния?

Примечание: я уже проводил кампанию по изменению систем контроля версий, но у нас есть много старых программистов, которые не собираются менять свои пути. Пожалуйста, не отвечайте: «Ваша компания должна перейти на X». Поверь мне, я с тобой на все 100%.

Ответы [ 3 ]

2 голосов
/ 20 июня 2011

Если вы можете просто удалить содержимое строк идентификаторов прагмы в вашем git-репо (что вы, вероятно, можете сделать, поскольку SCCS добавит их для вас), вы можете просто добавить:

* filter=skip-ident

в .git / info / attribute (или в $ GIT_DIR / info / attribute) или .gitattributes (если вы хотите отслеживать сам файл атрибутов с помощью git) и добавьте что-то вроде:

[filter "skip-ident"]
        clean = "sed '/\(#pragma ident\).*/s//\1/'"

в .git / config. Всякий раз, когда какой-либо файл (файлы, соответствующие шаблону в первом столбце .git / info / attribute, в данном случае '*') добавляется в git, содержимое будет запускаться через чистый сценарий, который в этом случае просто удаляет все информация о личности.

1 голос
/ 20 июня 2011

Вы можете использовать пользовательский сценарий очистки пятна. Больше можно найти в главе атрибутов в книге ProGit . Также вы можете написать драйвер слияния.

Что говорит первая строка каждого файла, когда вы закончите слияние? Я ничего не предполагаю, и вы полагаетесь на то, что SCCS сделает это за вас. Это должно облегчить очистку сценария.

0 голосов
/ 12 октября 2012

Линия

#pragma ident "@(#)file1.c   1.233 06/17/11 Company_Experimental"

хранится в SCCS с такими ключевыми словами, как:

#pragma ident "%A%%M%   %I% %D% Company_Experimental"

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

Когда вы делаете коммит с использованием git, замените фиксированную строку #pragma токенами, которые ожидает sccs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...