GitHub deposundan tek bir klasör veya dizin indirme


1105

GitHub'da barındırılan uzak bir Git deposundan yalnızca belirli bir klasörü veya dizini nasıl indirebilirim?

Diyelim ki GitHub repo burada yaşıyor:

git@github.com:foobar/Test.git

Dizin yapısı:

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

Sadece foo klasörünü indirmek istiyorum ve tüm Test projesini klonlamak istemiyorum .


4
Svn checkout kullanarak bunun için bir kabuk komut dosyası yazdım - github.com/Decad/github-downloader
Declan Cook

390
Birisi bana bunun için neden "resmi" bir web arayüzü çözümü olmadığını açıklayabilir mi? Uygulanması önemsiz bir özellik gibi görünüyor, ancak süper kullanışlı.
Alexander - Monica'yı eski

3
KinoLien'in gitzipini kullanarak bir krom uzantısı geliştirdim. github.com/charany1/GHSDD
charany1

3
bkz @janos cevap svn alternatif en iyisidir, auth, kayıt yok, sınır yok, eklenti yok
stackdave

5
Bunun için hafif bir çözüm yaptım ( download-directory.github.io ) ve Rafine
GitHub'a

Yanıtlar:


1034

Eylül 2016 Güncellemesi: topluluk tarafından oluşturulan ve bunu sizin için yapabilen birkaç araç vardır:


Git bunu desteklemiyor, ancak Github SVN aracılığıyla destekliyor. Kodunuzu subversion ile kontrol ederseniz, Github repoyu esas olarak git'ten arka uçta subversion'a dönüştürecek ve daha sonra istenen dizini sunacaktır.

Belirli bir klasörü indirmek için bu özelliği nasıl kullanabileceğiniz aşağıda açıklanmıştır. lodashÖrnek olarak popüler javascript kütüphanesini kullanacağım .

  1. İndirmek istediğiniz klasöre gidin . Hadi indirme /testgelen masterşube. github repo URL örneği

  2. URL'yi alt sürüm için değiştirin . Değiştir tree/masterile trunk.

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

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

  3. Klasörü indirin . Komut satırına gidin ve klasörü SVN ile yakalayın.

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

Hemen hiçbir etkinlik göremeyebilirsiniz, çünkü Github daha büyük depoları dönüştürmek için 30 saniye alır, bu yüzden sabırlı olun.

Tam URL biçimi açıklaması:

  • Eğer ilgilenen ediyorsanız masterşube, kullanmak trunkyerine. Yani tam yoltrunk/foldername
  • Eğer ilgileniyorsanız foo şube, kullanmak branches/fooyerine. Tam yol şöyle görünüyorbranches/foo/foldername
  • Protip: İsterseniz indirmeden svn lsönce mevcut etiketleri ve dalları görmek için kullanabilirsiniz

Bu kadar! Github , değişiklikleri taahhüt etme ve zorlama desteği de dahil olmak üzere daha fazla yıkım özelliğini de destekler.


162
Müthiş, sadece yerini tree/masterile trunkve belirli bir klasör alabilirsiniz.
Sérgio Michels

6
User1146881 @ ve SérgioMichels @ sayesinde, değiştirmek zorunda tree/masterolan trunk. Bu bilgi cevap olarak eklenmelidir.
baptx

8
svn exportSubversion çalışma kopyasını istemediğim için bunu değiştirdim . Sonra ortaya çıkan klasörü Git'e ekledim. (Bir şekilde dizin
ağacımın

5
@ num3ric- geç cevap için özür dilerim, ama "gövde" yerine "dalları / yourbranch"
nick

2
@ElijahLynn Düzenleme için teşekkürler, bu bilgiyi eklemeliydim! 2 şey olsa - ben senin düzenleme kabul ama bazı kendi geri aldı (yine de bunu yapmak için anlamı, çok dağınık hissettim). Ayrıca ben senin değişti branchyolunu branchesben, düşünüyorum doğrudur; değilse, devam edin ve geri değiştirin.
nick

567

Bu özellik için iki seçenek:

Seçenek 1: GitZip Tarayıcı Uzantısı

Chrome Uzantısı , Firefox Eklentisi

Kullanımı:

  1. Herhangi bir GitHub depo sayfasında.
  2. İhtiyacınız olan öğelerin boş kısmını çift tıklayın.
  3. Sağ alt taraftaki indir düğmesini tıklayın.
  4. İlerleme kontrol paneline bakın ve tarayıcı tetikleyicisinin indirilmesini bekleyin.
  5. ZIP dosyasını alın.

Token Al:

  1. Tarayıcınızda GitZip Uzantısı simgesini tıklayın.
  2. "Jeton Al" ın yanındaki "Normal" veya "Özel" bağlantısını tıklayın.
  3. Github yetkilendirme sayfasında GitZip iznini yetkilendirin.
  4. Başlangıcın repo sayfasına dön.
  5. Kullanmaya devam edin.

Seçenek 2: Github gh-sayfası

GitHub API ve httpZ/ FileSaver.js kitaplıklarını kullanarak http://kinolien.github.io/gitzip .

Adım 1: Sağ üstteki alana github url'sini girin.
2.Adım: Doğrudan zip indirmek için enter tuşuna basın veya tıklayın veya alt klasörlerin ve dosyaların listesini görüntülemek için ara'yı tıklayın.
Adım3: Dosyaları almak için "Zip Dosyasını İndir" veya "Dosya Al" düğmesini tıklayın.

Çoğu durumda, Github Ağaçları API sınırlaması nedeniyle klasörün 1000'den fazla dosya içermesi dışında iyi çalışır. ( Github API # İçindekiler anlamına gelir )

Ayrıca, GitHub hesabınız varsa ve bu sitede "get to" bağlantısını kullanırsanız özel / genel depoları destekleyebilir ve ücret sınırını yükseltebilir.


5
Bu harika, ancak talep sizi ratelimitinizin üzerine itiyor ve bu yüzden artık çalışmıyor ;-) Özel repo desteğine izin veren ve aynı zamanda increate olan GitHub oAuth ile giriş yapabilmek harika olurdu. kimlik doğrulaması
istendiği

3
@hobailey Artık, oran sınırını artırmak için erişim belirteci alabilir ve ayrıca özel depolara erişebilir.
Kino

1
@MYounas Github API Doc içindeki OAuth, Ağaçlar, Blobs bölümleri hakkında bilgi edinin . ve ayrıca gitzip uygulaması için JSZip, FileSaver.js js kitaplıklarını kullanın.
Kino

1
Bunu yapan bir krom uzantısıyla ilgilenen var mı?
goldylucks

4
Bu gerçekten gerçek github web sitesine eklenmelidir, son derece yararlıdır.
rulolar

508

Git DownGit URL'niz> İndir Enter>!

Şimdi, DownGit'ten herhangi bir GitHub genel dizini veya dosyası ( özellikle büyük dosya ) için DOĞRUDAN İNDİR veya İNDİR LINK oluşturabilirsiniz ! İşte basit bir gösteri-


DownGit


İndirilen dosyanın özellik ayrıntılı kullanımını da yapılandırabilirsiniz .


2
Dostum, demek istediğin DownGit gibi bir proje nasıl oluşturdun.
Muhammed Younus

12
Temel yöntem 1. dizin dizinini alır ( açısal yol kullanılır ), 2. GitHub API'sine gidin , 3. dizinde arama yapın ve tüm dosyaları indirin, 4. bir zip dosyası oluşturun ( jszip kullandım ) & dosya olarak kaydet ( bunun için kullanılan dosya koruyucu ). Açık bir anlayış için projeme bir göz atmanızı öneririm .
Minhas Kamal

1
ayrıntılı talimatlar için thanx Bro, herhangi bir öğretici veya bağlantı önerirseniz size çok teşekkür ederim.
Muhammed Younus

5
Bu harika ama otomatik araçlar (wget gibi) ile çalışmıyor
Ring

1
Bu downloaded 25 of 25 filesURL'den indirmeyi denediğimde bu durum devam ediyor: github.com/dssg/hitchhikers-guide/tree/master/curriculum/…
Wassadamo

164

Varsa svn, bunu svn exportyapmak için kullanabilirsiniz :

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

URL biçimine dikkat edin:

  • Temel URL https://github.com/
  • /trunk sonunda eklendi

Çalıştırmadan önce svn export, dizinin içeriğini aşağıdakilerle doğrulamak iyidir:

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

Bu hala çalışıyor mu? Bunu TortiseSVN ile denedim ve kimlik bilgileri vermemi isteyen bir izin hatası alıyorum.
john

2
@john Bunun çok fazla yardımcı olmayacak kadar geç olduğuna eminim, ancak GitHub hesabınızda 2 faktörlü kimlik doğrulamayı etkinleştirdiniz mi? Eğer öyleyse, bir yerde okuduğumu düşünüyorum ( önceden GitHub ayarlarında bulmanız gereken) şifre için önceden oluşturulmuş bir anahtar kullanmanız gerekecek.
nick

1
URL biçimlendirmesiyle ilgili olarak .gituzantıyı koruyabilirsiniz . Tam proje bağlantısını kullanabilir ve svn lsardından projenin tam yolunu izleyerek başlayabilirsiniz . Örnek: svn ls https://github.com/RobTillaart/Arduino.git. Yalnızca bir klasörü dışa aktarmak için, /trunkardından istediğiniz yolu ekleyin svn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlib. Proje yolunu sağlam tutmak daha kolaydır.
jgrocha

@jgrocha 2013'te bu şekilde çalıştığından emin değilim, ama şimdi, bu yüzden teşekkürler,
yazıyı

1
Bir örnek: içindeki içeriği indirmek için https://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgiçalıştırın svn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgi. wsgiGeçerli çalışma dizininin altında bir dizin oluşturulur. Sadece kaynak dosyalar, başka bir şey yok. Hayır .git, alt sürümle ilgili dosyalar yok.
Rockallite

74

Genel git Repo için:

Depoyu tarihle klonlamak istemiyorsanız dosyaları indirmek istiyorsanız, bunu ile yapabilirsiniz git-archive.

git-archivegit deposunun sıkıştırılmış bir zip veya katran arşivi yapar. Özel yapan bazı şeyler:

  1. Git deposundaki hangi dosyaların veya dizinlerin arşivleneceğini seçebilirsiniz.
  2. .git/Klasörü veya üzerinde çalıştığı depodaki izlenmemiş dosyaları arşivlemez .
  3. Belirli bir dalı, etiketi veya taahhüdü arşivleyebilirsiniz. Git ile yönetilen projeler genellikle kullanıcıların indirmesi için proje sürümlerinin (beta, sürüm, 2.0 vb.) Arşivlerini oluşturmak için kullanır.

docs/usageSsh ile bağlı olduğunuz uzak bir repodan dizinin bir arşivinin oluşturulmasına örnek :

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

Bu blog yazısında ve git belgelerinde daha fazla bilgi .

GitHub Repos hakkında not:

GitHub git-archiveerişime izin vermiyor . ☹️


2
git archive --format tarbiçim tar.gz değil, tar.
之 羽 和 之

Bu en iyi cevap olmalı
Felipe Costa

2
Bence bu en iyi cevap ama git arşiv komutunun https protokolü ile çalışmadığını unutmayın.
bitfox

@yukihane tar.gz'den tar'ya uzantıyı düzenledi, umarım OP bununla birlikte olur
mihai

36

GitHubFolderDownloader adlı açık kaynaklı bir proje oluşturdum . Tüm deposu klonlamadan veya indirmeden bir deponun tek bir klasörünü indirmenize izin verir.


Yalnızca GitHub'dan klasör indirmeniz gerekiyorsa harika çalışır. İstenen klasörü indirmek için sadece bir Github Jetonu gerekir. Daha fazla oy, bu cevaba biraz önem verebilir.
Alex Essilfie

34

Diğer cevaplarla ilgili yanlış bir şey yok, ancak bu süreçte ilk kez dolaşanlar için adım adım talimatları paylaşacağımı düşündüm.

Github deposundan tek bir klasör nasıl indirilir (Mac OS X):

~ Terminal'i açmak için sadece spot ışığı tıklayın ve terminal yazın ve enter tuşuna basın.

  1. Mac'te zaten SVN (muhtemelen sadece açık terminali test etmek ve "svn" veya "hangi svn" yazmak için) ve tırnak işaretleri olmadan ~ yazmak için)
  2. Github'da: Bir repo içindeki belirli klasör adını tıklatarak git klasörünüzün (repo değil) Github yolunu bulun
  3. Yolu tarayıcının adres çubuğundan kopyalayın
  4. Terminal'i açın ve yazın: svn export
  5. Sonraki adresi yapıştırın (örn.): Https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
  6. Kelimeleri değiştirin: ağaç / usta
  7. kelimesi ile: gövde
  8. Dosyaların hedef klasörünü yazın (bu örnekte, hedef klasörü geçerli kullanıcının İndirilenler klasörünün içine depolarım)
  9. Burada boşluk sadece boşluk çubuğu kelimesi değil (boşluk) ~ / Downloads / HeadsUpUI
  10. Son terminal komutu klasörü indirmek için tam komutu gösterir (adresi adım 5 ile karşılaştırın) svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~ / Downloads / HeadsUpUI

BTW - Windows veya başka bir platformdaysanız, http://subversion.apache.org adresinde subversion (svn) ikili indirmesini bulabilirsiniz.

~ Klasörü sadece indirmek yerine teslim almak istiyorsanız, svn yardımını kullanmayı deneyin (tldr: verme işlemini ödeme ile değiştirin )

Güncelleme

Kesilen indirme / ödeme işlemine devam etme hakkındaki yorum hakkında. Ben çalışıyor çalışacaktı svn cleanupizledi svn update. Ek seçenekler için lütfen SO'yu arayın.


1
Belirli bir klasörden çok sayıda dosya indirmek zorundayım ve indirmenin ortasında bu hatayı aldım: svn: E175002: '/ bgmartins / scripts-parlamento /! Svn / vcc / default' RAPORU: 200 OK ( github.com ) İndirme işlemine nasıl devam edebilirim?
Miguel

Benim için çalıştı. Bu inanılmaz.
Heath Raftery

24

Kim belirli bir klasör üzerinde çalışıyorsa o klasörü kendi klonlaması gerekir, bunu yapmak için lütfen seyrek ödeme kullanarak aşağıdaki adımları izleyin.

  1. Bir dizin oluşturun.

  2. Git deposunu başlatın. ( git init)

  3. Seyrek Ödemeleri Etkinleştir. ( git config core.sparsecheckout true)

  4. Git'e hangi dizinleri istediğinizi söyleyin (echo 2015 / marka / Mayıs (üzerinde çalışmak istediğiniz klasöre bakın) >> .git/info/sparse-checkout)

  5. Uzaktan kumandayı ekle ( git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git)

  6. Dosyaları getir ( git pull origin master)


Bu yorum çok kötü yeterli oy almamış. Verilen çözüm sadece github için değil tüm git depoları için geçerlidir.
Kalyan

9
Bu aslında istenen şeyi yapmaz. Hala tüm depoyu klonlar, sadece bazı klasörleri kontrol etmez.
Chris


Bu hatayı alıyorum: Seyrek ödeme çalışma dizinine herhangi bir girdi bırakmaz.
orangecaterpillar

20

Yapamazsın; Her alt dizinin ayrı ayrı kontrol edilebildiği Subversion'dan farklı olarak Git, tüm havuz temelinde çalışır.

İnce taneli erişimin gerekli olduğu projeler için alt modülleri kullanabilirsiniz - her alt modül ayrı bir Git projesidir ve böylece ayrı ayrı klonlanabilir.

Git ön ucunun (örneğin GitHub'ın web arayüzü veya gitweb) belirli bir klasörü ayıklamanız için bir arayüz sağlamayı seçebileceği düşünülebilir, ancak bildiklerime göre bunların hiçbiri bunu yapmaz (tek tek dosyaları indirmenize izin veriyor olsalar da) , klasör çok fazla dosya içermiyorsa, bu bir seçenektir)

Düzenle - GitHub aslında SVN üzerinden erişim sağlar, bu da sadece bunu yapmanıza izin verir (yoruma göre). Bunun nasıl yapılacağıyla ilgili en son talimatlar için https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away adresine bakın.


github API ile herhangi bir şey var mı?
g_inherit

14

Gerçekten sadece klasörü "indirmek" ve "klonlamak" istemiyorsanız (geliştirme için), deponun en son sürümünün (ve içindeki bir klasörün / dosyanın) bir kopyasını almanın en kolay yolu , tüm repoyu klonlamaya veya hatta git'i ilk etapta yüklemeye gerek kalmadan, GitHub'da istenen depoya / fork / şubeye / taahhüde giderek bir zip arşivi (herhangi bir repo, çatal, şube, taahhüt vb.) indirmektir. (örneğin http(s)://github.com/<user>/<repo>/commit/<Sha1>, belirli bir işlemden sonra olduğu gibi dosyaların bir kopyası için) ve Downloadssağ üst tarafa yakın düğmeyi seçme .

Bu arşiv biçimi git-repo sihrinin hiçbirini içermez, sadece izlenen dosyaların kendileri (ve belki de izlendiyse birkaç .gitignore dosyasını içerir, ancak bunları göz ardı edebilirsiniz: p) - yani kod değişir ve en üstte kalın, manuel olarak yeniden indirmeniz gerekecek ve aynı zamanda git deposu olarak kullanamayacağınız anlamına geliyor ...

Bu durumda aradığınız şeyin bu olup olmadığından emin değilim (yine, "indir" / "klonla / görüntüle vs görüntüle"), ancak yine de yararlı olabilir ...


9
Bir indirme bağlantısı görmüyorsanız, ana bir repo sayfasında (alt dizinde değil) olduğunuzdan emin olun. Reponun tamamının yalnızca bir kısmını indirebilirsiniz. Ayrıca, bu github yardım sayfası faydalı olabilir.
JD Smith

2
Kolayca tıkla ve tıkla erişimi. Önceden yayınlanmak kolaydır. İstenilen klasörü indirilen zip dosyasından çıkarmak kolaydır. Teşekkür ederim.
Andy Thomas

1
Indirmek için genel URL tar.gz:https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
Krisztian

11

2019 Özeti

Bunu elle veya programlı olarak yapmak isteyip istemediğinize bağlı olarak, bunu ele almanın çeşitli yolları vardır.

Aşağıda özetlenen dört seçenek vardır. Daha ayrıntılı bir açıklamayı tercih edenler için, bir YouTube videosu hazırladım: GitHub'dan Tek Dosya ve Klasörleri İndirin .

Ayrıca, GitHub'dan (klasörlerin aksine) tek dosyaları indirmesi gerekenler için StackOverflow'a benzer bir cevap gönderdim .


1. GitHub Kullanıcı Arayüzü

  • Deponun ana sayfasında bir indirme düğmesi var. Tabii ki, bu tüm repoyu indirir, daha sonra indirmeyi açmanız ve ardından ihtiyacınız olan belirli bir klasörü manuel olarak sürüklemeniz gerekir.

2. Üçüncü Taraf Araçları

  • Bunu başarabilen çeşitli tarayıcı uzantıları ve web uygulamaları var, DownGit bunlardan biri. GitHub URL'sini klasöre yapıştırın (örn. https://github.com/babel/babel-eslint/tree/master/lib) Ve "İndir" düğmesine basın.

3. Yıkılma

  • GitHub git-arşivini (belirli klasörleri indirmemize izin veren git özelliği) desteklemez. Ancak GitHub, bunlardan biri bu amaçla kullanabileceğimiz çeşitli Subversion özelliklerini destekliyor. Subversion bir sürüm kontrol sistemidir (git'e alternatif). Subversion'ın kurulu olması gerekir. İndirmek istediğiniz klasör için GitHub URL'sini alın. Yine de bu URL'yi değiştirmeniz gerekir. Depo bağlantısını, ardından "trunk" sözcüğünü ve iç içe klasör yoluyla bitmesini istiyorsunuz. Başka bir deyişle, yukarıda bahsettiğim klasör bağlantısı örneğini kullandığımızda, "tree / master" yerine "trunk" yazılır. Son olarak, bir terminal açın, içeriğin indirilmesini istediğiniz dizine gidin, aşağıdaki komutu yazın (URL'yi oluşturduğunuz URL ile değiştirme):svn export https://github.com/babel/babel-eslint/trunk/libyazın ve enter tuşuna basın.

4. GitHub API'sı

  • Bu görevi programlı olarak gerçekleştirmek istiyorsanız ihtiyacınız olan çözüm budur. Ve aslında DownGit, kaputun altında kullanıyor. GitHub'ın REST API'sini kullanarak , içerik uç noktasına GET isteği yapan bir komut dosyası yazın. Aşağıdaki gibi nokta inşa edilebilir: https://api.github.com/repos/:owner/:repo/contents/:path. Yer tutucuları değiştirdikten sonra, örnek bir uç nokta:https://api.github.com/repos/babel/babel-eslint/contents/lib . Bu, o klasörde bulunan tüm içerik için JSON verileri sağlar. Verilerin içeriğin bir klasör veya dosya olup olmadığı, dosya ise indirme URL'si ve klasör ise API uç noktası (bu klasörle ilgili verileri alabilmeniz için) dahil olmak üzere ihtiyacınız olan her şeye sahiptir. Bu verileri kullanarak, komut dosyası hedef klasördeki tüm içeriği yinelemeli olarak geçirebilir, iç içe klasörler için klasörler oluşturabilir ve her klasör için tüm dosyaları indirebilir. İlham almak için DownGit'in koduna göz atın .

9

Başka bir spesifik örnek:

URL'den 'iOS Pro Geo' klasörünü indirmek istediğim gibi

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

ve bunu yoluyla yapabilirim

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

Not gövde yolunda

Düzenlendi: (Tommie C'nin yorumuna göre)

Evet, ödeme yerine dışa aktarma kullanmak, ekstra git depo dosyaları olmadan temiz bir kopya verir.

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

Düzenlendi: Eğer ağaç / master url'de değilse Çatalla ve çatallı url'de olacaktır.


2
Dışa aktarma yerine klasörün bir kopyasını indirmek istiyorsanız, dışa aktarmak için kasayı değiştirmeniz yeterlidir.
Tommie

Cevabınız için teşekkür ederim, bir şubeye dalabilir miyiz? diyelim ki feature1 branch's aaa klasörünü indirmek istiyorum
hsafarya

7

Bunu githubdlyapabilen Python3 pip paketi var *:

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

Proje sayfası burada

* Feragatname: Bu paketi yazdım.


6

SVN'nin Git'ten daha iyi olduğu birkaç yerden biri.

Sonunda üç seçeneğe yöneldik:

  1. GitHub'daki verileri (ham dosya görünümünü kullanarak) almak için wget kullanın.
  2. Akış yukarı projelerin gerekli veri alt kümesini derleme yapıları olarak yayınlamasını sağlayın.
  3. Vazgeç ve tüm kasayı kullan. İlk binada büyük bir hit var, ancak çok fazla trafik almazsanız, aşağıdaki yapılarda çok fazla güçlük çekmiyor.

4
Git vs Subversion daha az ve GitHub flat-out git-arşivine izin vermez. (Nedenini bilmek isterim.)
Rob Howard

6

Unix komutlarından memnunsanız, bunun için özel bağımlılıklara veya web uygulamalarına ihtiyacınız yoktur. Repoyu bir tarball olarak indirebilir ve sadece ihtiyacınız olanı açabilirsiniz.

Örnek (fontawesome içindeki bir alt dizinden woff2 dosyaları):

curl -L https://api.github.com/repos/FortAwesome/Font-Awesome/tarball | tar xz --wildcards "*/web-fonts-with-css/webfonts/*.woff2" --strip-components=3
  • Bağlantı biçimi hakkında daha fazla bilgi: https://developer.github.com/v3/repos/contents/#get-archive-link (bir zip dosyasının veya belirli dalların / referansların nasıl alınacağı dahil)
  • */Herhangi bir dizine eşleştirmek için yolun ( ) ilk bölümünü saklayın . Github, command ref adında bir sarmalayıcı dizini oluşturur, bu yüzden bilinemez.
  • Muhtemelen yoldaki --strip-componentseğik çizgi ( /) miktarı ile aynı olmak istersiniz (önceki argüman).

Bu, tüm tarball'ı indirecektir. Bundan kaçınılması gerekiyorsa veya GitHub sunucularına iyi davranmak istiyorsanız, diğer cevaplarda belirtilen SVN yöntemini kullanın.


5

Dizin ağacını basit bir şekilde indirebilirsiniz:

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

Ama eğer kontrol etmek ve taahhütte bulunmak ve onları geri itmek istiyorsanız, hayır bunu yapamazsınız.


1
Geçersiz komut: 'git-upload-archive' foobar / Test.git '' Bir git: // URL'sini klonlamak için ssh kullanıyor gibi görünüyorsunuz. Core.gitProxy yapılandırma seçeneğinizin ve GIT_PROXY_COMMAND ortam değişkeninin ayarlanmadığından emin olun. ölümcül: Uzak uç beklenmedik bir şekilde
kapatıldı

@g_inherit Bu sorunu yeniden oluşturabilirim. Bu doğru yön olsa da, bu cevap geçersizdir.
Uli Köhler

çok aşağı oy rağmen benim için işe yarayan tek tavsiye budur.
bhaskarc

5

Yukarıdaki cevapları yükseltmek için gerçek bir GitHub deposundan yerel bir dizine gerçek bir örnek:

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

Bazen somut bir örnek önerilen ikamelerin açıklığa kavuşturulmasına yardımcı olur.


5

Yanıtların hiçbiri benim durumuma yardımcı olmadı. Windows için geliştiriyorsanız, muhtemelen svn'niz yoktur. Birçok durumda Git'in yüklü olması için kullanıcılara güvenilemez veya başka nedenlerle tüm depoları indirmek istemez. Bu soruyu yanıtlayan Willem van Ketwich ve aztack gibi bazı kişiler bu görevi yerine getirmek için araçlar yaptılar. Ancak, araç kullandığınız dil için yazılmamışsa veya bir üçüncü taraf kitaplığı yüklemek istemiyorsanız bunlar çalışmaz.

Ancak, çok daha kolay bir yol var. GitHub, GET isteklerini kullanarak tek bir dosyayı veya tüm dizinin içeriğini indirmenize izin veren bir API'ya sahiptir . Dizindeki https://api.github.com/repos/:owner/:repo_name/contents/:pathtüm dosyaları numaralandıran bir JSON nesnesi döndüren bir dizine erişebilirsiniz . Numaralandırmaya, dosyanın ham içeriğine, download_urlparametrenin bir bağlantısı dahildir . Dosya daha sonra bu URL kullanılarak indirilebilir.

GET istekleri yapma yeteneğini gerektiren iki adımlı bir süreçtir, ancak bu hemen hemen her dilde, herhangi bir platformda uygulanabilir. Dosya veya dizin almak için kullanılabilir.



4

Ben linux kullanıyorum, bunu ~ / .bashrc içine koyalım, hatta şöyle denir: D $ HOME / .bashrc

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

}

sonra kabuğu yenile

source ~/.bashrc 

sonra git-downloadfolder blablabla ile kullanın: D


3

Ben kök erişimi, ne git, svn, vb (ne de istemiyorum!) CentOS 7 sunucuları ile çalışmak çok herhangi bir github klasörü indirmek için bir python komut dosyası yaptı: https://github.com/andrrrl/github klasöründe dosyalanır-indirici

Kullanımı basit, sadece ilgili bölümü bir github projesinden kopyalayın, projenin https://github.com/MaxCDN/php-maxcdn/ olduğunu ve bazı kaynak dosyaların yalnızca bir klasör olmasını istediğinizi varsayalım . gibi bir şey yap:

$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/
(yoksa hedef klasör oluşturur)

Lxml kütüphanesi gerektirir , ile kurulabilir easy_install lxml
Kök erişiminiz yoksa (benim gibi) bu içeriklerle direktifinize bir .pydistutils.pydosya oluşturabilirsiniz $HOME: [install] user=1 Ve easy_install lxmlsadece çalışacaktır (ref: https://stackoverflow.com/a/ 33464597/591257 ).


3

Sadece 5 adım kaldı

1) indirin SVN dan burada .
2) CMD'yi açın ve aşağıdaki gibi SVN bin dizinine gidin :

cd %ProgramFiles%\SlikSvn\bin

3) Let Bunu indirmek için wan varsayalım var dizin URL ) 4 Şimdi Değiştirin ile 5) Şimdi aynı dizinde indirme klasörüne bu son komutu ateş.
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


Bu özel
depolar

Evet özel paylaşım için çalışmaz, özel yanıt indirmek için GIT önerilir.
Muhammed Ali

2

GitHub'dan bir dizini dışa aktarmak için dizinin URL'sindeki "/ tree / master /" yerine "/ trunk /" yazın.

Örneğin, dizini aşağıdaki URL'den vermek için:

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

aşağıdaki komutu çalıştırın:

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

2

Bunun doğrudan cevabı, aşağıdaki bağlantının ilk kaplumbağa svn etmektir.

https://tortoisesvn.net/downloads.html

kurulum sırasında CLI seçeneğini açın, böylece komut satırı arayüzünden kullanılabilir.

git hub alt dizini bağlantısını kopyalayın.

Misal

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

ağacı / efendi gövdeyle değiştir

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

ve yap

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

dosyalar geçerli dizindeki deeplab klasörüne indirilir.


2

git svn komutunu aşağıdaki şekilde kullanabilirsiniz.

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

Bu şekilde, özellikle Windows kullanıcıları için svn ayarının acısını yaşamak zorunda kalmazsınız.


Teşekkür ederim. Windows için çalıştığını kefil edebilirim. Gerçi gcloud üzerinde çalışmıyor. Git diyor: 'svn' bir komut değil
JOSEPH Blessingh

sudo apt install git-svnWSL üzerinden çalışırken gereklidir.
Jammy Dodger


1

Bu işlevi kullanın, ilk argüman klasörün URL'sidir, ikincisi klasörün indirileceği yerdir:

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

1

git clone --filter Git 2.19'dan

Bu seçenek aslında gereksiz nesneleri sunucudan getirmeyi atlar:

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

Sunucu aşağıdakilerle yapılandırılmalıdır:

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

Git uzak protokolü, v2.19.0'da bu özelliği desteklemek için bir uzantı oluşturuldu, ancak şu anda sunucu desteği yok. Ancak zaten yerel olarak test edilebilir.

Bunu daha ayrıntılı olarak ele aldım: Yalnızca Git deposunun bir alt dizinini nasıl klonlayabilirim?


1
İlginç ve onaylanmış. Sanırım bu 2.19 özelliğinden başka bir yerde bahsetmiş olmalıyım.
VonC

@VonC Sanırım bunu bir kez yenmiştim: stackoverflow.com/questions/2466735/… ve ben sadece XD sürümünden sonra baktım! Elbette 2.22 sürümünden biraz sonra bugün Googling yapıyordum, tüm cevaplar zaten elbette güncellendi ;-) Her zaman başka bir yarı kopya kaldığını her zaman nasıl eğlendirmiyorum ve her zaman bir yıl sonra buldum biraz farklı bir sorgu. Seni git'te yenmeyi düşünmüyorum, çok zor, ama büyücü sayımlarına dikkat et! haha
Ciro Santilli 法轮功

Peki, iyi çalışmaya devam edin: tüm topluluk bu küçük yan rekabetten faydalanacak (ve o zaman diğer cevabınızı oyladım)
VonC

@VonC şaka tabii ki, ben de tabii ki öğelerinizi yükseltmek. Bu puanları şimdi paraya
çevirmenin bir yolunu bulmam gerekiyor

1

Sebep ne olursa olsun, svnçözüm benim için işe yaramıyor ve svnbaşka bir şeye ihtiyacım olmadığı için, bunu yapmaya çalışırken zaman harcamak mantıklı değildi, bu yüzden zaten sahip olduğum araçları kullanarak basit bir çözüm aradım. Bu komut dosyası yalnızca curlve awkGitHub dizinindeki tüm dosyaları indirmek için kullanılır "/:user:repo/contents/:path".

GitHub REST API "GET /repos/:user:repo/contents/:path"komutuna yapılan bir çağrının döndürülen gövdesi, "download_url"bir dizindeki her dosya için bir bağlantı içeren bir nesne döndürür .

Bu komut satırı komut dosyası, REST API'yi kullanarak curl"download_url" satırları hariç tümünü filtreleyen, bağlantılardan alıntı işaretlerini ve virgülleri silen ve ardından başka bir kıvrılma çağrısı kullanarak bağlantıları indiren AWK aracılığıyla sonucu çağırır.

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.0git sparse-checkout , mevcut özelliğin kullanımını kolaylaştıran yeni bir deneysel komutun yanı sıra büyük depolar için bazı önemli performans avantajları içerir. ( GitHub Blogu )

Mevcut sürüme örnek :

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

En önemlisi

  • --sparseyalnızca gitçalışma havuzunun en üst düzey dizin dosyalarını denetler
  • git sparse-checkout add ttalt klasörünü kademeli olarak ekler / denetlergit

Diğer unsurlar

  • git sparse-checkout init kısmi ödemeleri etkinleştirmek için bazı hazırlıklar yapar
  • --filter=blob:noneyalnızca gerekli git nesnelerini indirerek veri alımını optimize eder ( daha fazla bilgi için kısmi klon özelliğine bakın)
  • --cone daha kısıtlı dosya ekleme kalıpları uygulayarak performansı da hızlandırır

GitHub durumu

GitHub, belirli bir kaç depoda etkinken bu özelliği dahili olarak değerlendirmektedir [...]. Özellik dengelendiğinde ve olgunlaştıkça, ilerlemesi ile sizi güncel tutacağız. ( dokümanlar )


Upvoted. Bu komutu klon deseni ayarlanmış olarak stackoverflow.com/a/59515426/6309'da sundum.
VonC
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.