Мы используем систему, аналогичную CWT: общий код, как правило, является самостоятельным проектом и как таковой существует отдельно в хранилище (или отдельном хранилище). В рамках проекта, который использует внешние проекты (проект upstream ), мы включаем скомпилированные / упакованные двоичные файлы для проекта shared / downstream.
Таким образом, исходный проект не будет отстрелен неожиданными изменениями в последующих проектах.
Мы написали несколько сценариев для автоматического обновления основных исходных проектов новыми версиями этих двоичных файлов, когда это необходимо (в противном случае это ручной процесс копирования пакета в соответствующие проекты, но это не так уж и сложно).
Недостаток, который мы до сих пор видели в этом методе madnes ^ W, заключается в том, что нижестоящие проекты, проходящие очень активное развитие (скажем, на ранних стадиях новой библиотеки), требуют того, что может показаться чрезмерным количество обновлений для вышестоящего проекта. Тестирование вышестоящего проекта может потребовать обновления разделяемой библиотеки, компиляции, копирования этого двоичного восходящего потока и компиляции / развертывания / любого другого вышестоящего проекта. Тем не менее, как только начальное безумие разработки библиотеки замедляется и библиотека становится несколько стабильной, эта «проблема» испаряется.
Как и в случае с CWT, вышестоящий проект не может каким-либо образом изменить общий код. Изменения в нисходящем направлении должны быть сделаны в рамках этого проекта явным образом и распространяться в нисходящем направлении, где это необходимо.