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.