npm通过package.json中的依赖项安装私有github存储库


210

我正在尝试通过npm安装github私有存储库,其中包括其他私有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年

Answers:


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”:未知修订或路径不在工作树中。
vashishatashu 2014年

不起作用 #xxxx不是必需的,好像没有被认为是master一样,而我的所有工作都在master中。还有其他想法吗?
vashishatashu 2014年

如果删除标头(#commit-ish),结果是否相同?
leko 2014年

您的存储库的名称是什么?
leko 2014年

28
@vashishatashu,关于fatal: ambiguous argument 'commit-ish': unknown revision or path not in the working tree.很明显,这commit-ish只是一个示例单词,您应该将其替换sha为所需的特定提交。(或者,#commit-ish如果您需要在master分支中进行最新的提交,则将其全部删除)
意味着2015年

91

以下在我需要的所有情况下都可以正常工作:

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

1
您是否有此解决方案的参考链接?
2015年

3
@Ian:我在某处阅读过,但没有参考链接。我已经在生产中使用了一年多,没有任何问题。您可以通过以下方式从Github获取oauth令牌:设置->应用程序->个人访问令牌->生成新令牌。根据您的用例,此令牌可以具有读/写权限,或同时具有这两种权限。
vashishatashu 2015年

6
@lan:对于bitbucket,您可以使用以下语法:git clone https:// <bitbucket-team-token>:x-oauth-basic@bitbucket.org/ <team> / <BitRepo> <bitbucket-team-token>可以从以下位置获得:团队->管理团队-> API密钥
vashishatashu 2015年

@vashishatashu,感谢您的好主意。但是,即使我已将有关用户授予回购协议的访问权限,尝试执行此操作时也会收到“致命的信息:找不到”。有任何想法吗?
Per Lundberg

2
这是一篇有关该技术的不错的文章:rzrsharp.net/2013/07/02/…–
cyberwombat

75

对于那些来这里访问公共目录的人,请参阅npm docs:https ://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Git 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

commit-ish可以是任何标签,sha或分支,可以将其作为git checkout的参数提供。默认值为master。


1
“对于公共目录”是什么意思?
Dan Dascalescu 18/12/11

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联机帮助页中的说明运行此一次性命令即可。

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

GITHUB_TOKEN 可以设置为environmnet变量或直接粘贴

然后安装像下面这样的私有github仓库: npm install user/repo --save


在Heroku中也可以使用,只需将上述git config ...命令设置为heroku-prebuild脚本,package.json然后将其设置GITHUB_TOKEN为Heroku配置变量即可。


这在Microsoft Visual Studio Team Services构建链中也适用,在该npm install步骤之前,我将其作为“命令”执行。
卢克克斯

2
壮观!CI环境的绝佳解决方案!我确实需要对其进行一些修改。我必须将结尾更改为...insteadOf ssh://git@github.com
Scott Rippey,

2
这似乎并不影响我的npm。运行时仍在使用ssh npm install user/repo --save。我需要配置什么吗?
Marco Prins

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直截了当,甚至展示了不同情况下的例子。
雷纳托·卡瓦略

对于公共存储库的简洁回答,不幸的是,这不是OP的问题。不过,它对我有帮助,我对此表示赞赏。
runderworld的

我更新了答案,以包括私人回购案
Adrian


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>一次"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. 在〜/ .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安装

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.