ดาวน์โหลดโฟลเดอร์หรือไดเรกทอรีเดียวจาก GitHub repo


1105

ฉันจะดาวน์โหลดเฉพาะโฟลเดอร์หรือไดเรกทอรีเฉพาะจาก repo Git ระยะไกลที่โฮสต์บน GitHub ได้อย่างไร

พูดตัวอย่าง GitHub repo อยู่ที่นี่:

git@github.com:foobar/Test.git

โครงสร้างไดเรกทอรี:

Test/
├── foo/ 
│   ├── a.py
│   └── b.py   
└── bar/
    ├── c.py
    └── d.py

ฉันต้องการดาวน์โหลดเฉพาะโฟลเดอร์fooและไม่คัดลอกโครงการทดสอบทั้งหมด


4
ฉันเขียนเชลล์สคริปต์สำหรับสิ่งนี้โดยใช้การชำระเงิน svn - github.com/Decad/github-downloader
Declan Cook

390
มีใครบางคนสามารถอธิบายให้ฉันฟังได้ว่าทำไมไม่มีโซลูชันเว็บอินเตอร์เฟส "เป็นทางการ" สำหรับเรื่องนี้ ดูเหมือนว่าเป็นคุณสมบัติที่น่าสนใจในการนำไปใช้ แต่มีประโยชน์มาก
Alexander - Reinstate Monica

3
ฉันพัฒนาส่วนขยายของ Chrome โดยใช้ gitzip ของ KinoLien github.com/charany1/GHSDD
charany1

3
เห็น @janos คำตอบ svn ทางเลือกที่ดีที่สุดไม่มีรับรองความถูกต้องไม่มีการลงทะเบียนไม่ จำกัด ไม่มีปลั๊กอิน
stackdave

5
ฉันทำโซลูชันที่มีน้ำหนักเบาสำหรับสิ่งนี้ ( download-directory.github.io ) และมันรวมอยู่ใน
Refit

คำตอบ:


1034

อัปเดตกันยายน 2559: มีเครื่องมือสองสามอย่างที่สร้างโดยชุมชนที่สามารถทำสิ่งนี้เพื่อคุณ:


Git ไม่สนับสนุนสิ่งนี้ แต่ Github ทำผ่าน SVN หากคุณชำระเงินโค้ดด้วยการโค่นล้ม Github จะแปลง repo จาก git เป็น subversion บนแบ็กเอนด์จากนั้นให้บริการไดเรกทอรีที่ร้องขอ

นี่คือวิธีที่คุณสามารถใช้คุณสมบัตินี้เพื่อดาวน์โหลดโฟลเดอร์เฉพาะ ฉันจะใช้ไลบรารี javascript ที่ได้รับความนิยมlodashเป็นตัวอย่าง

  1. นำทางไปยังโฟลเดอร์ที่คุณต้องการดาวน์โหลด มาดาวน์โหลด/testจากmasterสาขากัน ตัวอย่าง gitub repo URL

  2. แก้ไข URL สำหรับการโค่นล้ม แทนที่ด้วยtree/mastertrunk

    https://github.com/lodash/lodash/tree/master/test

    https://github.com/lodash/lodash/trunk/test

  3. ดาวน์โหลดโฟลเดอร์ ไปที่บรรทัดคำสั่งและคว้าโฟลเดอร์ด้วย SVN

svn checkout https://github.com/lodash/lodash/trunk/test

คุณอาจไม่เห็นกิจกรรมใด ๆ ในทันทีเนื่องจาก Github ใช้เวลาสูงสุด 30 วินาทีในการแปลงพื้นที่เก็บข้อมูลขนาดใหญ่ดังนั้นโปรดอดทนรอ

คำอธิบายรูปแบบ URL แบบเต็ม:

  • หากคุณสนใจmasterสาขาให้ใช้trunkแทน ดังนั้นเส้นทางเต็มคือtrunk/foldername
  • หากคุณสนใจfooสาขาให้ใช้branches/fooแทน เส้นทางแบบเต็มดูเหมือนว่าbranches/foo/foldername
  • Protip: คุณสามารถใช้svn lsเพื่อดูแท็กและสาขาที่มีอยู่ก่อนที่จะดาวน์โหลดหากคุณต้องการ

นั่นคือทั้งหมด! Github รองรับคุณสมบัติการโค่นล้มมากขึ้นเช่นกันรวมถึงการรองรับการกระทำและการผลักดันการเปลี่ยนแปลง


162
ยอดเยี่ยมเพียงแทนที่tree/masterด้วยtrunkและคุณจะได้รับโฟลเดอร์เฉพาะ
Sérgio Michels

6
ขอบคุณ @ user1146881 และ @ SérgioMichelsคุณต้องเปลี่ยนด้วยtree/master trunkควรเพิ่มข้อมูลนี้ในคำตอบ
baptx

8
ฉันแก้ไขสิ่งนี้เพื่อใช้svn exportเนื่องจากฉันไม่ต้องการให้สำเนาการทำงานของการโค่นล้ม จากนั้นฉันก็เพิ่มโฟลเดอร์ผลลัพธ์ใน Git (ฉันหายไปส่วนหนึ่งของต้นไม้ไดเรกทอรีของฉันดังนั้นฉันส่งออกจาก repo ที่ฉันแยก)
Grault

5
@ num3ric- ขออภัยที่มีการตอบกลับล่าช้า แต่คุณควรจะสามารถแทนที่ "trunk" ด้วย "branch / yourbranch"
nick

2
@ElijahLynn ขอบคุณสำหรับการแก้ไขฉันควรจะรวมข้อมูลนั้น! แม้ว่า 2 สิ่ง - ฉันยอมรับการแก้ไขของคุณ แต่ย้อนกลับบางส่วนของฉันเอง (หมายถึงทำสิ่งนี้ต่อไป นอกจากนี้ฉันเปลี่ยนbranchเส้นทางของคุณไปbranchesซึ่งฉันคิดว่าถูกต้อง; ถ้าไม่ไปก่อนและเปลี่ยนกลับ
กรงขัง

567

สองตัวเลือกสำหรับคุณสมบัตินี้:

ตัวเลือก 1: GitZip Browser Extension

Chrome Extension , Firefox Addon

การใช้งาน:

  1. ในหน้า repos GitHub ใด ๆ
  2. เพียงดับเบิลคลิกที่ส่วนที่ว่างของรายการที่คุณต้องการ
  3. คลิกปุ่มดาวน์โหลดที่ด้านล่างขวา
  4. ดูแผงควบคุมความคืบหน้าและรอการดาวน์โหลดทริกเกอร์ของเบราว์เซอร์
  5. รับไฟล์ ZIP

รับโทเค็น:

  1. คลิกที่ไอคอนส่วนต่อขยาย GitZip บนเบราว์เซอร์ของคุณ
  2. คลิกลิงก์ "ปกติ" หรือ "ส่วนตัว" นอกเหนือจาก "รับโทเค็น"
  3. ให้สิทธิ์ GitZip ในหน้า Github auth
  4. กลับไปที่หน้า repo ของจุดเริ่มต้น
  5. ใช้ต่อไป

ตัวเลือก 2: Github gh-page

http://kinolien.github.io/gitzipโดยใช้ GitHub API และ JSZip, FileSaver.js ไลบรารี

ขั้นที่ 1: ใส่ gitub URL ไปยังฟิลด์ที่มุมขวาบน
ขั้นที่ 2: กด Enter หรือคลิกดาวน์โหลดเพื่อดาวน์โหลด zip โดยตรงหรือคลิกค้นหาเพื่อดูรายการโฟลเดอร์ย่อยและไฟล์
ขั้นตอนที่ 3: คลิก "ดาวน์โหลดไฟล์ซิป" หรือ "รับไฟล์" เพื่อรับไฟล์

ในกรณีส่วนใหญ่จะทำงานได้ดียกเว้นว่าโฟลเดอร์นั้นมีไฟล์มากกว่า 1,000 ไฟล์เนื่องจากข้อ จำกัด Github Trees API (หมายถึงGithub API # เนื้อหา )

และมันยังสามารถรองรับ repos ส่วนตัว / สาธารณะและอัพเกรดขีด จำกัด อัตราหากคุณมีบัญชี GitHub และใช้ลิงก์ "รับโทเค็น" ในเว็บไซต์นี้


5
นี่มันยอดเยี่ยม แต่ดูเหมือนว่ามันยอดเยี่ยมมากความต้องการผลักคุณเข้าสู่ ratelimit ของคุณและมันไม่ทำงานอีกต่อไป ;-) มันจะเป็นการดีมากที่จะสามารถเข้าสู่ระบบด้วย GitHub oAuth - ซึ่งจะช่วยสนับสนุน repo ส่วนตัวและยังเพิ่มขึ้น ขีด จำกัด อัตราของคุณเนื่องจากคำขอดังกล่าวได้รับการตรวจสอบสิทธิ์แล้ว
hobailey

3
@hobailey ตอนนี้ก็สามารถเข้าถึงโทเค็นเพื่อเพิ่มขีด จำกัด อัตราและเข้าถึง repos ส่วนตัว
Kino

1
@MYounas ดูเกี่ยวกับ OAuth, Trees, Blobs chapters ในGithub API Doc และยังใช้ไลบรารี JSZip, FileSaver.js js สำหรับการปรับใช้ gitzip
Kino

1
ใครบ้างที่สนใจในส่วนขยายของโครเมี่ยมที่ทำสิ่งนี้?
goldylucks

4
สิ่งนี้จำเป็นต้องเพิ่มในเว็บไซต์ GitHub จริง ๆ มันมีประโยชน์มาก
ม้วน

508

ไปที่DownGit > ป้อน URL ของคุณ> ดาวน์โหลด!

ตอนนี้คุณสามารถดาวน์โหลดโดยตรงหรือสร้างลิงค์ดาวน์โหลดสำหรับไดเรกทอรีสาธารณะ GitHub หรือไฟล์ ( ไฟล์ขนาดใหญ่พิเศษ ) จากDownGit ! นี่คือการสาธิตง่ายๆ -


DownGit


นอกจากนี้คุณยังอาจกำหนดค่าไฟล์ที่ดาวน์โหลดของ property- การใช้งานรายละเอียด


2
ฉันหมายถึงวิธีการสร้างโครงการเช่น DownGit ที่คุณสร้างขึ้น
มูฮัมหมัดยุนุส

12
วิธีการพื้นฐานคือ - 1. ใช้ลิงค์ไดเรกทอรี (ใช้เส้นทางเชิงมุม ) 2. ไปที่GitHub API 3. ค้นหาผ่านไดเรกทอรีและดาวน์โหลดไฟล์ทั้งหมด 4. สร้างไฟล์ zip ด้วย (ฉันใช้jszip ) & บันทึกเป็นไฟล์ (ใช้โปรแกรมประหยัดไฟล์สำหรับสิ่งนี้) เพื่อความเข้าใจที่ชัดเจนผมจะแนะนำให้ไปดูในโครงการของฉัน
Minhas Kamal

1
ขอบคุณสำหรับคำแนะนำโดยละเอียด Bro ขอบคุณมากสำหรับคุณถ้าคุณแนะนำการกวดวิชาหรือลิงค์
มูฮัมหมัดยุนุส

5
มันเจ๋ง แต่ก็ใช้งานไม่ได้กับเครื่องมืออัตโนมัติ (เช่น wget)
แหวน

1
สิ่งนี้จะหยุดทำงานdownloaded 25 of 25 filesเมื่อฉันลองดาวน์โหลดจาก URL นี้: github.com/dssg/hitchhikers-guide/tree/master/curriculum/ …
Wassadamo

164

หากคุณมีsvnคุณสามารถใช้svn exportเพื่อทำสิ่งนี้:

svn export https://github.com/foobar/Test.git/trunk/foo

สังเกตรูปแบบ URL:

  • URL หลักคือ https://github.com/
  • /trunk ต่อท้าย

ก่อนที่คุณจะรันคุณsvn exportควรตรวจสอบเนื้อหาของไดเรกทอรีก่อนด้วย:

svn ls https://github.com/foobar/Test.git/trunk/foo

ยังใช้งานได้หรือไม่ พยายามทำสิ่งนี้กับ TortiseSVN และฉันได้รับข้อผิดพลาดในการขอให้ฉันส่งข้อมูลประจำตัว
john

2
@ John ฉันแน่ใจว่านี่จะสายเกินไปที่จะช่วยได้มาก แต่คุณเปิดใช้งานการตรวจสอบสิทธิ์แบบ 2 ปัจจัยในบัญชี GitHub ของคุณหรือไม่ ถ้าเป็นเช่นนั้นฉันคิดว่าฉันอ่านที่ไหนสักแห่งคุณจะต้องใช้รหัสที่สร้างไว้ล่วงหน้าสำหรับรหัสผ่าน (ซึ่งคุณจะต้องค้นหาในการตั้งค่า GitHub)
nick

1
เกี่ยวกับการจัดรูปแบบ URL คุณสามารถเก็บ.gitส่วนขยายได้ คุณสามารถใช้ลิงก์โปรเจ็กต์แบบเต็มและเริ่มต้นโดยใช้svn lsตามด้วยพา ธ โปรเจ็กต์แบบเต็ม ตัวอย่าง: svn ls https://github.com/RobTillaart/Arduino.git. เพื่อการส่งออกเพียงหนึ่งโฟลเดอร์คุณก็เพิ่มตามเส้นทางที่ต้องการเช่น/trunk svn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlibมันง่ายกว่าที่จะทำให้เส้นทางของโครงการไม่บุบสลาย
jgrocha

@jgrocha ฉันไม่แน่ใจว่ามันทำงานได้ในปี 2013 แต่ตอนนี้ก็ขอบคุณขอบคุณอัปเดตโพสต์
janos

1
ตัวอย่าง: การดาวน์โหลดเนื้อหาในวิ่งhttps://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgi svn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgiไดเรกทอรีที่เรียกว่าwsgiจะถูกสร้างขึ้นภายใต้ไดเรกทอรีการทำงานปัจจุบัน ไฟล์ต้นฉบับเท่านั้นไม่มีอะไรอื่น ไม่.gitไม่มีไฟล์ที่เกี่ยวข้องกับการโค่นล้ม
Rockallite

74

สำหรับ Repo คอมไพล์ทั่วไป:

git-archiveหากคุณต้องการดาวน์โหลดไฟล์ไม่ได้โคลนพื้นที่เก็บข้อมูลที่มีประวัติคุณสามารถทำเช่นนี้กับ

git-archiveสร้างไฟล์ zip หรือ tar ที่บีบอัดของที่เก็บ git บางสิ่งที่ทำให้มันพิเศษ:

  1. คุณสามารถเลือกไฟล์หรือไดเรกทอรีในที่เก็บ git เพื่อเก็บถาวร
  2. มันไม่ได้เก็บถาวร.git/โฟลเดอร์หรือไฟล์ที่ไม่ได้ติดตามในพื้นที่เก็บข้อมูลที่มันทำงานอยู่
  3. คุณสามารถเก็บถาวรสาขาแท็กหรือกระทำ โครงการที่จัดการด้วยคอมไพล์มักใช้สิ่งนี้เพื่อสร้างคลังเก็บของเวอร์ชันของโครงการ (เบต้ารีลีส 2.0 เป็นต้น) เพื่อให้ผู้ใช้ดาวน์โหลด

ตัวอย่างของการสร้างที่เก็บถาวรของdocs/usageไดเรกทอรีจาก repo ระยะไกลที่คุณเชื่อมต่อกับ ssh:

# in terminal
$ git archive --format tar --remote ssh://server.org/path/to/git HEAD docs/usage > /tmp/usage_docs.tar

ข้อมูลเพิ่มเติมในบล็อกโพสต์นี้และเอกสารประกอบคอมไพล์

หมายเหตุเกี่ยวกับ Repos GitHub:

GitHub ไม่อนุญาตให้มีgit-archiveการเข้าถึง ☹️


2
git archive --format tarรูปแบบไม่ใช่ tar.gz แต่เป็นรูปแบบ tar
出羽和之

นี่ควรเป็นคำตอบที่ดีที่สุด
เฟลิเป้คอส

2
ฉันคิดว่านี่เป็นคำตอบที่ดีที่สุด แต่โปรดทราบว่าคำสั่ง git archive ไม่สามารถใช้งานได้กับโปรโตคอล https
bitfox

@yukihane ส่วนขยายที่แก้ไขจาก tar.gz ไปยัง tar หวังว่า OP จะมาพร้อมกับสิ่งนี้
mihai

36

เราได้สร้างโครงการที่มาเปิดที่เรียกว่าGitHubFolderDownloader มันช่วยให้คุณสามารถดาวน์โหลดโฟลเดอร์เดียวของพื้นที่เก็บข้อมูลโดยไม่ต้องโคลนหรือดาวน์โหลดพื้นที่เก็บข้อมูลทั้งหมด


ใช้งานได้ดีถ้าคุณต้องการดาวน์โหลดโฟลเดอร์จาก GitHub เท่านั้น ต้องการเพียงGithub Tokenในการดาวน์โหลดโฟลเดอร์ที่ต้องการ upvotes เพิ่มเติมสามารถให้คำตอบนี้มีชื่อเสียงบางอย่าง
Alex Essilfie

34

ไม่มีอะไรผิดปกติกับคำตอบอื่น ๆ แต่ฉันคิดว่าฉันจะแบ่งปันคำแนะนำทีละขั้นตอนสำหรับผู้ที่หลงทางผ่านกระบวนการนี้เป็นครั้งแรก

วิธีดาวน์โหลดโฟลเดอร์เดียวจากที่เก็บ github (Mac OS X):

~ หากต้องการเปิด Terminal ให้คลิกสปอตไลท์แล้วพิมพ์เทอร์มินัลแล้วกด Enter

  1. สำหรับ Mac คุณมี SVN อยู่แล้ว (เพื่อทดสอบเพียงเทอร์มินัลเปิดและพิมพ์"svn"หรือ"svn ที่" ~ โดยไม่มีเครื่องหมายคำพูด)
  2. ใน Github: ค้นหาเส้นทาง Github ไปยังโฟลเดอร์ git ของคุณ (ไม่ใช่ repo) โดยคลิกที่ชื่อโฟลเดอร์เฉพาะภายใน repo
  3. คัดลอกเส้นทางจากแถบที่อยู่ของเบราว์เซอร์
  4. เปิด Terminalและพิมพ์: svn export
  5. วางในที่อยู่ถัดไป (เช่น): https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
  6. แทนที่คำ: tree / master
  7. ด้วยคำว่า: ลำต้น
  8. พิมพ์ในโฟลเดอร์ปลายทางสำหรับไฟล์ (ในตัวอย่างนี้ฉันเก็บโฟลเดอร์เป้าหมายไว้ภายในโฟลเดอร์ดาวน์โหลดสำหรับผู้ใช้ปัจจุบัน)
  9. ที่นี่ space เป็นเพียง spacebar ไม่ใช่คำว่า(space) ~ / Downloads / HeadsUpUI
  10. คำสั่งเทอร์มินัลสุดท้ายแสดงคำสั่งแบบเต็มเพื่อดาวน์โหลดโฟลเดอร์ (เปรียบเทียบที่อยู่กับขั้นตอนที่ 5) การส่งออก svn https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~ / Downloads / HeadsUpUI

BTW - หากคุณใช้ Windows หรือแพลตฟอร์มอื่นคุณสามารถค้นหาการดาวน์โหลด subversion (svn) แบบไบนารีได้ที่http://subversion.apache.org

~ หากคุณต้องการชำระเงินโฟลเดอร์มากกว่าเพียงดาวน์โหลดลองใช้ svn help (tldr: แทนที่การส่งออกด้วยการชำระเงิน )

ปรับปรุง

เกี่ยวกับความคิดเห็นเกี่ยวกับการดำเนินการดาวน์โหลด / เช็คเอาต์ต่อไป ผมจะพยายามทำงานตามsvn cleanup svn updateโปรดค้นหา SO เพื่อหาตัวเลือกเพิ่มเติม


1
ฉันต้องดาวน์โหลดไฟล์จำนวนมากจากโฟลเดอร์เฉพาะและได้รับข้อผิดพลาดนี้ในระหว่างการดาวน์โหลด: svn: E175002: รายงานของ '/ bgmartins / สคริปต์-parlamento /! svn / vcc / default': 200 OK ( github.com ) คุณจะเริ่มการดาวน์โหลดต่อได้อย่างไร
Miguel

ทำงานให้ฉัน ที่น่าตื่นตาตื่นใจ.
Heath Raftery

24

ใครก็ตามที่ทำงานกับโฟลเดอร์เฉพาะเขาต้องทำการโคลนโฟลเดอร์นั้นเองโดยทำตามขั้นตอนด้านล่างโดยใช้การชำระเงินแบบเบาบาง

  1. สร้างไดเรกทอรี

  2. เริ่มต้นพื้นที่เก็บข้อมูล Git ( git init)

  3. เปิดใช้งาน Sparse Checkouts ( git config core.sparsecheckout true)

  4. บอก Git ว่าต้องการไดเรกทอรีใดบ้าง (echo 2015 / brand / May (อ้างถึงโฟลเดอร์ที่คุณต้องการทำงาน) >> .git/info/sparse-checkout)

  5. เพิ่มรีโมท ( git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git)

  6. ดึงไฟล์ ( git pull origin master)


น่าเสียดายที่ความคิดเห็นนี้ไม่ได้รับการโหวตมากพอ ดูเหมือนว่าโซลูชันที่มีให้ใช้กับที่เก็บ git ทั้งหมดไม่ใช่แค่ git gub เดียว
Kalyan

9
แต่นี่ไม่ได้ทำสิ่งที่ต้องการจริงๆ มันยังคงโคลนที่เก็บทั้งหมดมันไม่ได้ตรวจสอบบางโฟลเดอร์
Chris

แก้ไขที่นี่: stackoverflow.com/questions/4114887/…
JK

ฉันได้รับข้อผิดพลาดนี้: การชำระเงินแบบเบาบางทำให้ไม่มีรายการในไดเรกทอรีทำงาน
orangecaterpillar

20

คุณไม่สามารถ; แตกต่างจากการโค่นล้มที่แต่ละไดเรกทอรีย่อยสามารถตรวจสอบออกเป็นรายบุคคล Git ดำเนินการทั้งพื้นที่เก็บข้อมูล

สำหรับโครงการที่จำเป็นต้องใช้การเข้าถึงแบบละเอียดยิ่งขึ้นคุณสามารถใช้ submodules - แต่ละ submodule เป็นโครงการ Git ที่แยกต่างหากและสามารถโคลนแต่ละรายการได้

เป็นไปได้ว่าส่วนต่อหน้าของ Git (เช่นเว็บอินเตอร์เฟสของ GitHub หรือ gitweb) สามารถเลือกที่จะให้ส่วนต่อประสานสำหรับคุณในการแยกโฟลเดอร์ที่กำหนด แต่สำหรับความรู้ของฉันไม่มีพวกเขาทำ (แม้ว่าพวกเขาจะอนุญาตให้คุณดาวน์โหลดไฟล์แต่ละไฟล์ ดังนั้นหากโฟลเดอร์ไม่มีไฟล์มากเกินไปนั่นคือตัวเลือก)

แก้ไข - GitHub เสนอการเข้าถึงผ่านทาง SVN ซึ่งจะช่วยให้คุณทำเช่นนี้ (ตามความคิดเห็น) ดูhttps://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-awayสำหรับคำแนะนำล่าสุดเกี่ยวกับวิธีการทำสิ่งนี้


มีสิ่งใดบ้างผ่าน github API หรือไม่
g_inherit

14

หากคุณเพียงแค่ต้องการ"ดาวน์โหลด"โฟลเดอร์และไม่ใช่"โคลน"มัน (เพื่อการพัฒนา) วิธีที่ง่ายที่สุดในการรับสำเนาของพื้นที่เก็บข้อมูลรุ่นล่าสุด (ดังนั้นจึงมีโฟลเดอร์ / ไฟล์อยู่ภายใน) โดยไม่จำเป็นต้องลอกแบบ repo ทั้งหมดหรือแม้แต่ติดตั้ง git ตั้งแต่แรกก็คือการดาวน์โหลดไฟล์ zip (สำหรับ repo, fork, branch, commit ฯลฯ ) โดยไปที่ repository / fork / branch / commit บน GitHub ที่ต้องการ (เช่นhttp(s)://github.com/<user>/<repo>/commit/<Sha1>สำหรับการคัดลอกไฟล์เหมือนเดิมหลังจากการคอมมิทเฉพาะ) และเลือกDownloadsปุ่มใกล้ด้านบนขวา

รูปแบบการเก็บถาวรนี้ไม่มีวิเศษ git-repo เพียงไฟล์ที่ติดตามด้วยตนเอง (และอาจเป็นไฟล์. gitignore สองสามไฟล์หากถูกติดตาม แต่คุณสามารถเพิกเฉยได้: p) - นั่นหมายความว่าหากรหัสเปลี่ยนแปลงและคุณต้องการ อยู่ด้านบนคุณจะต้องดาวน์โหลดใหม่ด้วยตนเองและหมายความว่าคุณจะไม่สามารถใช้เป็นที่เก็บ git ...

ไม่แน่ใจว่าเป็นสิ่งที่คุณกำลังมองหาในกรณีนี้ (อีกครั้ง "ดาวน์โหลด" / ดู vs "โคลน" / พัฒนา) แต่อาจมีประโยชน์อย่างไรก็ตาม


9
หากคุณไม่เห็นลิงค์ดาวน์โหลดตรวจสอบให้แน่ใจว่าคุณอยู่ในหน้า repo หลัก (ไม่ใช่ไดเรกทอรีย่อย) ดูเหมือนว่าคุณสามารถดาวน์โหลด zip ของ repo ทั้งหมดได้ นอกจากนี้นี้หน้าความช่วยเหลือ GitHub นี้อาจมีประโยชน์
JD Smith

2
เข้าถึงจุดและคลิกง่าย ง่ายต่อการได้รับการปล่อยตัวก่อน ดึงโฟลเดอร์ที่ต้องการออกจากซิปที่ดาวน์โหลดได้ง่าย ขอบคุณ.
แอนดี้โทมัส

1
URL ทั่วไปเพื่อดาวน์โหลดจากในtar.gz:https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
Krisztian

11

สรุป 2019

มีหลายวิธีในการจัดการสิ่งนี้ขึ้นอยู่กับว่าคุณต้องการทำสิ่งนี้ด้วยตนเองหรือโดยทางโปรแกรม

มีสี่ตัวเลือกสรุปไว้ด้านล่าง และสำหรับผู้ที่ต้องการขึ้นมือในการอธิบายฉันได้ใส่กันวิดีโอ YouTube: ดาวน์โหลดไฟล์แต่ละไฟล์และโฟลเดอร์จาก GitHub

นอกจากนี้ฉันยังโพสต์คำตอบที่คล้ายกันใน StackOverflowสำหรับผู้ที่ต้องการดาวน์โหลดไฟล์เดียวจาก GitHub (ตรงข้ามกับโฟลเดอร์)


1. ส่วนต่อประสานผู้ใช้ GitHub

  • มีปุ่มดาวน์โหลดที่หน้าแรกของพื้นที่เก็บข้อมูล แน่นอนว่านี่เป็นการดาวน์โหลด repo ทั้งหมดหลังจากนั้นคุณจะต้องแตกไฟล์ที่ดาวน์โหลดแล้วลากโฟลเดอร์เฉพาะที่คุณต้องการด้วยตนเอง

2. เครื่องมือของบุคคลที่สาม

  • มีส่วนขยายเบราว์เซอร์และเว็บแอปที่หลากหลายซึ่งสามารถจัดการได้ด้วย DownGitเป็นหนึ่งในนั้น เพียงวาง URL GitHub ลงในโฟลเดอร์ (เช่นhttps://github.com/babel/babel-eslint/tree/master/lib) และกดปุ่ม "ดาวน์โหลด"

3. การโค่นล้ม

  • GitHub ไม่สนับสนุนการเก็บถาวร git (คุณลักษณะ git ที่จะอนุญาตให้เราดาวน์โหลดโฟลเดอร์เฉพาะ) อย่างไรก็ตาม GitHub สนับสนุนคุณสมบัติการโค่นล้มที่หลากหลายซึ่งหนึ่งในนั้นเราสามารถใช้เพื่อจุดประสงค์นี้ การโค่นล้มเป็นระบบควบคุมเวอร์ชัน (ทางเลือกแทน git) คุณจะต้องติดตั้งการโค่นล้ม หยิบ URL GitHub สำหรับโฟลเดอร์ที่คุณต้องการดาวน์โหลด อย่างไรก็ตามคุณจะต้องแก้ไข URL นี้ คุณต้องการลิงก์ไปยังที่เก็บตามด้วยคำว่า "trunk" และลงท้ายด้วยพา ธ ไปยังโฟลเดอร์ที่ซ้อนกัน กล่าวอีกนัยหนึ่งโดยใช้ตัวอย่างการเชื่อมโยงโฟลเดอร์เดียวกันที่ฉันกล่าวถึงข้างต้นเราจะแทนที่ "tree / master" ด้วย "trunk" ในที่สุดเปิดเทอร์มินัลนำทางไปยังไดเรกทอรีที่คุณต้องการดาวน์โหลดเนื้อหาพิมพ์คำสั่งต่อไปนี้ (แทนที่ URL ด้วย URL ที่คุณสร้างขึ้น):svn export https://github.com/babel/babel-eslint/trunk/libและกด Enter

4. GitHub API

  • นี่คือวิธีการแก้ปัญหาที่คุณต้องการหากคุณต้องการทำงานนี้ให้เป็นโปรแกรม และนี่คือสิ่งที่ DownGit ใช้ภายใต้ประทุน ใช้REST API ของ GitHubเขียนสคริปต์ที่ทำคำขอ GET ไปยังจุดสิ้นสุดของเนื้อหา จุดสิ้นสุดสามารถสร้างได้ดังนี้: https://api.github.com/repos/:owner/:repo/contents/:path. หลังจากแทนที่ตัวยึดตำแหน่งจุดสิ้นสุดตัวอย่างคือ:https://api.github.com/repos/babel/babel-eslint/contents/lib. สิ่งนี้จะให้ข้อมูล JSON ของคุณสำหรับเนื้อหาทั้งหมดที่มีอยู่ในโฟลเดอร์นั้น ข้อมูลมีทุกสิ่งที่คุณต้องการรวมถึงว่าเนื้อหานั้นเป็นโฟลเดอร์หรือไฟล์ URL ดาวน์โหลดถ้าเป็นไฟล์และจุดสิ้นสุด API หากเป็นโฟลเดอร์ (เพื่อให้คุณสามารถรับข้อมูลสำหรับโฟลเดอร์นั้น) เมื่อใช้ข้อมูลนี้สคริปต์จะสามารถอ่านเนื้อหาทั้งหมดในโฟลเดอร์เป้าหมายซ้ำสร้างโฟลเดอร์สำหรับโฟลเดอร์ที่ซ้อนกันและดาวน์โหลดไฟล์ทั้งหมดสำหรับแต่ละโฟลเดอร์ ตรวจสอบรหัสของ DownGitเพื่อหาแรงบันดาลใจ

9

อีกตัวอย่างที่เฉพาะเจาะจง:

เช่นฉันต้องการดาวน์โหลดโฟลเดอร์ 'iOS Pro Geo' จาก URL

https://github.com/alokc83/APRESS-Books-Source-Code-/ ต้นไม้ / มาสเตอร์ /% 20Pro% 20iOS% 20Geo

และฉันสามารถทำได้ผ่านทาง

svn checkout https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo

บันทึกเส้นทางในเส้นทาง

แก้ไข: (ตามความคิดเห็นของ Tommie C)

ใช่การใช้การส่งออก แทนการชำระเงินจะให้สำเนาที่สะอาดโดยไม่มีไฟล์เก็บข้อมูล git เพิ่มเติม

svn export https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo

แก้ไข:หากต้นไม้ / ต้นแบบไม่ได้อยู่ใน url ให้แยกมันและมันจะอยู่ใน forked url


2
เพียงแค่ต้องเปลี่ยนเช็กเอาต์เพื่อส่งออกหากคุณเพียงต้องการดาวน์โหลดสำเนาของโฟลเดอร์แทนที่จะเป็นเช็กเอาต์
Tommie C.

ขอบคุณสำหรับคำตอบของคุณเราสามารถดำน้ำสาขาได้หรือไม่? สมมติว่าฉันต้องการดาวน์โหลดโฟลเดอร์ aaa ของ feature1 สาขา
hsafarya

7

มีแพ็คเกจ pip Python3 ที่เรียกgithubdlว่าทำได้ *:

export GIT_TOKEN=1234567890123456789012345678901234567890123
pip install githubdl
githubdl -u http://github.com/foobar/test -d foo

หน้าโครงการอยู่ที่นี่

* ข้อจำกัดความรับผิดชอบ: ฉันเขียนแพ็คเกจนี้


6

เป็นหนึ่งในไม่กี่แห่งที่ SVN ดีกว่า Git

ในท้ายที่สุดเราได้มุ่งสู่สามทางเลือก:

  1. ใช้ wget เพื่อดึงข้อมูลจาก GitHub (ใช้มุมมองไฟล์ดิบ)
  2. ให้โครงการต้นน้ำเผยแพร่ชุดข้อมูลที่ต้องการเป็นส่วนสร้าง
  3. ยอมแพ้และใช้การชำระเงินเต็ม เป็นที่นิยมอย่างมากในงานสร้างครั้งแรก แต่ถ้าคุณไม่ได้รับปริมาณการใช้งานมากนัก

4
ก็น้อยกว่า Git กับการโค่นล้มและอีกมากที่การแบน GitHub ไม่อนุญาตให้เก็บถาวร Git (ฉันชอบที่จะรู้ว่าทำไม)
Rob Howard

6

หากคุณพอใจกับคำสั่ง unix คุณไม่ต้องการการพึ่งพาพิเศษหรือแอปพลิเคชันเว็บสำหรับเรื่องนี้ คุณสามารถดาวน์โหลด repo เป็น tarball และ untar สิ่งที่คุณต้องการเท่านั้น

ตัวอย่าง (ไฟล์ woff2 จากไดเรกทอรีย่อยใน fontawesome):

curl -L https://api.github.com/repos/FortAwesome/Font-Awesome/tarball | tar xz --wildcards "*/web-fonts-with-css/webfonts/*.woff2" --strip-components=3
  • เพิ่มเติมเกี่ยวกับรูปแบบลิงก์: https://developer.github.com/v3/repos/contents/#get-archive-link (รวมถึงวิธีรับไฟล์ซิปหรือสาขา / ผู้อ้างอิงที่เฉพาะเจาะจง)
  • เก็บส่วนเริ่มต้นของเส้นทาง ( */) เพื่อให้ตรงกับไดเรกทอรีใด ๆ Github สร้างไดเร็กตอรี่ wrapper ที่มีคอมมิทอ้างอิงในชื่อ, จึงไม่สามารถรู้ได้.
  • คุณอาจต้องการ--strip-componentsให้เท่ากับจำนวนของเครื่องหมายทับ ( /) ในเส้นทาง (อาร์กิวเมนต์ก่อนหน้า)

นี่จะดาวน์โหลด tarball ทั้งหมด ใช้วิธีการ SVN ที่ระบุไว้ในคำตอบอื่น ๆ หากต้องหลีกเลี่ยงหรือถ้าคุณต้องการที่จะทำดีกับเซิร์ฟเวอร์ GitHub


5

คุณสามารถทำการดาวน์โหลดแผนผังไดเร็กตอรี่ได้ง่ายๆ:

git archive --remote git@github.com:foobar/Test.git HEAD:foo | tar xf -

แต่ถ้าคุณตั้งใจที่จะตรวจสอบและสามารถที่จะกระทำและผลักพวกเขากลับมาคุณไม่สามารถทำเช่นนั้นได้


1
คำสั่งไม่ถูกต้อง: 'git-upload-archive' foobar / Test.git '' ดูเหมือนว่าคุณกำลังใช้ ssh เพื่อโคลน git: // URL ตรวจสอบให้แน่ใจว่าตัวเลือกการกำหนดค่า core.gitProxy ของคุณและตัวแปรสภาพแวดล้อม GIT_PROXY_COMMAND ไม่ได้ถูกตั้งค่า ร้ายแรง: ปลายระยะไกลวางสาย tar โดยไม่คาดคิด: สิ่งนี้ดูไม่เหมือน tar เก็บถาวร tar: การออกจากสถานะความล้มเหลวเนื่องจากข้อผิดพลาดก่อนหน้านี้
g_inherit

@g_inherit ฉันสามารถทำซ้ำปัญหานี้ได้ แม้ว่านี่อาจเป็นทิศทางที่ถูกต้อง แต่คำตอบนี้ไม่ถูกต้อง
Uli Köhler

แม้จะมีการลงมติมากมายนี่เป็นคำแนะนำเดียวที่เหมาะกับฉัน
bhaskarc

5

เพียงเพื่อขยายคำตอบข้างต้นตัวอย่างจริงจากพื้นที่เก็บข้อมูล GitHub จริงไปยังไดเรกทอรีท้องถิ่นจะเป็น:

svn ls https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces

svn export https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces  /temp/SvnExport/Washburn

บางครั้งตัวอย่างที่เป็นรูปธรรมจะช่วยชี้แจงการทดแทนที่เสนอ


5

ไม่มีคำตอบที่ช่วยในสถานการณ์ของฉัน หากคุณกำลังพัฒนาสำหรับ Windows คุณอาจไม่มี svn ในหลาย ๆ สถานการณ์ผู้ใช้ไม่สามารถวางใจได้ว่าจะต้องติดตั้ง Git หรือไม่ต้องการดาวน์โหลดที่เก็บทั้งหมดด้วยเหตุผลอื่น บางคนที่ตอบคำถามนี้เช่น Willem van Ketwich และ aztack ได้สร้างเครื่องมือเพื่อทำงานนี้ให้สำเร็จ อย่างไรก็ตามหากเครื่องมือไม่ได้ถูกเขียนขึ้นสำหรับภาษาที่คุณใช้หรือคุณไม่ต้องการติดตั้งไลบรารีบุคคลที่สามสิ่งเหล่านี้จะไม่ทำงาน

อย่างไรก็ตามมีวิธีที่ง่ายกว่ามาก GitHub มี API ที่ช่วยให้คุณดาวน์โหลดไฟล์เดียวหรือเนื้อหาสารบบทั้งหมดฯใช้รับคำขอ คุณสามารถเข้าถึงไดเรกทอรีโดยใช้https://api.github.com/repos/:owner/:repo_name/contents/:pathที่ส่งคืนวัตถุ JSON ระบุไฟล์ทั้งหมดในไดเรกทอรี รวมอยู่ในการแจงนับเป็นลิงค์ไปยังเนื้อหาดิบของไฟล์,download_urlพารามิเตอร์ สามารถดาวน์โหลดไฟล์โดยใช้ URL นั้น

เป็นกระบวนการสองขั้นตอนที่ต้องใช้ความสามารถในการส่งคำขอ GET แต่สามารถดำเนินการได้ในทุกภาษาในทุกแพลตฟอร์ม มันสามารถใช้ในการรับไฟล์หรือไดเรกทอรี


4

ทีมของเราเขียนสคริปต์ทุบตีเพื่อทำสิ่งนี้เพราะเราไม่ต้องการติดตั้ง SVN บนเซิร์ฟเวอร์กระดูกของเรา

https://github.com/ojbc/docker/blob/master/java8-karaf3/files/git-download.sh

มันใช้ github API และสามารถเรียกใช้จากบรรทัดคำสั่งดังนี้:

git-download.sh https://api.github.com/repos/ojbc/main/contents/shared/ojb-certs

4

ฉันใช้ลินุกซ์วางไว้ใน ~ / .bashrc เรียกว่า: D $ HOME / .bashrc

git-dowloadfolder(){
a="$1"
svn checkout ${a/tree\/master/trunk}

}

จากนั้นรีเฟรชเชลล์ด้วย

source ~/.bashrc 

จากนั้นใช้กับ git-downloadfolder blablabla: D


3

ฉันทำงานกับเซิร์ฟเวอร์ CentOS 7 ซึ่งฉันไม่สามารถเข้าถึงรูทหรือ git, svn ฯลฯ (หรือไม่ต้องการ!) ดังนั้นจึงสร้างสคริปต์ไพ ธ อนเพื่อดาวน์โหลดโฟลเดอร์ github ใด ๆ : https://github.com/andrrrl/github -folder-ดาวน์โหลด

การใช้งานง่ายเพียงแค่คัดลอกส่วนที่เกี่ยวข้องจากโครงการ github สมมติว่าโครงการคือhttps://github.com/MaxCDN/php-maxcdn/และคุณต้องการโฟลเดอร์ที่มีไฟล์ต้นฉบับบางไฟล์เท่านั้นคุณต้อง ทำสิ่งที่ชอบ:

$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/
(จะสร้างโฟลเดอร์เป้าหมายหากไม่มีอยู่)

ต้องใช้ไลบรารีlxmlสามารถติดตั้งได้easy_install lxml
หากคุณไม่มีสิทธิ์เข้าถึงรูท (เช่นฉัน) คุณสามารถสร้าง.pydistutils.pyไฟล์ลงใน$HOMEdir ของคุณด้วยเนื้อหาเหล่านี้: [install] user=1 และeasy_install lxmlจะใช้งานได้ (อ้างอิง: https://stackoverflow.com/a/ 33464597/591257 )


3

เพียง 5 ขั้นตอนในการไป

1) ดาวน์โหลดSVNจากที่นี่
2) เปิดCMDและไปที่ไดเรกทอรีถัง SVNดังนี้:

cd %ProgramFiles%\SlikSvn\bin

3) สมมุติว่าฉันต้องการดาวน์โหลดไดเรกทอรีนี้URL 4) แทนที่ ด้วย 5) ตอนนี้ใช้คำสั่งสุดท้ายนี้เพื่อดาวน์โหลดโฟลเดอร์ในไดเรกทอรีเดียวกัน
https://github.com/ZeBobo5/Vlc.DotNet/tree/develop/src/Samples

tree/develop
or
tree/master
trunk

svn export https://github.com/ZeBobo5/Vlc.DotNet/trunk/src/Samples


ดูเหมือนจะไม่ทำงานกับ repos ส่วนตัว
Sundeep Pidugu

ใช่มันจะไม่ทำงานสำหรับ Respos ส่วนตัว GIT แนะนำให้ดาวน์โหลด Respo ส่วนตัว
มูฮัมหมัดอาลี

2

หากต้องการส่งออกไดเรกทอรีจาก GitHub ให้แทนที่ "/ tree / master /" ใน URL ของไดเรกทอรีด้วย "/ trunk /"

ตัวอย่างเช่นในการส่งออกไดเรกทอรีจาก URL ต่อไปนี้:

https://github.com/liferay/liferay-plugins/tree/master/portlets/sample-hibernate-portlet

เรียกใช้คำสั่งต่อไปนี้:

svn export https://github.com/liferay/liferay-plugins/trunk/portlets/sample-hibernate-portlet

2

คำตอบที่ตรงไปตรงมานี้คือเต่าแรก svn จากลิงค์ต่อไปนี้

https://tortoisesvn.net/downloads.html

ในขณะที่การติดตั้งเปิดตัวเลือก CLI เพื่อให้สามารถใช้งานได้จากอินเตอร์เฟสบรรทัดคำสั่ง

คัดลอกลิงค์ไดเรกทอรีย่อยฮับ git

ตัวอย่าง

https://github.com/tensorflow/models/tree/master/research/deeplab

แทนที่ tree / master ด้วย trunk

https://github.com/tensorflow/models/trunk/research/deeplab

และทำ

svn ชำระเงินhttps://github.com/tensorflow/models/trunk/research/deeplab

ไฟล์จะถูกดาวน์โหลดไปยังโฟลเดอร์ deeplab ในไดเรกทอรีปัจจุบัน


2

คุณสามารถใช้ git svn ในวิธีต่อไปนี้

git svn clone https://github.com/lodash/lodash/trunk/test

วิธีนี้คุณไม่ต้องผ่านความเจ็บปวดในการตั้งค่า svn โดยเฉพาะสำหรับผู้ใช้ Windows


ขอบคุณ. ฉันสามารถรับรองว่าใช้ได้กับ Windows ไม่ทำงานบน gcloud มันบอกว่าคอมไพล์: 'svn' ไม่ใช่คำสั่ง
JOSEPH Blessingh

sudo apt install git-svnจำเป็นเมื่อเรียกใช้ผ่าน WSL
Jammy Dodger

1

หากคุณต้องการทำมันแบบเป็นโปรแกรมและคุณไม่ต้องการพึ่ง SVN คุณสามารถใช้ GitHub API เพื่อดาวน์โหลดเนื้อหาทั้งหมดซ้ำ ๆ

สำหรับแรงบันดาลใจนี่คือส่วนสำคัญของทับทิมของฉัน: https://gist.github.com/cvengros/b2a7e82f66519d423b6f


1

ใช้ฟังก์ชั่นนี้อาร์กิวเมนต์แรกคือ URL ไปยังโฟลเดอร์ที่สองคือตำแหน่งที่โฟลเดอร์จะถูกดาวน์โหลดไปที่:

function github-dir() {
    svn export "$(sed 's/tree\/master/trunk/' <<< "$1")" "$2"  
}

1

git clone --filter จาก Git 2.19

ตัวเลือกนี้จะข้ามการดึงข้อมูลวัตถุที่ไม่ต้องการจากเซิร์ฟเวอร์:

git clone --depth 1 --no-checkout --filter=blob:none \
  "file://$(pwd)/server_repo" local_repo
cd local_repo
git checkout master -- mydir/

เซิร์ฟเวอร์ควรกำหนดค่าด้วย:

git config --local uploadpack.allowfilter 1
git config --local uploadpack.allowanysha1inwant 1

มีการขยายส่วนขยายไปยังโปรโตคอลระยะไกล Git เพื่อสนับสนุนคุณสมบัตินี้ใน v2.19.0 แต่ไม่มีการสนับสนุนเซิร์ฟเวอร์ในเวลานั้น แต่สามารถทดสอบในพื้นที่ได้แล้ว

ฉันได้กล่าวถึงรายละเอียดเพิ่มเติมที่: ฉันจะโคลนไดเรกทอรีย่อยของที่เก็บ Git ได้อย่างไร


1
ที่น่าสนใจและ upvoted ฉันคิดว่าฉันต้องกล่าวถึงคุณสมบัติ 2.19 ที่อื่น
VonC

@VonC ฉันคิดว่าฉันเอาชนะคุณได้ในครั้งนี้: stackoverflow.com/questions/2466735/…และฉันดูมันหลังจากการเปิดตัว XD เท่านั้น! ฉันเป็นแน่นอน Googling วันนี้เล็กน้อยหลังจากรุ่น 2.22 คำตอบทั้งหมดได้รับการอัปเดตแน่นอนแล้ว ;-) มันไม่เคยหยุดที่จะทำให้ฉันรำคาญว่ามีอีกครึ่งซ้ายซ้ำกันเสมอและฉันท้ายพบว่าหนึ่งปีต่อมาด้วย แบบสอบถามที่แตกต่างกันเล็กน้อย ฉันไม่ได้ตั้งใจจะเอาชนะคุณในคอมไพล์ยากเกินไป แต่จับตาดูหมอผีนับ! ฮ่าฮ่า
Ciro Santilli 冠状病毒审查六四事件法轮功

ติดตามการทำงานที่ดีต่อไป: ชุมชนทั้งหมดจะได้รับประโยชน์จากการแข่งขันด้านเล็ก ๆ นี้ (และฉันได้ตอบคำตอบอื่น ๆ ของคุณในเวลานั้น)
VonC

@VonC ล้อเล่นแน่นอนฉัน upvote สิ่งที่คุณเห็นได้ชัดเช่นกัน ฉันแค่ต้องหาวิธีที่จะแลกคะแนนเหล่านั้นเป็นเงินตอนนี้ XD
Ciro Santilli 法轮功病毒审查审查六四事件法轮功

1

ไม่ว่าจะด้วยเหตุผลใดsvnวิธีแก้ปัญหาใช้ไม่ได้สำหรับฉันและเนื่องจากฉันไม่ต้องการsvnสิ่งใดเลยมันจึงไม่สมเหตุสมผลที่จะใช้เวลาพยายามทำมันดังนั้นฉันจึงหาวิธีแก้ปัญหาง่ายๆโดยใช้เครื่องมือที่ฉันมีอยู่แล้ว สคริปต์นี้จะใช้เฉพาะcurlและawkการดาวน์โหลดไฟล์ทั้งหมดในไดเรกทอรี GitHub "/:user:repo/contents/:path"อธิบายว่า

เนื้อความที่คืนมาของการเรียกไปยัง"GET /repos/:user:repo/contents/:path"คำสั่งGitHub REST API จะส่งคืนวัตถุที่มี"download_url"ลิงก์สำหรับแต่ละไฟล์ในไดเรกทอรี

สคริปต์บรรทัดคำสั่งนี้เรียกว่า REST API ใช้curlและส่งผลลัพธ์ผ่าน AWK ซึ่งกรองออกทั้งหมดยกเว้นบรรทัด "download_url" ลบเครื่องหมายคำพูดและเครื่องหมายจุลภาคจากลิงก์จากนั้นดาวน์โหลดลิงก์โดยใช้การเรียกอีกครั้งเพื่อให้ขด

curl -s https://api.github.com/repos/:user/:repo/contents/:path | awk \
     '/download_url/ { gsub("\"|,", "", $2); system("curl -O "$2"); }'

1

git sparse-checkout

Git 2.25.0รวมถึงgit sparse-checkoutคำสั่งทดสอบใหม่ที่ทำให้คุณสมบัติที่มีอยู่ใช้งานง่ายขึ้นพร้อมกับประโยชน์ด้านประสิทธิภาพที่สำคัญสำหรับที่เก็บขนาดใหญ่ ( บล็อก GitHub )

ตัวอย่างกับรุ่นปัจจุบัน :

git clone --filter=blob:none --sparse https://github.com/git/git.git
cd git
git sparse-checkout init --cone
git sparse-checkout add t

ที่สะดุดตาที่สุด

  • --sparseเช็กเอาต์ไฟล์ไดเร็กทอรีระดับบนสุดของที่gitเก็บลงในสำเนาการทำงาน
  • git sparse-checkout add tเพิ่ม / ตรวจสอบtโฟลเดอร์ย่อยของgit

องค์ประกอบอื่น ๆ

  • git sparse-checkout init เตรียมการบางอย่างเพื่อเปิดใช้งานการชำระเงินบางส่วน
  • --filter=blob:noneเพิ่มประสิทธิภาพการดึงข้อมูลโดยการดาวน์โหลดเฉพาะวัตถุ git ที่จำเป็น (ดูที่คุณสมบัติการโคลนบางส่วนสำหรับข่าวสารเพิ่มเติม)
  • --cone ยังเร่งความเร็วประสิทธิภาพโดยใช้รูปแบบการรวมไฟล์ที่ จำกัด มากขึ้น

สถานะ GitHub

GitHub ยังคงประเมินคุณลักษณะนี้อยู่ภายในขณะที่เปิดใช้งานในที่เก็บที่เลือกไม่กี่ [... ] เมื่อคุณลักษณะมีความเสถียรและครบกำหนดเราจะแจ้งให้คุณทราบถึงความคืบหน้า ( เอกสาร )


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