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

답변:


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 ) 해결에 실패했습니다. 치명적 : 모호한 인수 'commit-ish': 작업 트리에없는 알 수없는 개정 또는 경로입니다.
vashishatashu

작동하지 않습니다. #xxxx는 마스터로 간주되지 않는 것처럼 필요하지 않으며 내 모든 작업이 마스터입니다. 다른 아이디어?
vashishatashu

헤더를 제거해도 동일한 결과 (# commit-ish)?
leko

리포지토리의 이름은 무엇입니까?
leko

28
@vashishatashu에 관한 fatal: ambiguous argument 'commit-ish': unknown revision or path not in the working tree.꽤 분명 commit-ish당신은으로 대체해야하는 단지 샘플 단어는 sha특정의 당신이 필요로하는 것을 커밋합니다. (또는 #commit-ish마스터 브랜치에서 최신 커밋이 필요한 경우 전혀 제거하십시오 )
meandre

91

다음은 내가 필요한 모든 시나리오에서 잘 작동했습니다.

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

1
이 솔루션에 대한 참조 링크가 있습니까?
Ian

3
@Ian : 어딘가에 읽었지만 참조 링크가 없습니다. 나는 문제없이 1 년 이상 프로덕션 환경에서 사용하고 있습니다. 설정-> 응용 프로그램-> 개인 액세스 토큰-> 새 토큰 생성으로 Github에서 oauth 토큰을 얻을 수 있습니다. 이 토큰은 사용 사례에 따라 읽기 / 쓰기 또는 두 가지 권한을 모두 가질 수 있습니다.
vashishatashu

6
@lan : bitbucket의 경우 다음 구문을 사용할 수 있습니다 : git clone https : // <bitbucket-team-token> : x-oauth-basic@bitbucket.org/ <team> / <BitRepo> <bitbucket-team-token> can 에서 얻을 수 : 팀-> 팀 관리-> API 키
vashishatashu

@vashishatashu, 좋은 아이디어 주셔서 감사합니다. 그러나 문제가있는 사용자에게 레포지토리에 대한 액세스 권한을 부여했지만이 작업을 시도 할 때 "치명적 : blahblah를 찾을 수 없음"이 표시됩니다. 어떤 아이디어?
Per Lundberg

2
다음은이 기술에 좋은 기사입니다 rzrsharp.net/2013/07/02/...
cyberwombat

75

공개 디렉토리를 위해 여기에 온 사람들을 위해, npm 문서에서 : https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

의존성으로 Git URL

힘내 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 또는 분기 일 수 있습니다. 디폴트는 master입니다.


1
"공용 디렉토리"의 의미는 무엇입니까?
Dan Dascalescu

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 repos를 다음과 같이 설치합니다. npm install user/repo --save


Heroku에서도 작동합니다. 위의 git config ...명령을 heroku-prebuild스크립트로 package.json설정 GITHUB_TOKEN하고 Heroku 구성 변수로 설정하십시오.


이것은 또한 Microsoft Visual Studio Team Services 빌드 체인에서도 작동하며, 여기서 npm install단계 바로 전에 "명령"으로 실행합니다 .
Lukx

2
훌륭합니다! CI 환경을위한 훌륭한 솔루션! 나는 약간 수정해야했다. 나는에 끝을 변경했다...insteadOf ssh://git@github.com
스콧 Rippey

2
이것은 내 오후에 영향을 미치지 않는 것 같습니다. 실행할 때 여전히 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 요점을 바로 잡고 다른 사례의 예를 보여줍니다.
Renato Carvalho

안타깝게도 OP의 질문이 아닌 공개 저장소에 대한 간결한 답변. 아직도, 그것은 나를 도왔고 나는 그것을 감사했다.
runderworld

개인 리포지토리 케이스를 포함하도록 답변을 업데이트했습니다.
Adrian


7

Git curl이 후드 아래에서 사용하기 때문에 ~/.netrc자격 증명과 함께 파일을 사용할 수 있습니다 . GitHub의 경우 다음과 같이 보일 것입니다.

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

를 사용하도록 선택하면 다음 access tokens에서 생성 될 수 있습니다.

설정-> 개발자 설정-> 개인 액세스 토큰

자체 회사에서 Github Enterprise를 사용하는 경우에도 작동합니다. machine필드 에 엔터프라이즈 github url을 넣으십시오 .


나를 위해 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

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. # 커밋 샤 추가
  5. NPM 설치 실행

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.