npm устанавливает частные репозитории github по зависимости в package.json


211

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

Перепробовал много способов и сообщений, но ни один не работает. Вот что я делаю:

npm install git+https://github.com/myusername/mygitrepository.git

в package.json это как:

"dependencies": {
    "repository1name": "git+https://github.com/myusername/repository1.git",
    "repository2name": "git+https://github.com/myusername/repository2.git"
}

Как правильно это сделать?


4
git + https: // <token-from-github>: x-oauth-basic@github.com/ <пользователь> / <GitRepo> .git. Он поддерживает аутентификацию и отлично работает во всех случаях.
Вашишаташу

Ответы:


147

Попробуй это:

"dependencies" : {
  "name1" : "git://github.com/user/project.git#commit-ish",
  "name2" : "git://github.com/user/project.git#commit-ish"
}

Вы также можете попробовать это, где visionmedia / express это имя / репо:

"dependencies" : {
   "express" : "visionmedia/express"
}

Или (если существует модуль пакета npm):

"dependencies" : {
  "name": "*"
}

Взято из документов NPM


1
нпм ERR! Не удалось разрешить git HEAD ( github.com/user/reponame.git ) fatal: неоднозначный аргумент 'commit-ish': неизвестная ревизия или путь не в рабочем дереве.
Вашишаташу

Не работает #xxxx не обязателен, как будто его не считают мастером, а все мои работы выполнены мастером. Любая другая идея?
Вашишаташу

Тот же результат, если вы удалите заголовок (# commit-ish)?
Леко

Как называется ваш репозиторий?
Леко

28
@vashishatashu, относительно fatal: ambiguous argument 'commit-ish': unknown revision or path not in the working tree.довольно очевидно, что commit-ishэто всего лишь примерное слово, которое вы должны заменить shaконкретным коммитом, который вам нужен. (или #commit-ishвообще уберите его, если вам нужен последний коммит в вашей основной ветке)
meandre

92

Следующее отлично работает во всех нужных мне сценариях:

"dependencies": {
"GitRepo": "git+https://<token-from-github>:x-oauth-basic@github.com/<user>/<GitRepo>.git"
}

2
У вас есть ссылка для этого решения?
Ян

3
@Ian: я где-то читал, но не имею ссылки. Я использую его в производстве более года без каких-либо проблем. Вы можете получить oauth-токен из Github следующим образом: Настройки -> Приложения -> Персональный токен -> Создать новый токен. Этот токен может иметь права на чтение / запись или обе привилегии в соответствии с вашим вариантом использования.
Вашишаташу

6
@lan: для bitbucket вы можете использовать следующий синтаксис: git clone https: // <bitbucket-team-token>: x-oauth-basic@bitbucket.org/ <team> / <BitRepo> <bitbucket-team-token> can получить от: Team -> Manage Team -> API Key
vashishatashu

@vashishatashu, спасибо за отличную идею. Тем не менее, я получаю «роковое: бла-бла не найден» при попытке этого, хотя я предоставил доступ к данному пользователю репо. Любые идеи?
Пер Лундберг

2
Вот хорошая статья об этой технике: rzrsharp.net/2013/07/02/…
cyberwombat

76

Для тех из вас, кто пришел сюда для публичных каталогов, из документации npm: https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Git URL-адреса как зависимости

URL-адреса Git могут иметь вид:

git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+ssh://user@hostname/project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish

Коммитом-фиксацией может быть любой тег, sha или ветвь, которые могут быть предоставлены в качестве аргумента для git checkout. По умолчанию используется мастер.


1
Что означает «для публичных каталогов»?
Дан Даскалеску

1
As of version 1.1.65, you can refer to GitHub urls as just “foo”: “user/foo-project”. Ссылка на документы npmjs
Александр

Что означает протокол git+https://? Использовать gitпротокол для клонирования и извлекать новые изменения во время проталкивания https?
tonix

60

Принятый ответ работает, но мне не очень нравится идея вставлять безопасные токены в package.json

Я нашел это в другом месте, просто запустите эту одноразовую команду, как описано в справочной странице git-config .

git config --global url."https://${GITHUB_TOKEN}@github.com/".insteadOf git@github.com:

GITHUB_TOKEN может быть настроен как переменная окружения или вставлен напрямую

а затем я устанавливаю частные репозитории github, такие как: npm install user/repo --save


работает также в Heroku, просто настройте указанную выше git config ...команду как heroku-prebuildскрипт package.jsonи настройте GITHUB_TOKENкак конфигурационную переменную Heroku.


Это также работает в Microsoft Visual Studio Team Services Build Chain, где я выполняю это как «команду» непосредственно перед npm installшагом.
Lukx

2
Зрелищный! Отличное решение для сред CI! Мне пришлось немного его изменить; Мне пришлось изменить конец на...insteadOf ssh://git@github.com
Скотт Риппи

2
Кажется, это не влияет на мой npm. Он все еще использует ssh при запуске npm install user/repo --save. Что-то мне нужно настроить?
Марко Принс

1
Отличное решение для среды CI, где настройка SSH является трудной задачей (CloudBuild)! Большое спасибо за это!
Матье Бур

43

Есть несколько способов сделать это, как отмечают люди, но самые короткие версии:

// from master
"depName": "user/repo",

// specific branch
"depName": "user/repo#branch",

// specific commit
"depName": "user/repo#commit",

// private repo
"depName": "git+https://[TOKEN]:x-oauth-basic@github.com/user/repo.git"

например

"dependencies" : {
  "hexo-renderer-marked": "amejiarosario/dsa.jsd#book",
  "hexo-renderer-marked": "amejiarosario/dsa.js#8ea61ce",
  "hexo-renderer-marked": "amejiarosario/dsa.js",
}

3
Это лучший ответ! <3 Прямо в точку и даже покажу примеры разных случаев.
Ренато Карвалью

Краткий ответ для публичных репозиториев, что, к сожалению, не было вопросом ОП. Тем не менее, это помогло мне, и я это оценил.
runderworld

Я обновил свой ответ, чтобы включить частный случай репо
Адриан


7

Поскольку Git использует curlпод капотом, вы можете использовать ~/.netrcфайл с учетными данными. Для GitHub это будет выглядеть примерно так:

machine github.com
  login <github username>
  password <password OR github access token>

Если вы решите использовать access tokens, он может быть сгенерирован из:

Настройки -> Настройки разработчика -> Токены личного доступа

Это также должно работать, если вы используете Github Enterprise в своей собственной корпорации. просто поместите ваш GitHub URL в machineполе.


работал для меня с machine github.com login <token>одной линией и / "package": "https://github.com/acme/privaterepo.git#commit-ish"или непосредственно сnpm install https://github.com/acme/privaterepo.git#commit-ish
abernier

4

Вот более подробная версия того, как использовать токен Github без публикации в package.jsonфайле.

  1. Создать личный токен доступа к GitHub
  2. Настройка перезаписи URL в ~ / .gitconfig
git config --global url."https://<TOKEN HERE>:x-oauth-basic@github.com/".insteadOf https://x-oauth-basic@github.com/
  1. Установите частный репозиторий. Уровень подробного журнала для отладки ошибок доступа.
npm install --loglevel verbose --save git+https://x-oauth-basic@github.com/<USERNAME HERE>/<REPOSITORY HERE>.git#v0.1.27

В случае сбоя доступа к Github попробуйте запустить git ls-remote ...командуnpm install will print


0

Для моей личной ссылки на репозиторий я не хотел включать безопасный токен, и ни один из других простых (то есть указание только в package.json) не работал. Вот что сработало:

  1. Зашел на GitHub.com
  2. Перешел в частный репозиторий
  3. Нажмите «Клонировать или загрузить» и скопированный URL (что не соответствует приведенным выше примерам).
  4. Добавлен # commit-sha
  5. Запустил npm install

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.