npmは、package.jsonの依存関係によってプライベートgithubリポジトリをインストールします


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認証をサポートし、すべてのケースで正常に動作します。
vashishatashu 2015

回答:


147

これを試して:

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

これを試すこともできます。visionmedia/ expressはname / repoです。

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

または(npmパッケージモジュールが存在する場合):

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

NPMドキュメントから取得


1
npm ERR!git HEAD(github.com/user/reponame.git)の解決に失敗しましたfatal:あいまいな引数 'commit-ish':不明なリビジョンまたはパスが作業ツリーにありません。
vashishatashu 2014

動作しません。#xxxxは必須ではありません。マスターと見なされていないかのように、私の仕事はすべてマスターであるかのようです。他のアイデアは?
vashishatashu 2014

ヘッダーを削除しても同じ結果(#commit-ish)?
leko 14

リポジトリの名前は何ですか?
leko 2014

28
@vashishatashu、fatal: ambiguous argument 'commit-ish': unknown revision or path not in the working tree.それcommit-ishshaあなたが必要とする特定のコミットのあなたが置き換えるべきサンプル単語にすぎないかなり明白なことに関してです。(または#commit-ish、masterブランチで最新のコミットが必要な場合は削除します)
meandre

91

以下は私が必要とするすべてのシナリオでうまく機能しました:

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

1
このソリューションの参照リンクはありますか?
イアン

3
@Ian:どこかで読みましたが、参照リンクがありません。1年以上本番で問題なく使っています。次のようにGithubからoauthトークンを取得できます。設定->アプリケーション->パーソナルアクセストークン->新しいトークンを生成します。このトークンは、ユースケースに応じて、読み取り/書き込みまたは両方の特権を持つことができます。
vashishatashu 2015

6
@lan:bitbucketの場合、次の構文を使用できます:git clone https:// <bitbucket-team-token>:x-oauth-basic@bitbucket.org/ <team> / <BitRepo> <bitbucket-team-token> can取得先:チーム->チームの管理-> APIキー
vashishatashu 2015

@vashishatashu、素晴らしいアイデアをありがとう。しかし、問題のユーザーにリポジトリへのアクセスを許可しているにもかかわらず、これを試行すると「致命的:何とか見つかりません」と表示されます。何か案は?
ルンドバーグあたり、2015

2
:ここでは、この技術の素晴らしい記事だrzrsharp.net/2013/07/02/...
cyberwombat

75

パブリックディレクトリのためにここに来た人のために、npm docsから:https : //docs.npmjs.com/files/package.json#git-urls-as-dependencies

依存関係としてのGit URL

GitのURLの形式は次のとおりです。

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

commit-ishは、git checkoutの引数として指定できる任意のタグ、sha、またはブランチです。デフォルトはマスターです。


1
「パブリックディレクトリ用」とはどういう意味ですか?
Dan Dascalescu 2018

1
As of version 1.1.65, you can refer to GitHub urls as just “foo”: “user/foo-project”. npmjsドキュメントリファレンス
Aleksandar

プロトコルはgit+https://どういう意味ですか?gitクローンにプロトコルを使用し、プッシュしながら新しい変更をプルしhttpsますか?
tonix

60

受け入れられた答えは機能しますが、安全なトークンをに貼り付けるという考えはあまり好きではありません package.json

私は他の場所でそれを見つけました、git-configのマンページに記載されているように、この1回限りのコマンド実行してください。

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ビルドチェーンでも機能し、npm installステップの直前に「コマンド」として実行します。
Lukx 2017年

2
素晴らしい!CI環境に最適なソリューション!少し修正する必要がありました。私はに終止符を変更しなければならなかった...insteadOf ssh://git@github.com
スコットRippey

2
これは私のnpmに影響を与えていないようです。実行時にsshを使用していますnpm install user/repo --save。設定する必要があるものはありますか?
Marco Prins 2018年

1
SSHの設定が面倒なCI環境向けの優れたソリューション(CloudBuild)!これをありがとう!
Mathieu Bour

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端的に言って、さまざまなケースの例を示しています。
Renato Carvalho

残念ながらOPの質問ではなかった、パブリックリポジトリに対する簡潔な回答。それでも、それは私を助け、私はそれを高く評価しました。
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>1行で、"package": "https://github.com/acme/privaterepo.git#commit-ish"または直接npm install https://github.com/acme/privaterepo.git#commit-ish
abernier

4

package.jsonファイルに公開せずにGithubトークンを使用する方法のより詳細なバージョンを次に示します。

  1. 個人のgithubアクセストークンを作成する
  2. 〜/ .gitconfigでのURL書き換えのセットアップ
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インストールを実行した

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.