Git: Как клонировать стороннюю библиотеку в подкаталог репозитория моего приложения? - PullRequest
9 голосов
/ 10 февраля 2011

Я пытаюсь найти правильный способ клонировать стороннюю библиотеку (eng.iphone от Janrain) в структуру каталогов моего собственного приложения таким образом, чтобы я мог извлекать последние изменения и объединять их с любыми изменениями, которыеЯ делаю локально.Я также хочу, чтобы сторонняя библиотека (объединенная с моими изменениями) была включена в репозиторий 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
    ...

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

1 Ответ

9 голосов
/ 10 февраля 2011

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

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

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

Из корня локального репозитория запустите:

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

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

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

Инициализация существующих подмодулей

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

git submodule init

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

git submodule update

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

git submodule sync <submodule>

Запустите это, чтобы обновить все подмодули до их удаленного HEAD, если вы не указали конкретную фиксацию, когда вы добавили подмодуль!Указание определенного подмодуля будет синхронизировать только этот.

В режиме реального git команду init можно объединить с update для экономии времени:

git submodule update --init.

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

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

...