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.
Jawaban:
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
lodash
sebagai contoh.Arahkan ke folder yang ingin Anda unduh . Mari unduh
/test
darimaster
cabang.Ubah URL untuk subversi . Ganti
tree/master
dengantrunk
.https://github.com/lodash/lodash/tree/master/test
➜https://github.com/lodash/lodash/trunk/test
Unduh foldernya . Pergi ke baris perintah dan ambil folder dengan SVN.
Anda mungkin tidak segera melihat aktivitas apa pun karena Github membutuhkan waktu hingga 30 detik untuk mengonversi repositori yang lebih besar, jadi bersabarlah.
Itu saja! Github juga mendukung lebih banyak fitur subversi , termasuk dukungan untuk melakukan dan mendorong perubahan.
sumber
tree/master
dengantrunk
dan Anda bisa mendapatkan folder tertentu.tree/master
dengantrunk
. Informasi ini harus ditambahkan sebagai jawaban.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.)branch
jalur Andabranches
, yang menurut saya benar; jika tidak, silakan dan ubah kembali.Dua opsi untuk fitur ini:
Opsi 1: Ekstensi Browser GitZip
Pemakaian:
Dapat token:
Opsi 2: Github gh-page
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.
sumber
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-
Anda juga dapat mengonfigurasi penggunaan detail properti file yang diunduh .
sumber
downloaded 25 of 25 files
ketika saya mencoba mengunduh dari URL ini: github.com/dssg/hitchhikers-guide/tree/master/curriculum/…Jika sudah
svn
, Anda dapat menggunakannyasvn export
untuk melakukan ini:Perhatikan format URL:
https://github.com/
/trunk
ditambahkan di akhirSebelum Anda menjalankan
svn export
, ada baiknya terlebih dahulu memverifikasi konten direktori dengan:sumber
.git
ekstensi. Anda dapat menggunakan tautan proyek penuh, dan mulai dengan menggunakansvn ls
diikuti oleh jalur proyek penuh. Contoh:svn ls https://github.com/RobTillaart/Arduino.git
. Untuk mengekspor hanya satu folder, Anda cukup menambahkan/trunk
diikuti oleh jalur yang diinginkan, sepertisvn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlib
. Lebih mudah untuk menjaga jalur proyek tetap utuh.https://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgi
, jalankansvn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgi
. Direktori yang dipanggilwsgi
akan dibuat di bawah direktori kerja saat ini. Hanya file sumber, tidak ada yang lain. Tidak.git
, tidak ada file terkait subversi.Untuk Repo git Generik:
Jika Anda ingin file download, tidak mengkloning repositori dengan sejarah, Anda dapat melakukan ini dengan
git-archive
.git-archive
membuat arsip zip atau tar terkompresi dari repositori git. Beberapa hal yang membuatnya istimewa:.git/
folder, atau file yang tidak terlacak dalam repositori itu dijalankan.Contoh membuat arsip
docs/usage
direktori dari repo jarak jauh yang terhubung dengan ssh:Informasi lebih lanjut di posting blog ini dan dokumentasi git .
Catatan tentang Repos GitHub:
GitHub tidak mengizinkan
git-archive
akses . ☹️sumber
git archive --format tar
format bukan tar.gz, tetapi tar.Saya telah membuat proyek sumber terbuka, bernama GitHubFolderDownloader . Ini memungkinkan Anda untuk mengunduh satu folder repositori tanpa mengkloning atau mengunduh seluruh repositori.
sumber
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):
BTW - Jika Anda menggunakan Windows atau platform lain, Anda dapat menemukan unduhan biner dari subversi (svn) di http://subversion.apache.org
Memperbarui
Mengenai komentar tentang melanjutkan unduhan / checkout terputus. Saya akan mencoba berlari
svn cleanup
diikuti olehsvn update
. Silakan cari SO untuk opsi tambahan.sumber
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.
Buat direktori.
Inisialisasi repositori Git. (
git init
)Aktifkan Checkout Jarang. (
git config core.sparsecheckout true
)Beri tahu Git direktori mana yang Anda inginkan (gema 2015 / merek / Mei (lihat folder yang ingin Anda kerjakan) >>
.git/info/sparse-checkout
)Tambahkan remote (
git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git
)Ambil file (
git pull origin master
)sumber
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
sumber
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 memilihDownloads
tombol 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 ...
sumber
tar.gz
:https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
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
2. Alat Pihak Ketiga
https://github.com/babel/babel-eslint/tree/master/lib
) Dan tekan tombol "Unduh".3. Subversi
svn export https://github.com/babel/babel-eslint/trunk/lib
, dan tekan enter.4. GitHub API
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.sumber
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
Catatan trunk di jalan
Diedit: (sesuai komentar Tommie C)
Ya, menggunakan ekspor alih-alih checkout akan memberikan salinan bersih tanpa file repositori git tambahan.
Diedit: Jika pohon / master tidak ada di url, maka Fork itu dan itu akan ada di url Forked.
sumber
Ada paket pip Python3 bernama
githubdl
yang dapat melakukan ini *:Halaman proyek ada di sini
* Penafian: Saya menulis paket ini.
sumber
Itu salah satu dari sedikit tempat di mana SVN lebih baik daripada Git.
Pada akhirnya kami tertarik pada tiga opsi:
sumber
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):
*/
) agar cocok dengan direktori mana pun. Github membuat direktori wrapper dengan komit ref di namanya, sehingga tidak bisa diketahui.--strip-components
sama 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.
sumber
Anda dapat melakukan unduhan sederhana dari pohon direktori:
Tetapi jika Anda bermaksud memeriksanya, dan dapat melakukan komitmen dan mendorong mereka kembali, tidak, Anda tidak dapat melakukannya.
sumber
Hanya untuk memperkuat jawaban di atas, contoh nyata dari repositori GitHub nyata ke direktori lokal adalah:
Terkadang contoh konkret membantu mengklarifikasi pengganti yang diusulkan.
sumber
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/:path
yang mengembalikan objek JSON enumerasi semua file di direktori. Termasuk dalam enumerasi adalah tautan ke konten mentah file,download_url
parameternya. 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.
sumber
Tim kami menulis skrip bash untuk melakukan ini karena kami tidak ingin menginstal SVN di server bare tulang kami.
https://github.com/ojbc/docker/blob/master/java8-karaf3/files/git-download.sh
Ini menggunakan API github dan dapat dijalankan dari baris perintah seperti ini:
sumber
Saya menggunakan linux jadi, letakkan ini di ~ / .bashrc, disebut even: D $ HOME / .bashrc
lalu segarkan shell dengan
kemudian gunakan dengan blababla git-downloadfolder: D
sumber
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.py
file ke$HOME
dir Anda dengan konten ini:[install] user=1
Daneasy_install lxml
hanya akan berfungsi (ref: https://stackoverflow.com/a/ 33464597/591257 ).sumber
Hanya 5 langkah lagi
sumber
Untuk mengekspor direktori dari GitHub, ganti "/ tree / master /" di url direktori dengan "/ trunk /".
Misalnya, untuk mengekspor direktori dari URL berikut:
jalankan perintah berikut:
sumber
Jawaban langsung untuk ini adalah untuk pertama kura-kura dari link berikut.
saat instalasi aktifkan opsi CLI, sehingga dapat digunakan dari antarmuka baris perintah.
salin tautan sub direktori git hub.
ganti tree / master dengan trunk
dan lakukan
file akan diunduh ke folder deeplab di direktori saat ini.
sumber
Anda dapat menggunakan git svn dengan cara berikut.
Dengan cara ini Anda tidak harus melalui kesulitan pengaturan svn, khusus untuk pengguna Windows.
sumber
sudo apt install git-svn
diperlukan saat menjalankan melalui WSL.Jika Anda perlu melakukannya secara programatik dan Anda tidak ingin bergantung pada SVN, Anda dapat menggunakan API GitHub untuk mengunduh semua konten secara rekursif.
Untuk inspirasi, inilah intinya ruby saya: https://gist.github.com/cvengros/b2a7e82f66519d423b6f
sumber
Gunakan fungsi ini, argumen pertama adalah url ke folder, yang kedua adalah tempat folder akan diunduh ke:
sumber
git clone --filter
dari Git 2.19Opsi ini sebenarnya akan melewatkan mengambil objek yang tidak dibutuhkan dari server:
Server harus dikonfigurasi dengan:
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?
sumber
Untuk alasan apa pun,
svn
solusinya tidak bekerja untuk saya, dan karena saya tidak memerlukansvn
hal lain, tidak masuk akal untuk menghabiskan waktu mencoba membuatnya, jadi saya mencari solusi sederhana menggunakan alat yang sudah saya miliki. Skrip ini hanya menggunakancurl
danawk
untuk 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
curl
dan 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.sumber
git sparse-checkout
Contoh dengan versi saat ini :
Terutama
--sparse
memeriksa hanya file direktori tingkat atas darigit
repositori ke dalam copy pekerjaangit sparse-checkout add t
secara bertahap menambah / memeriksat
subfolder darigit
Elemen lainnya
git sparse-checkout init
melakukan beberapa persiapan untuk mengaktifkan checkout sebagian--filter=blob:none
mengoptimalkan 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 terbatasStatus GitHub
sumber