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?

vashishatashu
quelle
4
git + https: // <token-from-github>: [email protected]/ <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

leko
quelle
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>:[email protected]/<user>/<GitRepo>.git"
}
vashishatashu
quelle
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>: [email protected]/ <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.

Mummybot
quelle
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.

Michal Moravcik
quelle
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://[email protected]
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]:[email protected]/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",
}
Adrian
quelle
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
29
"dependencies": {
  "some-package": "github:github_username/some-package"
}

oder nur

"dependencies": {
  "some-package": "github_username/some-package"
}

https://docs.npmjs.com/files/package.json#github-urls

Rayron Victor
quelle
Hat perfekt funktioniert und ist am prägnantesten. Hatte Fehler von anderen Lösungen. Vielen Dank!
Ryall
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.

LeOn - Han Li
quelle
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>:[email protected]/".insteadOf https://[email protected]/
  1. Installieren Sie das private Repository. Ausführliche Protokollebene zum Debuggen von Zugriffsfehlern.
npm install --loglevel verbose --save git+https://[email protected]/<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

Martins Balodis
quelle
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
Der Codierer
quelle