Задача такая: надо сделать так, чтоб изменения в общем для обоих проектов функционале отслеживались в обоих проектах, а изменения уникального функционала - только в своём проекте. Проще говоря, когда я дописываю или исправляю что-то в наших надстройках на Битрикс, эти изменения должны отслеживаться в отдельном репозитории и распространяться по всем прочим проектам, эти надстройки использующим.
У меня было несколько идей по поводу того, как это можно реализовать. Самая клёвая, на мой взгляд, идея - это использование хардлинков (напомню - хардлинки это два разных имени одного и того же файла. Как два указателя на одно и то же место на жёстком диске). Я клонирую себе два репозитория - репозиторий проекта и репозиторий утилит, и на все утилиты делаю хардлинки из рабочей папки проекта. Таким образом, любые изменения утилит из рабочей папки проекта (кроме удаления) отразятся и на рабочей папке с утилитами. Создание всех хардлинков в нужных местах можно даже автоматизировать, повесив вызов соответствущих скриптов на хуки. Но у этой идеи есть большой недостаток - она некроссплатформенна: не во всех операционных системах есть хардлинки :(
О, только что я сообразил - можно написать скрипты, эмулирующие хардлинки. Например, на хук precommit повесить скрипт, который будет некоторые файлы - те, которые должны быть одинаковыми в нескольких проектах - копировать в другую папку, откуда их уже можно закоммитить в отдельный репозиторий.
Были и другие идеи - параллельное использование разных систем контроля версий для этих файлов. Например, в меркуриале хранится весь проект, и в этой же папке рабочая копия системы контроля версий git, который игнорирует все файлы, кроме нужных (разумеется, hg и git должны тоже игнорировать присутствие друг друга) - но это вообще пипец.
Ну или копипастить туда-сюда всё вручную тоже можно...
Наверняка полно народу с подобной задачей уже сталкивалось, а я, аки первопроходец, вместо того, чтоб пользоваться гуглом, наступаю на те же грабли :)
Оригинал записи http://axshavan.blogspot.com/2011/01/blog-post_02.html