npm installiert private Github-Repositorys nach Abhängigkeit in package.json


210

Ich versuche, das private Github-Repository von npm zu installieren, das andere private Github-Repositorys als Abhängigkeit enthält.

Habe viele Wege und Beiträge ausprobiert, aber keiner funktioniert. Folgendes mache ich:

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

in package.json ist wie:

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

Was ist der richtige Weg, um es zu tun?


4
git + https: // <token-from-github>: x-oauth-basic@github.com/ <user> / <GitRepo> .git Es unterstützt die Authentifizierung und funktioniert in allen Fällen einwandfrei.
Vashishatashu

Antworten:


147

Versuche dies:

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

Sie können dies auch versuchen, wobei visionmedia / express name / repo ist:

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

Oder (wenn das npm-Paketmodul vorhanden ist):

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

Entnommen aus NPM-Dokumenten


1
npm ERR! Fehler beim Auflösen von git HEAD ( github.com/user/reponame.git ) fatal: Mehrdeutiges Argument 'commit-ish': unbekannte Revision oder Pfad nicht im Arbeitsbaum.
Vashishatashu

Funktioniert nicht Das #xxxx ist nicht erforderlich, als würde es nicht als Master betrachtet, und alle meine Arbeiten sind im Master. Irgendeine andere Idee?
Vashishatashu

Gleiches Ergebnis, wenn Sie den Header entfernen (# commit-ish)?
Leko

Wie heißt Ihr Repository?
Leko

28
@vashishatashu, in Bezug auf fatal: ambiguous argument 'commit-ish': unknown revision or path not in the working tree.Ziemlich offensichtlich, dass dies commit-ishnur ein Beispielwort ist, das Sie durch shaein bestimmtes Commit ersetzen sollten , das Sie benötigen. (oder entfernen Sie das #commit-ishüberhaupt, wenn Sie das letzte Commit in Ihrer Hauptniederlassung benötigen)
meandre

91

Folgendes funktionierte in allen von mir benötigten Szenarien einwandfrei:

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

1
Haben Sie einen Referenzlink für diese Lösung?
Ian

3
@ Ian: Ich habe es irgendwo gelesen, aber keinen Referenzlink. Ich verwende es seit über einem Jahr ohne Probleme in der Produktion. Sie können oauth Token von Github erhalten als: Einstellungen -> Anwendungen -> Persönliches Zugriffstoken -> Neues Token generieren. Dieses Token kann je nach Anwendungsfall über Lese- / Schreibrechte oder beide Berechtigungen verfügen.
Vashishatashu

6
@lan: Für Bitbucket können Sie die folgende Syntax verwenden: Git-Klon https: // <bitbucket-team-token>: x-oauth-basic@bitbucket.org/ <team> / <BitRepo> <bitbucket-team-token> can erhältlich bei: Team -> Team verwalten -> API-Schlüssel
vashishatashu

@vashishatashu, danke für eine tolle Idee. Wenn ich dies versuche, wird jedoch "fatal: blahblah not found" angezeigt, obwohl ich dem betreffenden Benutzer Zugriff auf das Repo gewährt habe. Irgendwelche Ideen?
Per Lundberg

2
Hier ist ein schöner Artikel über diese Technik: rzrsharp.net/2013/07/02/…
Cyberwombat

75

Für diejenigen unter Ihnen, die wegen öffentlicher Verzeichnisse hierher gekommen sind, aus den npm-Dokumenten: https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Git-URLs als Abhängigkeiten

Git-URLs können folgende Form haben:

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

Das Commit-ish kann ein beliebiges Tag, sha oder Zweig sein, das als Argument für das Auschecken von Git angegeben werden kann. Der Standardwert ist master.


1
Was bedeutet "für öffentliche Verzeichnisse"?
Dan Dascalescu

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

Was bedeutet das Protokoll git+https://? Verwenden gitProtokoll zur Klonierung und neue Änderungen ziehen , während durchzudrücken https?
Tonix

60

Die akzeptierte Antwort funktioniert, aber ich mag die Idee nicht, sichere Token in die einzufügen package.json

Ich habe es woanders gefunden. Führen Sie einfach diesen einmaligen Befehl aus, wie in der Manpage git-config dokumentiert .

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

GITHUB_TOKEN kann als Umgebungsvariable eingerichtet oder direkt eingefügt werden

und dann installiere ich private Github-Repos wie: npm install user/repo --save


funktioniert auch in Heroku, richten Sie einfach den obigen git config ...Befehl als heroku-prebuildSkript ein package.jsonund richten Sie ihn GITHUB_TOKENals Heroku-Konfigurationsvariable ein.


Dies funktioniert auch in der Microsoft Visual Studio Team Services-Erstellungskette, wo ich sie kurz vor dem npm installSchritt als "Befehl" ausführe .
Lukx

2
Spektakulär! Tolle Lösung für CI-Umgebungen! Ich musste es ein wenig modifizieren; Ich musste das Ende ändern...insteadOf ssh://git@github.com
Scott Rippey

2
Dies scheint meine npm nicht zu beeinflussen. Beim Laufen wird immer noch ssh verwendet npm install user/repo --save. Muss ich etwas konfigurieren?
Marco Prins

1
Hervorragende Lösung für CI-Umgebungen, in denen das Einrichten von SSH schwierig ist (CloudBuild)! Vielen Dank für diesen einen!
Mathieu Bour

43

Es gibt mehrere Möglichkeiten, dies zu tun, wie die Leute betonen, aber die kürzesten Versionen sind:

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

z.B

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

3
Das ist die beste Antwort! <3 Auf den Punkt gebracht und sogar Beispiele für verschiedene Fälle gezeigt.
Renato Carvalho

Prägnante Antwort für öffentliche Repositories, was leider nicht die Frage des OP war. Trotzdem hat es mir geholfen und ich habe es geschätzt.
runderworld

Ich habe meine Antwort aktualisiert, um den privaten Repo-Fall aufzunehmen
Adrian


7

Da Git curlunter der Haube verwendet, können Sie ~/.netrcDateien mit den Anmeldeinformationen verwenden. Für GitHub würde es ungefähr so ​​aussehen:

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

Wenn Sie sich für die Verwendung entscheiden access tokens, kann es generiert werden aus:

Einstellungen -> Entwicklereinstellungen -> Persönliche Zugriffstoken

Dies sollte auch funktionieren, wenn Sie Github Enterprise in Ihrem eigenen Unternehmen verwenden. Geben Sie einfach Ihre Unternehmens-Github-URL in das machineFeld ein.


arbeitete für mich mit machine github.com login <token>auf einer Linie und "package": "https://github.com/acme/privaterepo.git#commit-ish"oder direkt mitnpm install https://github.com/acme/privaterepo.git#commit-ish
abernier

4

Hier finden Sie eine detailliertere Version der Verwendung des Github-Tokens ohne Veröffentlichung in der package.jsonDatei.

  1. Erstellen Sie ein persönliches Github-Zugriffstoken
  2. Richten Sie die URL in ~ / .gitconfig neu ein
git config --global url."https://<TOKEN HERE>:x-oauth-basic@github.com/".insteadOf https://x-oauth-basic@github.com/
  1. Installieren Sie das private Repository. Ausführliche Protokollebene zum Debuggen von Zugriffsfehlern.
npm install --loglevel verbose --save git+https://x-oauth-basic@github.com/<USERNAME HERE>/<REPOSITORY HERE>.git#v0.1.27

Wenn der Zugriff auf Github fehlschlägt, führen Sie den git ls-remote ...Befehl aus, den dienpm install will print


0

Als Referenz für mein privates Repository wollte ich kein sicheres Token einfügen, und keines der anderen einfachen (dh nur in package.json angegebenen) funktionierte. Folgendes hat funktioniert:

  1. Ging zu GitHub.com
  2. Navigiert zu Private Repository
  3. Klicken Sie auf "Klonen oder Herunterladen" und kopieren Sie die URL (die nicht mit den obigen Beispielen übereinstimmt).
  4. # Commit-sha hinzugefügt
  5. Ran npm installieren

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.