Я самостоятельно разработал «Коллекцию настольных онлайн-игр», которая представляет собой веб-страницу, которая позволяет вам легко играть в онлайн-игры «Арендодатели», «Нарды», «Сянци» и другие игры с друзьями. Эти игры представляют собой разные интерфейсные проекты, и у этих проектов много общих зависимостей. Как мне с этим справиться?
Решение, которое я использую, Git Submodules играет очень важную роль. Позвольте мне представить вам сегодня Git Submodules,кназад Я дам вам более подробную информациюизпредставлятькак Управляйте различными проектамиизобщественная зависимость。
В этой статье будут объясняться только часто используемые команды, основываясь на моем обширном практическом опыте работы с подмодулями (включая работу и личное развитие). Как только вы поймете эти команды, вы сможете использовать подмодули Git, как это делаю я.
Есть две концепции: основной проект и подмодуль. Оба являются полными репозиториями Git.
git submodule add ...(Биз-адрес склада, то есть git Эта цепочка вещей при клонировании)
,Склад Б можно рассматривать как склад А из субмодуля.,На этом этапе А становится основным проектом. [Примечание: B также может выполнять основной проект Aиз.,проходитьсуществоватьскладBосуществлятьgit подмодуль добавить...(адрес)
Вот и все,Потому что оба являются полными репозиториями Git.,существовать Установить отца и сынасвязьвперед,Нет никакой разницы из. 】На что следует обратить внимание
git submodule add ...(адрес склада) src/B(вы хотите submodule Расположен по пути к папке издокумента)
Отношения сохраняются в репозитории Git основного проекта.
Репозиторий Git, который рассматривается как подмодуль, на самом деле не знает, что он стал подмодулем, и не знает, кто его отец. (Это означает, что когда вы открываете домашнюю страницу репозитория Git, который рассматривается как подмодуль, или когда вы извлекаете репозиторий, нет никаких следов того, что это подмодуль. Поскольку здесь не существует информации об отце-потомке, есть только на месте отца.)
Информация об отношениях родитель-потомок хранится в основном проекте. .gitmodules
Файл, если он не добавлен заново submodule,Этот файл обычно не нужно изменять, поскольку информация относительно фиксирована.
Основной проект также сохраняет соответствующие номер версии субмодуля(commit id),Нет избыточного хранилища submodule изкод。
Как видите, на самом деле это ссылка на другой склад с указанием конкретного идентификатора коммита.
Этот номер версии необходимо часто менять.
Как упоминалось ранее, хранилище подмодулей также является обычным хранилищем Git. Он не знает, сколько у него «отцов».
я Мы можемкпрямойgit clone xxx
этотсклад,как обычный Git Так же, как и при отправке обновления в репозиторий, перейдите и обновите его.
Напримеросновной проектсуществоватьдокументпапкаA
,Aв Включать:
.git
документпапкаREADMD.md
основной проектизReadMeдокумент。B
документпапка,да субмодуль.я Мы можемк ВходитьB-документ клипcd B
,Вы найдете B существование,Также возможнокосуществлятьgit status
Ожидание заказов,в это времяизgit
Может командоватьдапротивскладBиз,Вы можете переключать ветки и отправлять обновления здесь.,В это время,Отправьте изменения в издудасубмодульиз.
Это более рекомендуемый способ. Потому что во многих случаях подмодуль зависит от основного репозитория проекта. Возможно, это библиотека компонентов без работающей среды, и ее необходимо отладить в основном проекте. Это очень удобно!
На что следует обратить внимание
Когда вы сделаете коммитназад существования в папке документа B, в папке документа B появится новый документ. commit идентификатор. На этот раз то, что записано в основном проекте А submodule совершить Идентификатор также будет обновлен. так,тыcd ..
вернуться вдокументпапкаAназад,Вы обнаружите, что А изменилось,Изменить контентда:старыйcommid идентификатор изменен на новую технологию id。
поддаgit diff
:
git pull
В подмодуле все операции git обрабатываются как обычное хранилище Git. Вы можете переключать ветки, отправлять код, получать обновления и т. д.
Этим методом вы можете вытащить submodule изmasterПоследний код.Но да Если на этот раз совершить Идентификатор тот же, что и записанный в основном проекте. submodule из commit id Если он несовместим, вы увидите разницу в основном репозитории проекта, и вам, возможно, придется отправить обновление в основной проект.
git submodule update --remote [относительный путь к папке подмодуля]
Этот метод автоматически извлекает основную ветку подмодуля (обычно называемую главной или основной) и последнюю версию. Эффект соответствует первому методу.
еслиты Безпараметр[относительный путь к папке подмодуля]
,Все подмодули будут обновлены.
На что следует обратить внимание,возобновлятьназад Нужно отправитьосновной проектизменять。
Когда мы обновляем подпроект назад,Это эквивалентно обновлению основной записи проекта из подмодуля из идентификатора фиксации.,Необходимо внести изменения в основной проект.
git submodule update [относительный путь к папке подмодуля]
Обратите внимание, что этот метод сделает submodule Ветвь указана в основном проекте commit идентификатор. Может быть, это не так submodule из master Последний код.
так,Этот метод работает только для,глава семьискладзаписыватьиз submodule из commit id Уже дал последнее из (возможно, было представлено другими коллегами). или ты ожидаешь submodule Этот метод также можно использовать, если он соответствует основной складской записи.
git clone основного репозитория проекта
并Входитьосновной проектдокументпапка,В это времяsubmoduleиздокументпапка Вседанулевойиз。git submodule init [папка подмодуля из документа по относительному пути]
。Обновление подмодуля git [папка подмодуля из документа по относительному пути]
。Это клонирует подмодуль по требованию. Когда это полезно? При совместной работе нескольких команд над крупным проектом,Некоторые другие команды из подмодуля нам устанавливать не нужно,Незачемосуществлятьinit
иupdate
Понятно。
Объединить шаги 2 и 3
Шаги 2 и 3 можно объединить. Используйте следующую команду:
git submodule update --init [подмодульизпапкидокументовотносительный путь]
Обратите внимание на порядок,--init
и[подмодульизпапкидокументовотносительный путь]
из Местоположение недоступнок Поменяй это。
git clone основного репозитория проекта
,В это времяsubmoduleиздокументпапка Вседанулевойиз。git submodule init
。git submodule update
。Пока вы не пишете подмодуль,Затем проверьте сразу все подмодули основного проекта.,Потяните их всех вниз.
Объединить шаги 2 и 3
git submodule update --init
Объедините шаги 1, 2 и 3.
git clone --recurse-submodules [Адрес склада Git основного проекта]
перейдите в основной проект и выполните:
git submodule add ...(Другой адрес склада, а именно git Эта цепочка вещей при клонировании)
Ниже вы можете указать, в какую подпапку должен быть помещен подмодуль.
git submodule add ...(другой адрес склада) [(необязательно, путь загрузки подмодуля)]
Через официальную документацию,Вы можете увидеть больше сцен,Но дая никогда не использовал другие сцены,Потому что он не используется. Описание в этой статье полностью соответствует всем моим сценариям ежедневного использования.
Сложные сценарии могут затруднить совместную работу, поскольку не все разработчики понимают эти более сложные команды и конфигурации:
--recurse-submodules
или--recursive
параметр)。git config -f .gitmodules подмодуль. Папка подмодуля относительно каталога.ветвь. Название ветки подмодуля
,так что каждый разосуществлятьgit submodule update --remote
час,Отслеживайте любую указанную ветвь подмодуля (не главную ветку по умолчанию).foreach
Заказ Можеткудобныйиз Приведите все подмодули по порядкуосуществлять Такой жеиз Заказ。Если вы хотите узнать больше, вы можете прочитать официальную документацию подмодулей Git и выполнить поиск по ключевым словам, связанным с командами:
Я да Халл Цинь,Официальный аккаунтОфлайн-игры для вечеринокизавтор(добро пожаловатьсосредоточиться най,завести друга). Перед пересылкой этой статьи необходимо разрешение автора HullQin. Я самостоятельно разработал «Коллекцию настольных онлайн-игр».,да веб-страницы,Очень удобно играть в такие игры, как «Помещики» и «Нарды» онлайн с друзьями.,Никаких комиссий, никакой рекламы。также разработал Понятно《Dice Crush》УчаствоватьGame Jam 2022。喜欢Можетксосредоточиться найой~яиметьнулевой Понятновстреча Делитесь и играйте в игрыиз Связанные технологии,встречасуществовать Поделиться в этой колонке:《Научите вас играть в маленькие игры》。