Я хочу спросить о Ваших методах для хранения сторонних библиотек актуальными легко.
В моем проекте iPhone я использую довольно много третьего лица, освобождает (как TouchXML, JSON, RegexKit, YAJL, MGTwitterEngine...). Большинство из них хранится в GitHub и их версии, особенно MGTwitterEngine, изменитесь вполне быстро (из-за добавления новой опции, исправив ошибку, изменив в Сервере (как Твиттер) формат ответа...).
Иногда, я забываю обновлять (также не хотят изменять стабильную версию), затем, мой проект получает ошибки из-за устаревших библиотек.
Когда я получил ошибку потому что старые библиотеки. Я часто перехожу к GitHub, загружаю новую версию, затем должен изменить много кода. Поскольку загрузка новой версии означает, что я делаю ускоренную перемотку вперед от очень старой версии до последней версии. Я думаю, что Это будет менее болезненный, если я буду обновлять библиотеку более часто.
Каков Ваш подход для этой задачи?
Вы заглядывали в git submodules?
Я использую их для этой задачи. У нас есть репозиторий вспомогательных классов. Однако всякий раз, когда мы вносим дополнения и улучшения, мы хотим, чтобы эти улучшения каскадировались во все наши проекты - поэтому мы устанавливаем этот репозиторий вспомогательных классов как подмодуль в каждом репозитории проекта.
Попробуйте выполнить следующую команду из корневого каталога вашего репозитория:
git submodule add ssh://url/to/external/library.git local/path
Это должно сделать следующие шаги (взятые дословно из URL выше):
- Клонирует подмодуль в текущий каталог и по умолчанию проверяет главную ветвь.
- Добавляет путь клона подмодуля в файл
.gitmodules
и добавляет этот файл в индекс, готовый к фиксации.- Добавляет ID текущего коммита подмодуля в индекс, готовый к фиксации.
Затем вы можете использовать команду
git submodule update
для поддержания актуальности.
Также, в качестве побочного примечания, если вы делаете то же, что и я (например, вносите прямые изменения в репозиторий подмодуля), вам нужно перейти в каталог корневого репозитория подмодуля и зафиксировать эти изменения ПЕРВЫМИ перед фиксацией суперпроекта. Это связано с тем, что git отслеживает версии подмодулей (интеллектуально), поэтому если вы сначала зафиксируете суперпроект, вы будете хранить ссылку на изменения, которые не были зафиксированы в репозитории подмодулей. Любой, кто попытается клонировать ваш суперпроект, получит ошибку.