Unduh satu folder atau direktori dari repo GitHub

1106

Bagaimana saya bisa mengunduh hanya folder atau direktori tertentu dari repo Git jarak jauh yang dihosting di GitHub?

Katakan contoh repo GitHub tinggal di sini:

[email protected]:foobar/Test.git

Struktur direktori:

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

Saya ingin mengunduh hanya folder foo dan tidak mengkloning seluruh proyek Tes.

g_inherit
sumber
4
Saya menulis skrip shell untuk ini menggunakan svn checkout - github.com/Decad/github-downloader
Declan Cook
391
Adakah yang bisa menjelaskan kepada saya mengapa tidak ada solusi antarmuka web "resmi" untuk ini? Sepertinya fitur yang sepele untuk diterapkan, namun sangat berguna.
Alexander - Reinstate Monica
3
Saya mengembangkan ekstensi chrome menggunakan ginoip KinoLien. github.com/charany1/GHSDD
charany1
3
lihat @janos jawaban svn alternatif adalah yang terbaik, tidak ada auth, tidak ada pendaftaran, tidak ada batas, tidak ada plugin
stackdave
5
Saya membuat solusi ringan untuk ini ( download-directory.github.io ) dan terintegrasi di dalam Refined GitHub
fregante

Jawaban:

1036

Pembaruan September 2016: ada beberapa alat yang dibuat oleh komunitas yang dapat melakukan ini untuk Anda:


Git tidak mendukung ini, tetapi Github melakukannya melalui SVN. Jika Anda checkout kode Anda dengan subversi, Github pada dasarnya akan mengubah repo dari git ke subversi di backend, lalu sajikan direktori yang diminta.

Inilah cara Anda dapat menggunakan fitur ini untuk mengunduh folder tertentu. Saya akan menggunakan perpustakaan javascript populer lodashsebagai contoh.

  1. Arahkan ke folder yang ingin Anda unduh . Mari unduh /testdari mastercabang. contoh URL repo github

  2. Ubah URL untuk subversi . Ganti tree/masterdengan trunk.

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

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

  3. Unduh foldernya . Pergi ke baris perintah dan ambil folder dengan SVN.

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

Anda mungkin tidak segera melihat aktivitas apa pun karena Github membutuhkan waktu hingga 30 detik untuk mengonversi repositori yang lebih besar, jadi bersabarlah.

Penjelasan format URL lengkap:

  • Jika Anda tertarik dengan mastercabang, gunakan trunksaja. Jadi path lengkapnya adalahtrunk/foldername
  • Jika Anda tertarik dengan foocabang, gunakan branches/foosaja. Path lengkapnya terlihat sepertibranches/foo/foldername
  • Protip: Anda dapat menggunakan svn lsuntuk melihat tag dan cabang yang tersedia sebelum mengunduh jika Anda mau

Itu saja! Github juga mendukung lebih banyak fitur subversi , termasuk dukungan untuk melakukan dan mendorong perubahan.

nick
sumber
162
Luar biasa, ganti saja tree/masterdengan trunkdan Anda bisa mendapatkan folder tertentu.
Sérgio Michels
6
Terima kasih @ user1146881 dan @ SérgioMichels, Anda harus menggantinya tree/masterdengan trunk. Informasi ini harus ditambahkan sebagai jawaban.
baptx
8
Saya memodifikasi ini untuk digunakan svn export, karena saya tidak ingin copy pekerjaan Subversion. Lalu saya menambahkan folder yang dihasilkan di Git. (Entah bagaimana saya kehilangan sebagian besar pohon direktori saya, jadi saya mengekspor dari repo yang saya garpu.)
Grault
5
@ num3ric- maaf atas jawaban yang terlambat, tetapi Anda harus dapat mengganti "trunk" dengan "branch / yourbranch"
nick
2
@ElijahLynn Terima kasih atas hasil editnya, saya harus memasukkan info itu! 2 hal meskipun- Saya menerima suntingan Anda tetapi memutar kembali beberapa milik saya sendiri (maksudnya melakukan ini, rasanya terlalu berantakan). Selain itu saya mengubah branchjalur Anda branches, yang menurut saya benar; jika tidak, silakan dan ubah kembali.
nick
568

Dua opsi untuk fitur ini:

Opsi 1: Ekstensi Browser GitZip

Ekstensi Chrome , Addon Firefox

Pemakaian:

  1. Di halaman repositori GitHub mana pun.
  2. Cukup klik dua kali pada bagian kosong dari item yang Anda butuhkan.
  3. Klik tombol unduh di kanan bawah.
  4. Lihat dasbor progres dan tunggu unduhan pemicu browser.
  5. Dapatkan file ZIP.

Dapat token:

  1. Klik ikon Ekstensi GitZip di browser Anda.
  2. Klik tautan "Normal" atau "Pribadi" di samping "Dapatkan Token".
  3. Otorisasi izin GitZip di halaman auth Github.
  4. Kembali ke halaman repo awal.
  5. Terus digunakan.

Opsi 2: Github gh-page

http://kinolien.github.io/gitzip dengan menggunakan GitHub API, dan perpustakaan JSZip, FileSaver.js.

Langkah1: Masukkan url github ke bidang di kanan atas.
Langkah2: Tekan enter atau klik unduh untuk mengunduh zip secara langsung atau klik cari untuk melihat daftar sub-folder dan file.
Langkah 3: Klik tombol "Unduh File Zip" atau "Dapatkan File" untuk mendapatkan file.

Dalam kebanyakan kasus, ini berfungsi dengan baik, kecuali bahwa folder tersebut berisi lebih dari 1.000 file, karena batasan API Github Trees. (mengacu pada Konten # API Github )

Dan itu juga dapat mendukung repo pribadi / publik dan meningkatkan batas nilai, jika Anda memiliki akun GitHub dan menggunakan tautan "dapatkan token" di situs ini.

Kino
sumber
5
Ini luar biasa, tetapi kelihatannya sangat mengagumkan, permintaan mendorong Anda melewati ratelimit Anda dan karenanya tidak lagi berfungsi ;-) Akan lebih baik bisa masuk dengan GitHub oAuth - yang akan memungkinkan dukungan repo pribadi, dan juga meningkat batas nilai Anda karena permintaan akan diautentikasi
hobailey
3
@ hobailey Sekarang, ia dapat memperoleh token akses untuk meningkatkan batas tingkat, dan juga mengakses repo pribadi.
Kino
1
@MYounas Lihat tentang OAuth, Trees, blobs chapters di Github API Doc. , dan juga menggunakan perpustakaan JSZip, FileSaver.js js untuk implementasi gitzip.
Kino
1
Adakah yang akan tertarik dengan ekstensi chrome yang melakukan ini?
goldylucks
4
Ini benar-benar perlu ditambahkan ke situs web github yang sebenarnya, ini sangat berguna.
menggulung
508

Pergi ke DownGit > Masukkan URL Anda> Unduh!

Sekarang, Anda dapat MENGUNDUH LANGSUNG atau membuat DOWNLOAD LINK untuk direktori atau file publik GitHub ( khususnya file besar ) dari DownGit ! Berikut ini adalah demonstrasi sederhana-


DownGit


Anda juga dapat mengonfigurasi penggunaan detail properti file yang diunduh .

Minhas Kamal
sumber
2
Bro, maksud saya bagaimana membuat proyek seperti DownGit yang Anda buat.
Muhammad Younus
12
Metode dasarnya adalah- 1. mengambil tautan direktori (menggunakan rute sudut ), 2. pergi ke GitHub API , 3. mencari melalui direktori dan mengunduh semua file, 4. membuat file zip dengannya (saya telah menggunakan jszip ) & simpan sebagai file (digunakan filesaver untuk ini). Untuk pemahaman yang jelas saya sarankan untuk melihat proyek saya .
Minhas Kamal
1
thanx Bro untuk instruksi terperinci, saya sangat berterima kasih kepada Anda jika Anda menyarankan tutorial atau tautan.
Muhammad Younus
5
Ini keren tapi tidak bekerja dengan alat otomatis (seperti wget)
Ring
1
Ini bertahan downloaded 25 of 25 filesketika saya mencoba mengunduh dari URL ini: github.com/dssg/hitchhikers-guide/tree/master/curriculum/…
Wassadamo
164

Jika sudah svn, Anda dapat menggunakannya svn exportuntuk melakukan ini:

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

Perhatikan format URL:

  • URL dasarnya adalah https://github.com/
  • /trunk ditambahkan di akhir

Sebelum Anda menjalankan svn export, ada baiknya terlebih dahulu memverifikasi konten direktori dengan:

svn ls https://github.com/foobar/Test.git/trunk/foo
janos
sumber
Apakah ini masih berfungsi? Mencoba ini dengan TortiseSVN dan saya mendapatkan kesalahan izin, meminta saya untuk memberikan kredensial.
john
2
@ John Saya yakin ini sudah terlambat untuk banyak membantu, tetapi apakah Anda memiliki otentikasi 2 faktor yang diaktifkan pada akun GitHub Anda? Jika demikian, saya pikir saya membaca di suatu tempat Anda harus menggunakan kunci yang dibuat sebelumnya untuk kata sandi (yang harus Anda temukan di pengaturan GitHub).
nick
1
Mengenai pemformatan URL, Anda dapat menyimpan .gitekstensi. Anda dapat menggunakan tautan proyek penuh, dan mulai dengan menggunakan svn lsdiikuti oleh jalur proyek penuh. Contoh: svn ls https://github.com/RobTillaart/Arduino.git. Untuk mengekspor hanya satu folder, Anda cukup menambahkan /trunkdiikuti oleh jalur yang diinginkan, seperti svn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlib. Lebih mudah untuk menjaga jalur proyek tetap utuh.
jgrocha
@ jgrocha Saya tidak yakin itu bekerja seperti itu kembali pada tahun 2013, tetapi sekarang, jadi terima kasih, memperbarui pos
janos
1
Contoh: untuk mengunduh konten dalam https://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgi, jalankan svn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgi. Direktori yang dipanggil wsgiakan dibuat di bawah direktori kerja saat ini. Hanya file sumber, tidak ada yang lain. Tidak .git, tidak ada file terkait subversi.
Rockallite
74

Untuk Repo git Generik:

Jika Anda ingin file download, tidak mengkloning repositori dengan sejarah, Anda dapat melakukan ini dengan git-archive.

git-archivemembuat arsip zip atau tar terkompresi dari repositori git. Beberapa hal yang membuatnya istimewa:

  1. Anda dapat memilih file atau direktori mana di repositori git yang akan diarsipkan.
  2. Itu tidak mengarsipkan .git/folder, atau file yang tidak terlacak dalam repositori itu dijalankan.
  3. Anda dapat mengarsipkan cabang, tag, atau komit tertentu. Proyek yang dikelola dengan git sering menggunakan ini untuk menghasilkan arsip versi proyek (beta, rilis, 2.0, dll.) Untuk diunduh pengguna.

Contoh membuat arsip docs/usagedirektori dari repo jarak jauh yang terhubung dengan ssh:

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

Informasi lebih lanjut di posting blog ini dan dokumentasi git .

Catatan tentang Repos GitHub:

GitHub tidak mengizinkan git-archiveakses . ☹️

RobW
sumber
2
git archive --format tarformat bukan tar.gz, tetapi tar.
出 羽 和 之
Ini harus menjadi jawaban terbaik
Felipe Costa
2
Saya pikir ini adalah jawaban terbaik tetapi perhatikan bahwa perintah arsip git tidak bekerja dengan protokol https.
bitfox
@yukihane mengedit ekstensi dari tar.gz ke tar, semoga OP ikut dengan ini
mihai
36

Saya telah membuat proyek sumber terbuka, bernama GitHubFolderDownloader . Ini memungkinkan Anda untuk mengunduh satu folder repositori tanpa mengkloning atau mengunduh seluruh repositori.

VahidN
sumber
Berfungsi bagus jika Anda hanya perlu mengunduh folder dari GitHub. Hanya perlu Token Github untuk mengunduh folder yang diinginkan. Semakin banyak upvotes dapat memberikan jawaban ini menonjol.
Alex Essilfie
34

Tidak ada yang salah dengan jawaban lain tetapi saya hanya berpikir saya akan membagikan instruksi langkah demi langkah untuk mereka yang berkeliaran melalui proses ini untuk pertama kalinya.

Cara mengunduh satu folder dari repositori github (Mac OS X):

~ Untuk membuka Terminal cukup klik sorotan dan ketik terminal lalu tekan enter

  1. Pada Mac Anda kemungkinan sudah memiliki SVN (untuk menguji terminal yang baru saja terbuka dan ketik "svn" atau "yang svn" ~ tanpa tanda kutip)
  2. Di Github: Temukan jalur Github ke folder git Anda (bukan repo) dengan mengklik nama folder tertentu di dalam repo
  3. Salin jalur dari bilah alamat browser
  4. Buka Terminal dan ketik: svn export
  5. Rekatkan berikutnya ke alamat (mis.): Https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
  6. Ganti kata-kata: tree / master
  7. dengan kata: trunk
  8. Ketik folder tujuan untuk file (dalam contoh ini, saya menyimpan folder target di dalam folder Unduhan untuk pengguna saat ini)
  9. Di sini spasi hanyalah bilah spasi bukan kata (spasi) ~ / Downloads / HeadsUpUI
  10. Perintah terminal terakhir menunjukkan perintah penuh untuk mengunduh folder (bandingkan alamat dengan langkah 5) svn ekspor https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~ / Downloads / HeadsUpUI

BTW - Jika Anda menggunakan Windows atau platform lain, Anda dapat menemukan unduhan biner dari subversi (svn) di http://subversion.apache.org

~ Jika Anda ingin checkout folder daripada hanya mengunduhnya, coba gunakan bantuan svn (tldr: ganti ekspor dengan checkout )

Memperbarui

Mengenai komentar tentang melanjutkan unduhan / checkout terputus. Saya akan mencoba berlari svn cleanupdiikuti oleh svn update. Silakan cari SO untuk opsi tambahan.

Tommie C.
sumber
1
Saya harus mengunduh banyak file dari folder tertentu dan mendapatkan kesalahan ini di tengah unduhan: svn: E175002: LAPORAN '/ bgmartins / script-parlamento /! Svn / vcc / default': 200 OK ( github.com ) Apakah Anda bagaimana saya dapat melanjutkan unduhan?
Miguel
Bekerja untukku. Itu luar biasa.
Heath Raftery
24

Siapa pun yang bekerja pada folder tertentu ia harus mengkloning folder itu sendiri, untuk melakukannya silakan ikuti langkah-langkah di bawah ini dengan menggunakan checkout jarang.

  1. Buat direktori.

  2. Inisialisasi repositori Git. ( git init)

  3. Aktifkan Checkout Jarang. ( git config core.sparsecheckout true)

  4. Beri tahu Git direktori mana yang Anda inginkan (gema 2015 / merek / Mei (lihat folder yang ingin Anda kerjakan) >> .git/info/sparse-checkout)

  5. Tambahkan remote ( git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git)

  6. Ambil file ( git pull origin master)

Mohammed Jafar
sumber
Sayang sekali komentar ini tidak mendapatkan cukup upvotes. Sepertinya solusi yang diberikan berlaku untuk semua repositori git dan bukan hanya yang github.
Kalyan
9
Ini sebenarnya tidak melakukan apa yang diinginkan. Itu masih mengkloning seluruh repositori, hanya saja tidak memeriksa beberapa folder.
Chris
Diselesaikan di sini: stackoverflow.com/questions/4114887/…
JK
Saya mendapatkan kesalahan ini: Sparse checkout tidak meninggalkan entri di direktori kerja.
orangecaterpillar
20

Kamu tidak bisa; tidak seperti Subversion, di mana setiap subdirektori dapat diperiksa secara terpisah, Git beroperasi berdasarkan seluruh repositori.

Untuk proyek-proyek di mana akses berbutir halus diperlukan, Anda dapat menggunakan submodul - setiap submodul adalah proyek Git yang terpisah, dan dengan demikian dapat dikloning secara terpisah.

Bisa dibayangkan bahwa front-end Git (misalnya antarmuka web GitHub, atau gitweb) dapat memilih untuk menyediakan antarmuka bagi Anda untuk mengekstrak folder yang diberikan, tetapi sepengetahuan saya tidak ada yang melakukannya (meskipun mereka membiarkan Anda mengunduh file individual , jadi jika folder tidak mengandung terlalu banyak file, itu adalah opsi)

Sunting - GitHub sebenarnya menawarkan akses melalui SVN, yang memungkinkan Anda melakukan hal ini (sesuai komentar). Lihat https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away untuk petunjuk terbaru tentang cara melakukan ini

michel-slm
sumber
apakah ada hal melalui API github?
g_inherit
14

Jika Anda benar-benar hanya ingin "mengunduh" folder dan tidak "mengkloningnya" (untuk pengembangan), cara termudah untuk mendapatkan salinan versi repositori terbaru (dan karenanya folder / file di dalamnya), tanpa perlu mengkloning seluruh repo atau bahkan menginstal git sejak awal, adalah mengunduh arsip zip (untuk repo, fork, cabang, komit, dll.) dengan membuka repositori / fork / branch / komit yang diinginkan di GitHub (misalnya http(s)://github.com/<user>/<repo>/commit/<Sha1>untuk salinan file seperti setelah komit tertentu) dan memilih Downloadstombol di dekat kanan atas.

Format arsip ini tidak mengandung sihir git-repo, hanya file yang dilacak sendiri (dan mungkin beberapa file .gitignore jika dilacak, tetapi Anda dapat mengabaikannya: p) - itu berarti bahwa jika kode berubah dan Anda ingin tetap di atas, Anda harus mengunduhnya secara manual, dan itu juga berarti Anda tidak akan dapat menggunakannya sebagai repositori git ...

Tidak yakin apakah itu yang Anda cari dalam kasus ini (sekali lagi, "unduh" / lihat vs "tiruan" / kembangkan), tetapi tetap bisa berguna ...

johnny
sumber
9
Jika Anda tidak melihat tautan unduhan, pastikan Anda berada di halaman repo utama (bukan direktori anak.) Sepertinya Anda hanya dapat mengunduh zip seluruh repo. Juga, halaman bantuan github ini mungkin berguna.
JD Smith
2
Akses point-and-klik mudah. Mudah untuk mendapatkan rilis sebelumnya. Mudah untuk menarik folder yang diinginkan dari zip yang diunduh. Terima kasih.
Andy Thomas
1
URL generik untuk diunduh dari tar.gz:https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
Krisztian
11

Ringkasan 2019

Ada berbagai cara untuk menangani ini, tergantung pada apakah Anda ingin melakukan ini secara manual atau terprogram.

Ada empat opsi yang dirangkum di bawah ini. Dan bagi mereka yang lebih menyukai penjelasan langsung, saya telah membuat video YouTube: Unduh File dan Folder Individual dari GitHub .

Juga, saya telah memposting jawaban yang serupa pada StackOverflow untuk mereka yang perlu mengunduh file tunggal dari GitHub (sebagai lawan dari folder).


1. Antarmuka Pengguna GitHub

  • Ada tombol unduh di beranda repositori. Tentu saja, ini mengunduh seluruh repo, setelah itu Anda harus menghapus zip unduhan dan kemudian secara manual menyeret keluar folder tertentu yang Anda butuhkan.

2. Alat Pihak Ketiga

  • Ada berbagai ekstensi browser dan aplikasi web yang dapat menangani hal ini, dengan DownGit menjadi salah satunya. Cukup tempelkan URL GitHub ke folder (mis. https://github.com/babel/babel-eslint/tree/master/lib) Dan tekan tombol "Unduh".

3. Subversi

  • GitHub tidak mendukung git-arsip (fitur git yang memungkinkan kami mengunduh folder tertentu). Namun GitHub, mendukung berbagai fitur Subversion, salah satunya dapat kita gunakan untuk tujuan ini. Subversion adalah sistem kontrol versi (alternatif untuk git). Anda perlu menginstal Subversion. Ambil URL GitHub untuk folder yang ingin Anda unduh. Anda harus memodifikasi URL ini. Anda ingin tautan ke repositori, diikuti oleh kata "trunk", dan diakhiri dengan path ke folder bersarang. Dengan kata lain, menggunakan contoh tautan folder yang sama yang saya sebutkan di atas, kita akan mengganti "tree / master" dengan "trunk". Terakhir, buka terminal, navigasikan ke direktori yang Anda inginkan agar kontennya diunduh, ketikkan perintah berikut (mengganti URL dengan URL yang Anda buat):svn export https://github.com/babel/babel-eslint/trunk/lib, dan tekan enter.

4. GitHub API

  • Ini adalah solusi yang Anda perlukan jika Anda ingin menyelesaikan tugas ini secara terprogram. Dan inilah sebenarnya yang digunakan DownGit di bawah tenda. Menggunakan API Rit GitHub , tulis skrip yang melakukan permintaan GET ke titik akhir konten. Endpoint dapat dibangun sebagai berikut: https://api.github.com/repos/:owner/:repo/contents/:path. Setelah mengganti placeholder, contoh titik akhir adalah:https://api.github.com/repos/babel/babel-eslint/contents/lib. Ini memberi Anda data JSON untuk semua konten yang ada di folder itu. Data memiliki semua yang Anda butuhkan, termasuk apakah kontennya adalah folder atau file, URL unduhan jika itu file, dan titik akhir API jika folder (sehingga Anda bisa mendapatkan data untuk folder itu). Dengan menggunakan data ini, skrip dapat secara rekursif menelusuri semua konten di folder target, membuat folder untuk folder bersarang, dan mengunduh semua file untuk setiap folder. Periksa kode DownGit ini untuk inspirasi.
Jabacchetta
sumber
9

Contoh spesifik lainnya:

Seperti saya ingin mengunduh folder 'iOS Pro Geo' dari url

https://github.com/alokc83/APRESS-Books-Source-Code-/ tree / master /% 20Pro% 20iOS% 20Geo

dan saya bisa melakukannya via

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

Catatan trunk di jalan

Diedit: (sesuai komentar Tommie C)

Ya, menggunakan ekspor alih-alih checkout akan memberikan salinan bersih tanpa file repositori git tambahan.

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

Diedit: Jika pohon / master tidak ada di url, maka Fork itu dan itu akan ada di url Forked.

zeeawan
sumber
2
Hanya perlu mengubah checkout untuk mengekspor jika Anda hanya ingin mengunduh salinan folder daripada checkout.
Tommie C.
Terima kasih atas jawaban Anda, bisakah kita menyelam cabang? katakanlah saya ingin mengunduh folder aaa
fitur1
7

Ada paket pip Python3 bernama githubdlyang dapat melakukan ini *:

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

Halaman proyek ada di sini

* Penafian: Saya menulis paket ini.

Willem van Ketwich
sumber
6

Itu salah satu dari sedikit tempat di mana SVN lebih baik daripada Git.

Pada akhirnya kami tertarik pada tiga opsi:

  1. Gunakan wget untuk mengambil data dari GitHub (menggunakan tampilan file mentah).
  2. Minta proyek-proyek hulu menerbitkan subset data yang diperlukan sebagai artefak bangunan.
  3. Menyerah dan gunakan checkout penuh. Ini adalah hit besar pada build pertama, tetapi kecuali jika Anda mendapatkan banyak lalu lintas, itu tidak terlalu merepotkan pada build berikut.
Manish Shrivastava
sumber
4
Yah, itu lebih sedikit Git vs Subversion dan lebih dari itu GitHub tidak mengizinkan git-arsip. (Saya ingin tahu alasannya.)
Rob Howard
6

Jika Anda merasa nyaman dengan perintah unix, Anda tidak memerlukan dependensi khusus atau aplikasi web untuk ini. Anda dapat mengunduh repo sebagai tarball dan hanya membatalkan yang Anda butuhkan.

Contoh (file woff2 dari subdirektori dalam fontawesome):

curl -L https://api.github.com/repos/FortAwesome/Font-Awesome/tarball | tar xz --wildcards "*/web-fonts-with-css/webfonts/*.woff2" --strip-components=3
  • Lebih lanjut tentang format tautan: https://developer.github.com/v3/repos/contents/#get-archive-link (termasuk cara mendapatkan file zip atau cabang / referensi tertentu)
  • Pertahankan bagian awal jalur ( */) agar cocok dengan direktori mana pun. Github membuat direktori wrapper dengan komit ref di namanya, sehingga tidak bisa diketahui.
  • Anda mungkin ingin --strip-componentssama dengan jumlah garis miring ( /) di jalur (argumen sebelumnya).

Ini akan mengunduh seluruh tarball. Gunakan metode SVN yang disebutkan dalam jawaban lain jika ini harus dihindari atau jika Anda ingin bersikap baik pada server GitHub.

Albin
sumber
5

Anda dapat melakukan unduhan sederhana dari pohon direktori:

git archive --remote [email protected]:foobar/Test.git HEAD:foo | tar xf -

Tetapi jika Anda bermaksud memeriksanya, dan dapat melakukan komitmen dan mendorong mereka kembali, tidak, Anda tidak dapat melakukannya.

araqnid
sumber
1
Perintah tidak valid: 'git-upload-archive' foobar / Test.git '' Anda tampaknya menggunakan ssh untuk mengkloning git: // URL. Pastikan opsi konfigurasi core.gitProxy Anda dan variabel lingkungan GIT_PROXY_COMMAND TIDAK diatur. fatal: Ujung jauh menutup secara tak terduga tar: Ini tidak terlihat seperti tar arsip tar: Keluar dengan status kegagalan karena kesalahan sebelumnya
g_inherit
@ g_inherit Saya bisa mereproduksi masalah ini. Meskipun ini mungkin arah yang benar, jawaban ini tidak valid.
Uli Köhler
meskipun begitu banyak suara turun, ini adalah satu-satunya saran yang bekerja untuk saya.
bhaskarc
5

Hanya untuk memperkuat jawaban di atas, contoh nyata dari repositori GitHub nyata ke direktori lokal adalah:

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

Terkadang contoh konkret membantu mengklarifikasi pengganti yang diusulkan.

John Washburn
sumber
5

Tidak ada jawaban yang membantu dalam situasi saya. Jika Anda mengembangkan untuk Windows, Anda kemungkinan tidak memiliki svn. Dalam banyak situasi seseorang tidak dapat mengandalkan pengguna untuk menginstal Git, atau tidak ingin mengunduh seluruh repositori karena alasan lain. Beberapa orang yang menjawab pertanyaan ini, seperti Willem van Ketwich dan aztack, membuat alat untuk menyelesaikan tugas ini. Namun, jika alat tidak ditulis untuk bahasa yang Anda gunakan, atau Anda tidak ingin menginstal perpustakaan pihak ketiga, ini tidak berfungsi.

Namun, ada cara yang jauh lebih mudah. GitHub memiliki API yang memungkinkan Anda mengunduh satu file atau seluruh isi direktori menggunakan permintaan GET . Anda dapat mengakses direktori menggunakan https://api.github.com/repos/:owner/:repo_name/contents/:pathyang mengembalikan objek JSON enumerasi semua file di direktori. Termasuk dalam enumerasi adalah tautan ke konten mentah file, download_urlparameternya. File kemudian dapat diunduh menggunakan URL itu.

Ini adalah proses dua langkah yang membutuhkan kemampuan untuk membuat permintaan GET, tetapi ini dapat diimplementasikan dalam hampir semua bahasa, di platform apa pun. Dapat digunakan untuk mendapatkan file atau direktori.

Calvin
sumber
4

Saya menggunakan linux jadi, letakkan ini di ~ / .bashrc, disebut even: D $ HOME / .bashrc

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

}

lalu segarkan shell dengan

source ~/.bashrc 

kemudian gunakan dengan blababla git-downloadfolder: D

pengguna1088530
sumber
3

Saya bekerja dengan server CentOS 7 di mana saya tidak memiliki akses root, atau git, svn, dll (juga tidak mau!) Jadi buat skrip python untuk mengunduh folder github: https://github.com/andrrrl/github -folder-pengunduh

Penggunaannya sederhana, cukup salin bagian yang relevan dari proyek github, misalkan proyeknya adalah https://github.com/MaxCDN/php-maxcdn/ , dan Anda menginginkan folder tempat beberapa file sumber hanya, maka Anda perlu lakukan sesuatu seperti:

$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/
(akan membuat folder target jika tidak ada)

Ini membutuhkan pustaka lxml , dapat diinstal dengan easy_install lxml
Jika Anda tidak memiliki akses root (seperti saya), Anda dapat membuat .pydistutils.pyfile ke $HOMEdir Anda dengan konten ini: [install] user=1 Dan easy_install lxmlhanya akan berfungsi (ref: https://stackoverflow.com/a/ 33464597/591257 ).

aesede
sumber
3

Hanya 5 langkah lagi

1) Unduh SVN dari sini .
2) Buka CMD dan buka direktori bin SVN seperti di bawah ini:

cd %ProgramFiles%\SlikSvn\bin

3) Misalkan saya ingin mengunduh URL direktori ini 4) Sekarang Ganti Dengan 5) Sekarang jalankan perintah terakhir ini untuk mengunduh folder di direktori yang sama.
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

Muhammad Ali
sumber
Ini sepertinya tidak berfungsi untuk repo pribadi
Sundeep Pidugu
Ya itu tidak akan bekerja untuk respos pribadi, GIT direkomendasikan untuk mengunduh respo pribadi.
Muhammad Ali
2

Untuk mengekspor direktori dari GitHub, ganti "/ tree / master /" di url direktori dengan "/ trunk /".

Misalnya, untuk mengekspor direktori dari URL berikut:

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

jalankan perintah berikut:

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

Jawaban langsung untuk ini adalah untuk pertama kura-kura dari link berikut.

https://tortoisesvn.net/downloads.html

saat instalasi aktifkan opsi CLI, sehingga dapat digunakan dari antarmuka baris perintah.

salin tautan sub direktori git hub.

Contoh

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

ganti tree / master dengan trunk

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

dan lakukan

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

file akan diunduh ke folder deeplab di direktori saat ini.

Khan
sumber
2

Anda dapat menggunakan git svn dengan cara berikut.

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

Dengan cara ini Anda tidak harus melalui kesulitan pengaturan svn, khusus untuk pengguna Windows.

V3K3R
sumber
Terima kasih. Saya dapat menjamin bahwa itu berfungsi untuk Windows. Tidak bekerja di gcloud. Dikatakan git: 'svn' bukan perintah
JOSEPH Blessingh
sudo apt install git-svndiperlukan saat menjalankan melalui WSL.
Jammy Dodger
1

Gunakan fungsi ini, argumen pertama adalah url ke folder, yang kedua adalah tempat folder akan diunduh ke:

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

git clone --filter dari Git 2.19

Opsi ini sebenarnya akan melewatkan mengambil objek yang tidak dibutuhkan dari server:

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

Server harus dikonfigurasi dengan:

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

Ekstensi dibuat untuk protokol jarak jauh Git untuk mendukung fitur ini di v2.19.0, tetapi tidak ada dukungan server saat itu. Tetapi sudah bisa diuji secara lokal.

Saya telah membahas hal ini secara lebih rinci di: Bagaimana saya mengkloning subdirektori hanya dari repositori Git?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
sumber
1
Menarik dan terunggul. Saya kira saya harus menyebutkan fitur 2,19 ini di tempat lain.
VonC
@VonC Saya pikir saya pernah mengalahkan Anda sekali ini: stackoverflow.com/questions/2466735/… dan saya hanya melihatnya setelah XD rilis! Saya tentu saja Googling hari ini sedikit setelah rilis 2.22, semua jawaban sudah diperbarui tentu saja ;-) Tidak pernah berhenti menghibur saya bagaimana selalu ada semi duplikat yang tersisa, selalu, dan akhirnya saya menemukannya satu tahun kemudian dengan permintaan yang sedikit berbeda. Aku tidak bermaksud mengalahkanmu dengan git, terlalu keras, tapi awasi jumlah ahli nujum! haha
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Yah, pertahankan kerja bagus: semua komunitas akan mendapat manfaat dari kompetisi sampingan kecil ini (dan saya memang menjawab jawaban Anda yang lain pada saat itu)
VonC
@VonC bercanda tentu saja, saya membenarkan barang-barang Anda juga jelas. Saya hanya perlu menemukan cara untuk menebus poin-poin itu menjadi uang sekarang XD
Ciro Santilli 郝海东 冠状 病 六四 六四 事件
1

Untuk alasan apa pun, svnsolusinya tidak bekerja untuk saya, dan karena saya tidak memerlukan svnhal lain, tidak masuk akal untuk menghabiskan waktu mencoba membuatnya, jadi saya mencari solusi sederhana menggunakan alat yang sudah saya miliki. Skrip ini hanya menggunakan curldan awkuntuk mengunduh semua file dalam direktori GitHub yang dideskripsikan sebagai"/:user:repo/contents/:path" .

Badan panggilan yang dikembalikan ke perintah GitHub REST API "GET /repos/:user:repo/contents/:path"mengembalikan objek yang menyertakan a"download_url" tautan untuk setiap file dalam direktori.

Skrip baris perintah ini memanggil bahwa REST API menggunakan curldan mengirimkan hasilnya melalui AWK, yang memfilter semua kecuali baris "download_url", menghapus tanda kutip dan koma dari tautan, dan kemudian mengunduh tautan menggunakan panggilan lain untuk mengeriting.

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

git sparse-checkout

Git 2.25.0 termasuk git sparse-checkoutperintah eksperimental baru yang membuat fitur yang ada lebih mudah digunakan, bersama dengan beberapa manfaat kinerja penting untuk repositori besar. ( The GitHub Blog )

Contoh dengan versi saat ini :

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

Terutama

  • --sparsememeriksa hanya file direktori tingkat atas dari gitrepositori ke dalam copy pekerjaan
  • git sparse-checkout add tsecara bertahap menambah / memeriksa tsubfolder darigit

Elemen lainnya

  • git sparse-checkout init melakukan beberapa persiapan untuk mengaktifkan checkout sebagian
  • --filter=blob:nonemengoptimalkan pengambilan data dengan mengunduh hanya objek git yang diperlukan (lihat fitur klon parsial untuk info lebih lanjut)
  • --cone juga mempercepat kinerja dengan menerapkan pola inklusi file yang lebih terbatas

Status GitHub

GitHub masih mengevaluasi fitur ini secara internal sementara itu diaktifkan pada beberapa repositori terpilih [...]. Saat fitur stabil dan matang, kami akan membuat Anda diperbarui dengan kemajuannya. ( docs )

ford04
sumber
Terpilih. Saya mempresentasikan perintah itu di stackoverflow.com/a/59515426/6309 , dengan set pola klon.
VonC