Можно ли git клонировать репо внутри другого репо и фиксировать его файлы, кроме папки. git? - PullRequest
0 голосов
/ 24 января 2020

Я пытался git clone сделать репо внутри другого репо, и файлы не включаются, когда я фиксирую родительское репо в GitHub.

Я разработал несколько частных npm пакетов, которые я использую в клиентских проектах , Клиентам нужны пакеты с заданной версией, и мне нужен способ обновить эти пакеты на моем компьютере разработчика (клиент не делает). Я пытаюсь добиться однонаправленного (только для чтения) syn c из некоторых моих личных репозиториев GitHub в локальные репозитории клиентов.

Затем я могу использовать npm install /path/to/private/package, который будет работать локально и при развертывании в производство, так как пакет будет частью клиентских репозиториев.

Я считаю, что субмодули Git - это не то, что я ищу, поскольку клиентам потребуются учетные данные для моих личных репозиториев.

Возможно? Идеи?

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Короткий ответ, невозможно .

Длинный ответ, в итоге я использовал Git подмодулей , так как это единственная опция, которая дает мне полный контроль над пакетом разработка , версия и дистрибуция .

разработка

  • Используя подмодули Git, каждое клиентское репо может включите указанные c версии моих личных пакетов.
  • Используя подмодули Git, я могу легко исправлять ошибки в этих частных пакетах из клиентских репозиториев и фиксировать исправления, которые могут быть легко применены к другим клиентским проектам.
  • Поскольку мои личные пакеты размещены в частных репозиториях, только я (или авторизованные участники) могут их коммитить.

Управление версиями

  • Учитывая, что я не Я не могу использовать ограниченный npm реестр (который я люблю для проектов с открытым исходным кодом), но у меня есть полный контроль над именами пакетов и версиями (хотя, по общему признанию, перепрофилировать имена неправильно) и версии).

Распространение

  • Используя ключи развертывания GitHub и файл S SH config , я могу легко настроить ключи развертывания для развертываний клиентов.

Вот как этот процесс выглядит для частного пакета с именем @sunknudsen/logger, добавленного в качестве зависимости к репо foo клиента acme.

На моем компьютере разработчика

  1. Я создаю пару ключей S SH, используя ssh-keygen -t rsa и называю ее acme-foo-logger-deploy-key.
  2. Затем я добавляю ключ развертывания на GitHub, используя acme-foo-logger-deploy-key.pub и имя это acme-foo-logger (это помогает мне вспомнить, где развернут пакет).
  3. Я затем cd в репо foo и запускаю git submodule add git@github.com:sunknudsen/logger.git ./@sunknudsen/logger, чтобы добавить субмодуль в репозиторий foo (это работает без настройки файла конфигурации S SH, поскольку я уже авторизован для своей учетной записи GitHub с использованием S SH auth ).
  4. Наконец, я запускаю npm install @sunknudsen/logger, чтобы добавить @sunknudsen/logger к репо package.json и связать локальный пакет.

Примечание: чтобы выполнить процедуру развертывания понятно, я запускаю cp .gitmodules .gitmodules.sample, добавляю .gitmodules к .gitignore и инструктирую dev ops в README.md для запуска cp .gitmodules.sample .gitmodules при их git clone и замену git@github.com:sunknudsen/logger.git на git@sunknudsen-logger:sunknudsen/logger.git в .gitmodules.

На сервере acme после запуска git clone и перед запуском npm install

  1. Я загружаю acme-foo-logger-deploy-key в ~/.ssh/.
  2. Затем я добавляю следующие строки в ~/.ssh/config.
Host sunknudsen-logger
Hostname github.com
IdentityFile ~/.ssh/acme-foo-logger-deploy-key
Наконец, я запускаю git submodule update --init.

Далее идет обычная npm install вещь.

Надеюсь, что это может помочь другим!

0 голосов
/ 24 января 2020

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

Похоже, есть некоторые модули, которые поддерживают вендеринг для проектов узлов. Например, есть модуль с именем vendor-copy, который делает это и выглядит так, как будто он может быть полезен для вашего случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...