npm instaluje prywatne repozytoria github według zależności w package.json


210

Próbuję zainstalować prywatne repozytorium github przez npm, które zawiera inne prywatne repozytoria github jako zależność.

Próbowałem wiele sposobów i postów, ale żaden nie działa. Oto co robię:

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

w package.json jest jak:

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

Jaki jest właściwy sposób to zrobić?


4
git + https: // <token-from-github>: x-oauth-basic@github.com/ <user> / <GitRepo> .git Obsługuje uwierzytelnianie i działa dobrze we wszystkich przypadkach.
vashishatashu

Odpowiedzi:


147

Spróbuj tego:

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

Możesz także spróbować tego, gdzie visionmedia / express to name / repo:

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

Lub (jeśli istnieje moduł pakietu npm):

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

Zaczerpnięte z dokumentów NPM


1
npm ERR! Rozwiązywanie git HEAD ( github.com/user/reponame.git ) nie powiodło się : krytyczny: dwuznaczny argument „commit-ish”: nieznana wersja lub ścieżka nie działa w drzewie roboczym.
vashishatashu

Nie działa #xxxx nie jest wymagany, ponieważ nie jest uważany za master, a cała moja praca jest master. Jakiś inny pomysł?
vashishatashu

Ten sam wynik, jeśli usuniesz nagłówek (# commit-ish)?
leko

Jak nazywa się twoje repozytorium?
leko

28
@vashishatashu, dotyczące fatal: ambiguous argument 'commit-ish': unknown revision or path not in the working tree.dość oczywistego, że commit-ishto tylko przykładowe słowo, które należy zastąpić shakonkretnym zatwierdzeniem, którego potrzebujesz. (lub usuń to #commit-ishw ogóle, jeśli potrzebujesz najnowszego zatwierdzenia w gałęzi master)
meandre

91

Poniższe działało dobrze we wszystkich potrzebnych scenariuszach:

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

1
Czy masz link referencyjny do tego rozwiązania?
Ian

3
@Ian: Gdzieś to przeczytałem, ale nie mam linku referencyjnego. Używam go w produkcji od ponad roku bez żadnego problemu. Możesz uzyskać oauth token z Github jako: Ustawienia -> Aplikacje -> Osobisty token dostępu -> Wygeneruj nowy token. Ten token może mieć uprawnienia do odczytu / zapisu lub oba, zgodnie z przypadkiem użycia.
vashishatashu

6
@lan: dla bitbucket możesz użyć następującej składni: git clone https: // <bitbucket-team-token>: x-oauth-basic@bitbucket.org/ <team> / <BitRepo> <bitbucket-team-token> może można uzyskać od: Zespół -> Zarządzaj zespołem -> Klucz API
vashishatashu

@vashishatashu, dzięki za świetny pomysł. Jednak podczas próby tego pojawia się komunikat „Fatal: blahblah not found”, mimo że przyznałem dostęp do danego użytkownika repozytorium. Jakieś pomysły?
Per Lundberg,

2
Oto artykuł miły w tej technice: rzrsharp.net/2013/07/02/...
cyberwombat

75

Dla tych z was, którzy przybyli tutaj po katalogi publiczne, z dokumentów npm: https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Adresy URL Git jako zależności

Adresy URL Git mogą mieć postać:

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

Zatwierdzenie może być dowolnym znacznikiem, sha lub gałęzią, które można podać jako argument do pobrania z git. Domyślnie jest to master.


1
Co oznacza „dla katalogów publicznych”?
Dan Dascalescu,

1
As of version 1.1.65, you can refer to GitHub urls as just “foo”: “user/foo-project”. dokumentacja npmjs docs
Aleksandar

Co oznacza protokół git+https://? Używać gitprotokołu do klonowania i wyciągać nowe zmiany podczas przepychania https?
tonix

60

Akceptowana odpowiedź działa, ale nie podoba mi się pomysł wklejenia bezpiecznych tokenów do pliku package.json

Znalazłem go gdzie indziej, po prostu uruchom to jednorazowe polecenie, jak udokumentowano na stronie man git-config .

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

GITHUB_TOKEN można skonfigurować jako zmienną środowiskową lub wkleić bezpośrednio

a następnie instaluję prywatne repozytoria github, takie jak: npm install user/repo --save


działa również w Heroku, wystarczy ustawić powyższe git config ...polecenie jako heroku-prebuildskrypt w package.jsoni skonfigurować GITHUB_TOKENjako zmienną konfiguracyjną Heroku.


Działa to również w łańcuchu kompilacji Microsoft Visual Studio Team Services, gdzie wykonuję go jako „polecenie” tuż przed npm installkrokiem.
Lukx

2
Spektakularny! Świetne rozwiązanie dla środowisk CI! Musiałem go trochę zmodyfikować; Musiałem zmienić koniec na...insteadOf ssh://git@github.com
Scott Rippey

2
To nie wydaje się mieć wpływu na mój NPM. Nadal używa ssh podczas działania npm install user/repo --save. Czy muszę coś skonfigurować?
Marco Prins

1
Doskonałe rozwiązanie dla środowiska CI, w którym konfiguracja SSH jest uciążliwa (CloudBuild)! Dziękuję bardzo za ten!
Mathieu Bour

43

Ludzie zwracają uwagę na wiele sposobów, ale najkrótsze wersje to:

// 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"

na przykład

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

3
To najlepsza odpowiedź! <3 Od razu do rzeczy, a nawet pokaż przykłady różnych przypadków.
Renato Carvalho,

Zwięzła odpowiedź dla publicznych repozytoriów, co niestety nie było pytaniem PO. Mimo to pomogło mi to i doceniam to.
runderworld

Zaktualizowałem swoją odpowiedź, aby uwzględnić sprawę prywatnego repo
Adrian


7

Ponieważ Git używa curlpod maską, możesz używać ~/.netrcpliku z poświadczeniami. W przypadku GitHub wyglądałoby to mniej więcej tak:

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

Jeśli zdecydujesz się użyć access tokens, możesz go wygenerować z:

Ustawienia -> Ustawienia programisty -> Osobiste tokeny dostępu

Powinno to również działać, jeśli korzystasz z Github Enterprise we własnej korporacji. wystarczy wpisać adres URL github przedsiębiorstwa w machinepolu.


pracował dla mnie z machine github.com login <token>jedną linią i "package": "https://github.com/acme/privaterepo.git#commit-ish"lub bezpośrednio znpm install https://github.com/acme/privaterepo.git#commit-ish
abernier

4

Oto bardziej szczegółowa wersja korzystania z tokena Github bez publikowania w package.jsonpliku.

  1. Utwórz osobisty token dostępu do github
  2. Skonfiguruj przepisanie adresu URL w ~ / .gitconfig
git config --global url."https://<TOKEN HERE>:x-oauth-basic@github.com/".insteadOf https://x-oauth-basic@github.com/
  1. Zainstaluj prywatne repozytorium. Pełny poziom dziennika do debugowania błędów dostępu.
npm install --loglevel verbose --save git+https://x-oauth-basic@github.com/<USERNAME HERE>/<REPOSITORY HERE>.git#v0.1.27

W przypadku awarii dostępu do Github spróbuj uruchomić git ls-remote ...polecenie, którenpm install will print


0

W odniesieniu do mojego prywatnego repozytorium nie chciałem dołączać bezpiecznego tokena i żadne inne proste (tj. Określanie tylko w pakiecie.json) nie działało. Oto, co zadziałało:

  1. Udałem się na GitHub.com
  2. Nawigowane do prywatnego repozytorium
  3. Kliknij „Sklonuj lub pobierz” i skopiowany adres URL (który nie pasuje do powyższych przykładów)
  4. Dodano # commit-sha
  5. Ran npm install

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.