npm встановлювати приватні сховища github залежно від package.json


210

Я намагаюся встановити приватне сховище 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/ <user> / <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
npm ERR! Не вдалося вирішити git HEAD ( github.com/user/reponame.git ) фатально: неоднозначний аргумент 'commit-ish': невідома редакція або шлях не в робочому дереві.
вашішаташу

Не працює. #xxxx не потрібно, ніби не вважається його майстром, і вся моя робота в майстер. Будь-яка інша ідея?
вашішаташу

Той самий результат, якщо ви видалите заголовок (# commit-ish)?
leko

Як називається ваше сховище?
leko

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

91

Наступне спрацювало чудово у всіх необхідних мені сценаріях:

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

1
Чи є у вас посилання на це рішення?
Ян

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, дякую за чудову ідею. Однак я отримую "фатально: blahblah не знайдено" при спробі цього, хоча я надав доступ до репо респондента. Будь-які ідеї?
Пер Лундберг,

2
Ось приємна стаття про цю техніку: rzrsharp.net/2013/07/02/…
cyberwombat

75

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

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

Коміс-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 docs reference
Олександр

Що означає протокол 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кроком.
Лукс

2
Видовищне! Чудове рішення для середовищ CI! Мені довелося це трохи змінити; Мені довелося змінити кінець на...insteadOf ssh://git@github.com
Скотта Ріппея,

2
Це, мабуть, не впливає на мін. Він все ще використовує 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 у власній корпорації. просто поставте своє machineполе github у поле.


працював для мене 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. Додано # фік-ша
  5. Встановити npm встановити

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.