Мы используем GitLab для нашего частного проекта. Есть несколько разветвленных библиотек из github, которые мы хотим установить как модуль npm. Установка этого модуля прямо из npm - это нормально, например:
npm install git://github.com/FredyC/grunt-stylus-sprite.git
... тоже работает правильно, но если сделать то же самое для GitLab, просто смена домена вызывает эту ошибку.
npm WARN `git config --get remote.origin.url` returned wrong result (git://git.domain.com/library/grunt-stylus-sprite.git)
npm ERR! git clone git://git.domain.com/library/grunt-stylus-sprite.git Cloning into bare repository 'D:\users\Fredy\AppData\Roaming\npm-cache\_git-remotes\git-git-domain-com-library-grunt-stylus-sprite-git-6f33bc59'...
npm ERR! git clone git://git.domain.com/library/grunt-stylus-sprite.git fatal:unable to connect to git.domain.com:
npm ERR! git clone git://git.domain.com/library/grunt-stylus-sprite.git git.domain.com[0: 77.93.195.214]: errno=No error
npm ERR! Error: Command failed: Cloning into bare repository 'D:\users\Fredy\App
Data\Roaming\npm-cache\_git-remotes\git-git-domain-com-library-grunt-stylus-spr
ite-git-6f33bc59'...
npm ERR! fatal: unable to connect to git.domain.com:
npm ERR! git.domain.com[0: xx.xx.xx.xx]: errno=No error
Из веб-интерфейса GitLab у меня есть этот URL
git@git.domain.com:library/grunt-stylus-sprite.git
. Запустив это против, npm install
он пытается установить git
модуль из реестра npm.
Однако использование URL: git+ssh@git.domain.com:library/grunt-stylus-sprite.git
внезапно запрашивает у меня пароль. Мой SSH-ключ не включает парольную фразу, поэтому я предполагаю, что он не смог загрузить этот ключ. Может быть, есть какая-то конфигурация, которую я пропустил? Ключ находится в стандартном месте в моем домашнем каталоге с именем "id_rsa"
.
У меня Windows 7 x64.
ОБНОВИТЬ
Начиная с NPM v3 есть встроенная поддержка GitLab и других источников (BitBucket, Gist), откуда вы можете устанавливать пакеты. К сожалению, это работает только для общедоступных, поэтому не совсем связано с этим, но некоторым может быть полезно.
npm install gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]
Ознакомьтесь с документацией: https://docs.npmjs.com/cli/install
<placeholders>
пробовал несколько вариантов, но все равно говорится, что проект не найден.$ npm i -S git+ssh://git@gitlab.com/org/repo.git
не работаетОтветы:
У вас есть следующие методы для подключения к частному репозиторию gitlab
С SSH
С HTTPS
С HTTPS и токеном развертывания
источник
Repository#1.2.3
. Я поменяю галочку ответа, так как это более точно.git+ssh://git@git.mydomain.com/Username/Repository
(обратите внимание на /, разделяющий хост и имя пользователя). Это может быть специфическая вещь, возможно, предложенный пример действительно работает с npm<token-name>
в примере, похожеgitlab+deploy-token-17034
, это не произвольное имя, которое вы назначаете токену.Вместо того
git://
, чтобы использоватьgit+ssh://
и npm, следует поступать правильно.источник
undefined ls-remote <url>
Обновить
Как упоминал @felix в комментариях (спасибо @felix), использование
deploy token
гораздо более актуально для чтения частного реестраgitlab
. Таким образом, токен скомпрометирован, злоумышленник просто может прочитать этот репозиторий и не сможет вносить изменения.Создание токена развертывания
GitLab
учетную запись.Expand
на раздел Deploy Tokens.read_repository
Старый ответ
Перейти
User Settings > Access Tokens
и создать новыйaccess token
сread_registry
разрешением.Копия сгенерирована
token
, она нам нужна для нашегоpackage.json
файла.Теперь
package.json
добавьте,dependency
как показано ниже:Замените
Xaqron
своим именем пользователя иtoken
сгенерированным токеном. Вы можете указатьbranch
иtag
в конце url#{branch|tag}
.Примечание. Поскольку токен доступа находится у
package.json
всех, у кого есть доступ к этому проекту, он может читать репозиторий, поэтому я предполагаю, что ваш проект является частным.источник
"private-module": "git+https://gitlab+deploy-token-username:deploy-token@gitlab.com/you/project",
npm ERR! enoent undefined ls-remote -h -t https://puump:pass@gitlab.com/puump/puump-content.git
git
see"private-module": "git+https://gitlab+deploy-token-username:deploy-token@gitlab.com/group_name/project"
поэтому вместоyour username
, вы должны определитьgroup_name
перед именем проектаХотя вопрос касается Gitlab, этот вопрос довольно хорошо оценивается в поиске Google, поэтому вот еще немного информации о том, как исправить аналогичную проблему, которую я получил с Github.
Для меня только изменение URL-адреса не помогло. Вот шаги, которые мне пришлось предпринять, чтобы это исправить:
git+ssh://git@github.com:owner/repo.git#master
~/.ssh/config
создайте файл, если он не существует), чтобы принудительно использовать DeployKey вместо ключа ssh по умолчаниюПосле этого установка npm просто заработала. Все остальные варианты и решения, вызванные нарушением установки npm
источник
:owner
?~/.ssh/config
? Я все еще не разобрался с npm / gitlabПросто для всех, кто сталкивается с этим, я вообще не мог заставить его работать через HTTPS - кажется, он не поддерживает прямую ссылку на репо (например
https://git.domain.com/user/somerepo.git
), а также не поддерживает версии.tar
,.tar.bz
или.zip
архивные.Только вроде работает с
.tar.gz
архивом.Полный пример (с помеченной версией):
https://git.domain.com/user/somerepo/repository/archive.tar.gz?ref=v1.2.3
источник
Ни один из других ответов не помог мне для частного репозитория gitlab.com ...
Однако это работает:
npm i -S git+ssh://git@gitlab.com:<org>/<project>.git
Это просто git ssh clone url из поля ввода "clone" страницы проекта,
git+ssh://
добавленный перед ним.источник
Насколько я могу судить, в чем вы ошибаетесь, так это в
git://
протоколе. GitLab поддерживает только HTTP (s) и SSH для клонов. Поэтому вы должны использовать один из этих методов вместо протокола git.источник
Для меня установите package.json, как показано ниже.
Токен можно получить в разделе «Настройки профиля - Токен доступа».
источник
Если вы хотите использовать переменную среды, содержащую токен, вместо жестко запрограммированного токена в URL-адресе, я придумал решение, даже довольно сложное. Мы будем использовать
GIT_ASKPASS
переменную среды, чтобы получить пароль из сценария bash, этот сценарий будет отображать переменную среды. Чтобы преодолеть npm, передавая только определенные переменные среды GIT, мы будем использоватьGIT_SSH
в качестве посредника.Таким образом, учитывая ,
git_pass_env.sh
содержащиеecho $GIT_SSH
мы можем просто позвонить:Для примера проекта с docker и docker-compose см. Мое репо здесь .
Блок-схема переменных среды:
источник
Gitlab теперь имеет реестр пакетов, в котором можно создавать, развертывать и размещать пакеты npm. С частными репозиториями можно обеспечить детальный контроль доступа к содержимому репозитория и пакетам.
Пакеты NPM можно установить из частных репозиториев Gitlab, добавив
.npmrc
файл рядомpackage.json
. Больше информации здесь . Хотя это усложняется при использовании нескольких токенов развертывания для разных репозиториев в одной кодовой базе.С помощью Gitlab можно получить доступ к
.tgz
файлу пакета напрямую по HTTPS и развернуть токен . Просто добавьте зависимость проекта следующим образом:@ foo / bar присутствует в URL дважды. @foo - это объем проекта, а bar - это имя модуля, а 1.0.0 - имя модуля. project-id (8-значное число) - это идентификатор проекта Gitlab, который можно увидеть на странице проекта под именем. Можно даже опустить @foo в имени модуля (но не в ссылке).
Использование нескольких модулей с одинаковой областью действия и разных токенов развертывания обеспечивает безопасность управления частными репозиториями. Кроме того, токены развертывания могут иметь только доступ,
package registry
что означает, что конечный пользователь не сможет получить доступ к полному исходному коду из репозиториев.источник