npm ติดตั้งที่เก็บส่วนตัว github โดยพึ่งพาใน package.json


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 คือชื่อ / repo:

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

หรือ (ถ้ามีโมดูลแพ็กเกจ npm):

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

นำมาจากเอกสาร NPM


1
npm ข้อผิดพลาด! ไม่สามารถแก้ไข 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.Pretty ชัดเจนว่าcommit-ishเป็นเพียงคำตัวอย่างที่คุณควรแทนที่ด้วยการshaกระทำที่คุณต้องการ (หรือลบออก#commit-ishได้เลยหากคุณต้องการความมุ่งมั่นล่าสุดในสาขาหลักของคุณ)
ฉัน

91

การทำงานต่อไปนี้ใช้ได้ในทุกสถานการณ์ที่ฉันต้องการ:

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

1
คุณมีลิงค์อ้างอิงสำหรับโซลูชันนี้หรือไม่?
เอียน

3
@Ian: ฉันอ่านมันที่ไหนสักแห่ง แต่ไม่มีลิงค์อ้างอิง ฉันใช้มันในการผลิตมานานกว่าหนึ่งปีโดยไม่มีปัญหาใด ๆ คุณสามารถรับโทเค็น oauth จาก Github เป็น: การตั้งค่า -> แอปพลิเคชัน -> โทเค็นการเข้าถึงส่วนบุคคล -> สร้างโทเค็นใหม่ โทเค็นนี้สามารถอ่าน / เขียนหรือสิทธิพิเศษทั้งสองกรณีของคุณใช้
vashishatashu

6
@lan: สำหรับ bitbucket คุณสามารถใช้ไวยากรณ์ต่อไปนี้: git clone https: // <bitbucket-team-token>: x-oauth-basic@bitbucket.org/ <team> / <BitRepo> <bitbucket-team-token> สามารถ ได้มาจาก: ทีม -> จัดการทีม -> คีย์ API
vashishatashu

@ vashishatashu ขอบคุณสำหรับความคิดที่ดี อย่างไรก็ตามฉันได้รับ "fatal: blahblah not found" เมื่อลองสิ่งนี้แม้ว่าฉันจะให้สิทธิ์การเข้าถึงแก่ผู้ใช้ที่เป็นปัญหากับ repo ความคิดใด ๆ
ต่อ Lundberg

2
นี่เป็นบทความที่ดีเกี่ยวกับเทคนิคนี้: rzrsharp.net/2013/07/02/…
cyberwombat

75

สำหรับบรรดาของคุณที่มาที่นี่เพื่อหาไดเรกทอรีสาธารณะจากเอกสาร npm: https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Git URLs เป็น Dependencies

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

การกระทำ - ish สามารถแท็กใด ๆ , sha, หรือสาขาซึ่งสามารถจัดเป็นอาร์กิวเมนต์ในการชำระเงินคอมไพล์ ค่าเริ่มต้นคือต้นแบบ


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

ฉันได้พบมันที่อื่น ๆ เพียงแค่เรียกใช้คำสั่งนี้เพียงครั้งเดียวเป็นเอกสารใน manpage

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

GITHUB_TOKEN อาจตั้งค่าเป็นตัวแปร environmnet หรือวางโดยตรง

แล้วฉันจะติดตั้ง repos GitHub ส่วนตัวเช่น: npm install user/repo --save


ใช้ได้กับ Heroku เพียงตั้งค่าgit config ...คำสั่งด้านบนเป็นheroku-prebuildสคริปต์package.jsonและตั้งค่าGITHUB_TOKENเป็นตัวแปรการกำหนดค่าของHeroku


สิ่งนี้ยังใช้งานได้ใน Microsoft Visual Studio Team Services Build Chain ซึ่งฉันเรียกใช้งานเป็น "คำสั่ง" ก่อนหน้าnpm installขั้นตอน
Lukx

2
งดงาม! ทางออกที่ดีสำหรับสภาพแวดล้อม CI! ฉันต้องแก้ไขมันเล็กน้อย ฉันต้องเปลี่ยนท้ายเป็น...insteadOf ssh://git@github.com
Scott Rippey

2
ดูเหมือนจะไม่ส่งผลกระทบต่อ npm ของฉัน มันยังคงใช้ SSH npm install user/repo --saveเมื่อทำงาน มีสิ่งที่ฉันต้องกำหนดค่า?
Marco Prins

1
ทางออกที่ดีสำหรับสภาพแวดล้อม CI ที่การตั้งค่า SSH เป็นความเจ็บปวด (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 ใน บริษัท ของคุณเอง เพียงใส่ URL git ขององค์กรของคุณใน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. ตั้งค่า url ให้เขียนใหม่ใน ~ / .gitconfig
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. Ran npm ติดตั้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.