Введение в подмодули Git (просто для понимания, краткое изложение команд подмодуля, которые полностью достаточны для работы)
Введение в подмодули Git (просто для понимания, краткое изложение команд подмодуля, которые полностью достаточны для работы)

фон

Я самостоятельно разработал «Коллекцию настольных онлайн-игр», которая представляет собой веб-страницу, которая позволяет вам легко играть в онлайн-игры «Арендодатели», «Нарды», «Сянци» и другие игры с друзьями. Эти игры представляют собой разные интерфейсные проекты, и у этих проектов много общих зависимостей. Как мне с этим справиться?

Решение, которое я использую, Git Submodules играет очень важную роль. Позвольте мне представить вам сегодня Git Submodules,кназад Я дам вам более подробную информациюизпредставлятькак Управляйте различными проектамиизобщественная зависимость。

Почему вам стоит прочитать эту статью?

  • В некоторых технических блогах очень подробно пишут,Но он не подходит для обучения новичкам.
  • Официальная документация очень обширна и подходит для понимания детальных команд, однако приоритеты не ясны.

В этой статье будут объясняться только часто используемые команды, основываясь на моем обширном практическом опыте работы с подмодулями (включая работу и личное развитие). Как только вы поймете эти команды, вы сможете использовать подмодули Git, как это делаю я.

Почему субмодули?

  1. Решение распространенных проблем с кодом。если некоторыедокумент,существующие будут использоваться как в проекте A, так и в проекте B.,Например, библиотека компонентов,Затем этими документами можно управлять как подмодулями.,Уменьшите дублирующийся код. (конечно,пакет npm — другое решение в этом сценарии,Вам нужно выбрать вариант. )
  2. Решение проблем с обслуживанием команды。Если большой проектдабольшой Git Склад должен быть составлен единообразно, а разные модули обслуживаются разными командами. Git На складе много трудностей: например, несколько команд из MR Вперемешку разрешения трудно различить и т. д. В этом случае, даже если интранет компании Git Если разрешения достаточно детализированы, стоимость обучения администратора хранилища будет очень высокой, и глубоко использовать такие расширенные функции будет сложно. Чтобы решить проблему многокомандного обслуживания, Git Submodules Его также можно использовать с большим эффектом. Он позволяет каждой команде отвечать только за один модуль. Git Склады, эти Git Все репозитории содержатся в одном мастере Git под проект. (конечно,Микроинтерфейс, микросервис да Другое решение,Вам нужно выбрать вариант. )

Узнайте о подмодулях Git

Есть две концепции: основной проект и подмодуль. Оба являются полными репозиториями Git.

Как сделать один репозиторий Git подмодулем другого репозитория Git

  1. Создайте репозиторий Git А.
  2. Создайте репозиторий Git B.
  3. существоватьGitскладAсередина,проходитьgit submodule add ...(Биз-адрес склада, то есть git Эта цепочка вещей при клонировании),Склад Б можно рассматривать как склад А из субмодуля.,На этом этапе А становится основным проектом. [Примечание: B также может выполнять основной проект Aиз.,проходитьсуществоватьскладBосуществлятьgit подмодуль добавить...(адрес)Вот и все,Потому что оба являются полными репозиториями Git.,существовать Установить отца и сынасвязьвперед,Нет никакой разницы из. 】

На что следует обратить внимание

  • Выполнить действие назад,Будет создана новая папка документов в текущем родительском проекте.,Имя — это имя склада подмодуля. Содержимое этой папки с документами,да submodule переписываться Git Склад полного кода.
  • Если вы хотите изменить свое имя,Или измените путь (например, поместите его в более глубокий каталог),Также разрешено из,Необходимо добавить параметр пути на поверхность,Напримерgit submodule add ...(адрес склада) src/B(вы хотите submodule Расположен по пути к папке издокумента)

Где существуют отношения родитель-потомок подмодуля?

Отношения сохраняются в репозитории Git основного проекта.

Репозиторий Git, который рассматривается как подмодуль, на самом деле не знает, что он стал подмодулем, и не знает, кто его отец. (Это означает, что когда вы открываете домашнюю страницу репозитория Git, который рассматривается как подмодуль, или когда вы извлекаете репозиторий, нет никаких следов того, что это подмодуль. Поскольку здесь не существует информации об отце-потомке, есть только на месте отца.)

Как сохранить информацию об отношениях родитель-потомок в подмодуле

файлы .gitmodules

Информация об отношениях родитель-потомок хранится в основном проекте. .gitmodules Файл, если он не добавлен заново submodule,Этот файл обычно не нужно изменять, поскольку информация относительно фиксирована.

image.png
image.png

номер версии субмодуля

Основной проект также сохраняет соответствующие номер версии субмодуля(commit id),Нет избыточного хранилища submodule изкод

image.png
image.png

Как видите, на самом деле это ссылка на другой склад с указанием конкретного идентификатора коммита.

Этот номер версии необходимо часто менять.

Общие операции разработки подмодулей

Как отправить обновления в репозиторий подмодуля

Способ 1, обновляемся как обычный склад

Как упоминалось ранее, хранилище подмодулей также является обычным хранилищем 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。

image.png
image.png

поддаgit diff

image.png
image.png

Как получить обновления подмодуля в основном репозитории проекта

Способ первый, компакт-диск submodule назад git pull

В подмодуле все операции git обрабатываются как обычное хранилище Git. Вы можете переключать ветки, отправлять код, получать обновления и т. д.

Этим методом вы можете вытащить submodule изmasterПоследний код.Но да Если на этот раз совершить Идентификатор тот же, что и записанный в основном проекте. submodule из commit id Если он несовместим, вы увидите разницу в основном репозитории проекта, и вам, возможно, придется отправить обновление в основной проект.

Способ второй,основной проектосуществлятьgit submodule update --remote [относительный путь к папке подмодуля]

Этот метод автоматически извлекает основную ветку подмодуля (обычно называемую главной или основной) и последнюю версию. Эффект соответствует первому методу.

еслиты Безпараметр[относительный путь к папке подмодуля],Все подмодули будут обновлены.

На что следует обратить внимание,возобновлятьназад Нужно отправитьосновной проектизменять。

Когда мы обновляем подпроект назад,Это эквивалентно обновлению основной записи проекта из подмодуля из идентификатора фиксации.,Необходимо внести изменения в основной проект.

Способ третий, выполнение основного проекта git submodule update [относительный путь к папке подмодуля]

Обратите внимание, что этот метод сделает submodule Ветвь указана в основном проекте commit идентификатор. Может быть, это не так submodule из master Последний код.

так,Этот метод работает только для,глава семьискладзаписыватьиз submodule из commit id Уже дал последнее из (возможно, было представлено другими коллегами). или ты ожидаешь submodule Этот метод также можно использовать, если он соответствует основной складской записи.

Как клонировать репозиторий, содержащий подмодуль

Способ 1, клонировать подмодуль по требованию

  1. Первыйgit clone основного репозитория проекта并Входитьосновной проектдокументпапка,В это времяsubmoduleиздокументпапка Вседанулевойиз。
  2. осуществлятьgit submodule init [папка подмодуля из документа по относительному пути]
  3. осуществлятьОбновление подмодуля git [папка подмодуля из документа по относительному пути]

Это клонирует подмодуль по требованию. Когда это полезно? При совместной работе нескольких команд над крупным проектом,Некоторые другие команды из подмодуля нам устанавливать не нужно,НезачемосуществлятьinitиupdateПонятно。

Объединить шаги 2 и 3

Шаги 2 и 3 можно объединить. Используйте следующую команду:

Язык кода:shell
копировать
git submodule update --init [подмодульизпапкидокументовотносительный путь]

Обратите внимание на порядок,--initи[подмодульизпапкидокументовотносительный путь]из Местоположение недоступнок Поменяй это。

image.png
image.png

Способ второй, клонировать все подмодули сразу

  1. Первыйgit clone основного репозитория проекта,В это времяsubmoduleиздокументпапка Вседанулевойиз。
  2. осуществлятьgit submodule init
  3. осуществлятьgit submodule update

Пока вы не пишете подмодуль,Затем проверьте сразу все подмодули основного проекта.,Потяните их всех вниз.

image.png
image.png

Объединить шаги 2 и 3

Язык кода:shell
копировать
git submodule update --init

Объедините шаги 1, 2 и 3.

Язык кода:txt
копировать
git clone --recurse-submodules [Адрес склада Git основного проекта]
image.png
image.png

Как создать связь подмодуля

перейдите в основной проект и выполните:

Язык кода:shell
копировать
git submodule add ...(Другой адрес склада, а именно git Эта цепочка вещей при клонировании)

Ниже вы можете указать, в какую подпапку должен быть помещен подмодуль.

Язык кода:shell
копировать
git submodule add ...(другой адрес склада) [(необязательно, путь загрузки подмодуля)]

Дополнительная информация

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

Сложные сценарии могут затруднить совместную работу, поскольку не все разработчики понимают эти более сложные команды и конфигурации:

  • Как быстро вытащить вложенный подмодуль? (Только да имеет родительский проект и сын、Еще есть внуки、Есть еще бабушки и дедушки, внуки и т. д.,проходить--recurse-submodulesили--recursiveпараметр)。
  • проходить Конфигурацияgit config -f .gitmodules подмодуль. Папка подмодуля относительно каталога.ветвь. Название ветки подмодуля,так что каждый разосуществлятьgit submodule update --remoteчас,Отслеживайте любую указанную ветвь подмодуля (не главную ветку по умолчанию).
  • проходитьforeachЗаказ Можеткудобныйиз Приведите все подмодули по порядкуосуществлять Такой жеиз Заказ。

Если вы хотите узнать больше, вы можете прочитать официальную документацию подмодулей Git и выполнить поиск по ключевым словам, связанным с командами:

напиши в конце

Я да Халл Цинь,Официальный аккаунтОфлайн-игры для вечеринокизавтор(добро пожаловатьсосредоточиться най,завести друга). Перед пересылкой этой статьи необходимо разрешение автора HullQin. Я самостоятельно разработал «Коллекцию настольных онлайн-игр».,да веб-страницы,Очень удобно играть в такие игры, как «Помещики» и «Нарды» онлайн с друзьями.,Никаких комиссий, никакой рекламы。также разработал Понятно《Dice Crush》УчаствоватьGame Jam 2022。喜欢Можетксосредоточиться найой~яиметьнулевой Понятновстреча Делитесь и играйте в игрыиз Связанные технологии,встречасуществовать Поделиться в этой колонке:《Научите вас играть в маленькие игры》

boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023
boy illustration
Урок 1 серии Libtorch: Тензорная библиотека Silky C++
boy illustration
Руководство по локальному развертыванию Stable Diffusion: подробные шаги и анализ распространенных проблем
boy illustration
Полностью автоматический инструмент для работы с видео в один клик: VideoLingo
boy illustration
Улучшения оптимизации RT-DETR: облегченные улучшения магистрали | Support Paddle облегченный rtdetr-r18, rtdetr-r34, rtdetr-r50, rtdet
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | Деформируемое внимание с большим ядром (D-LKA Attention), большое ядро ​​​​свертки улучшает механизм внимания восприимчивых полей с различными функциями
boy illustration
Создано Datawhale: выпущено «Руководство по тонкой настройке развертывания большой модели GLM-4»!
boy illustration
7B превышает десятки миллиардов, aiXcoder-7B с открытым исходным кодом Пекинского университета — это самая мощная модель большого кода, лучший выбор для корпоративного развертывания.
boy illustration
Используйте модель Huggingface, чтобы заменить интерфейс внедрения OpenAI в китайской среде.
boy illustration
Оригинальные улучшения YOLOv8: несколько новых улучшений | Сохранение исходной информации — алгоритм отделяемой по глубине свертки (MDSConv) |
boy illustration
Второй пилот облачной разработки | Быстро поиграйте со средствами разработки на базе искусственного интеллекта
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция с нулевым кодированием и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
Решенная Ошибка | Загрузка PyTorch медленная: TimeoutError: [Errno 110] При загрузке факела истекло время ожидания — Cat Head Tiger
boy illustration
Brother OCR, библиотека с открытым исходным кодом для Python, которая распознает коды проверки.
boy illustration
Новейшее подробное руководство по загрузке и использованию последней демонстрационной версии набора данных COCO.
boy illustration
Выпущен отчет о крупной модели финансовой отрасли за 2023 год | Полный текст включен в загрузку |
boy illustration
Обычные компьютеры также могут работать с большими моделями, и вы можете получить личного помощника с искусственным интеллектом за три шага | Руководство для начинающих по локальному развертыванию LLaMA-3
boy illustration
Одной статьи достаточно для анализа фактора транскрипции SCENIC на Python (4)
boy illustration
Бросая вызов ограничениям производительности небольших видеокарт, он научит вас запускать большие модели глубокого обучения с ограниченными ресурсами, а также предоставит полное руководство по оценке и эффективному использованию памяти графического процессора!
boy illustration
Команда Fudan NLP опубликовала 80-страничный обзор крупномасштабных модельных агентов, в котором в одной статье представлен обзор текущего состояния и будущего агентов ИИ.
boy illustration
[Эксклюзив] Вы должны знать о новой функции JetBrains 2024.1 «Полнострочное завершение кода», чтобы решить вашу путаницу!
boy illustration
Краткое изложение базовых знаний о регистрации изображений 1.0
boy illustration
Новейшее подробное руководство по установке и использованию библиотеки cv2 (OpenCV, opencv-python) в Python.
boy illustration
Легко создайте локальную базу знаний для крупных моделей на основе Ollama+AnythingLLM.
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание решения. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Одна статья поможет вам понять RAG (Retrival Enhanced Generation) | Введение в концепцию и теорию + практику работы с кодом (включая исходный код).
boy illustration
Эволюция архитектуры шлюза облачной разработки
boy illustration
Docker и Kubernetes [Разработка контейнерных приложений с помощью Python]