2011-02-10 4 views
9

Я пытаюсь найти подходящий способ клонировать библиотеку сторонних разработчиков (activ.iphone от Janrain) в структуру каталогов моего приложения таким образом, чтобы позволить мне вытащить последние изменения и объединить их с любыми изменениями, которые я сделать локально. Я также хочу, чтобы сторонняя библиотека (объединенная с моими изменениями) включалась в репозиторий git для моего собственного приложения, когда я его нажимаю.Git: Как клонировать стороннюю библиотеку в подкаталог репозитория моего приложения?

структура будет что-то вроде этого:

myApp/ <- this is my app, which is its own git repo 
    external/ 
     engage.iphone/ <- this is the 3rd party library I want to keep up-to-date 
    mySource1.h 
    mySource2.m 
    ... 

Как я могу настроить его таким образом безопасно? Есть ли какой-либо специальный процесс для слияния позже в будущем, после его создания?

ответ

9

Подмодули - это самый простой способ добиться этого.

Существует два распространенных способа работы с подмодулями - добавление новых и инициализация существующих.

Добавление новых подмодули

Из корня вашего локального запуска хранилища:

git submodule add <repository> external/engage.iphone.

Команда add предназначена для первоначального добавления подмодуля в репозиторий, в отличие от того, когда вы клонировали репозиторий с существующими подмодулями). Он добавляет другой репозиторий, который может находиться на локальном или удаленном пути (помните, что другим разработчикам нужен доступ к этому, если вы публикуете свой репозиторий!) В файле .gitmodules в корне репозитория, а затем клонирует репозиторий в указанное вами местоположение; external/engage.iphone в приведенном выше примере. На этом этапе у вас есть файлы субрепозитория в вашей системе, и он указан как подмодуль в файле .gitmodules, в конфигурации локальных репозиториев.

Однако вы можете не добавлять Подмодулям себя ...

Инициирования Существующих Подмодулей

Вещи немного изменить, если вы клонировать репозиторий, который уже имеет Подмодули добавили к нему. В этой ситуации файл .gitmodules будет иметь подмодули, перечисленные в нем, с местоположениями для их извлечения, но ваш локальный конфигуратор репозитория ничего не знает о них, а фактические файлы еще не существуют в вашей системе. Прежде всего, необходимо инициализировать подмодули:

git submodule init

Это будет работать через любые репозитории, перечисленные в ваших .gitmodules и добавить их в свой .git/конфигурацию. Git теперь знает о хранилище, но он на самом деле не клонирован еще, так что бежать:

git submodule update

Вы можете запустить эту команду в любое время для обновления зарегистрированных подмодулей, то есть клона недостающего.

git submodule sync <submodule>

Выполнить это, чтобы обновить все подмодули их дистанционной ГОЛОВУ, если не указано конкретное обязательство, когда ты подмодуль добавить! Задание определенного подмодуля будет только синхронизировать его.

В истинном мерзавца моде команда init можно комбинировать с update сэкономить время:

git submodule update --init.

Конечно, вы всегда можете вручную обновлять свои .gitmodules и .git/config, как только вы изучили макет, который они используют (аналогично ветвям и удаленным разделам в конфигурации).

Все особенности можно найти на странице руководства (kernel.org version).

+0

Спасибо. Я получаю эту ошибку сейчас: «Нет отображения подмодуля, найденного в .gitmodules для пути« заниматься. Iphone/Contrib/json-framework »« ... любые идеи? –

+0

... это происходит, когда я запускаю «git submodule init» –

+0

@SteveN Как вы запустили команду add? И что он вложил в ваши .gitmodules? – ghickman

Смежные вопросы