Scarica singoli file da GitHub


625

Immagino che molti di voi, sviluppatori, utilizzino qualsiasi VCS e spero che alcuni di voi utilizzino Git. Hai qualche suggerimento o trucco su come ottenere un URL di download per un singolo file in un repository?

Non voglio l'URL per la visualizzazione del file raw; nel caso dei binari non serve a niente.

http://support.github.com/discussions/feature-requests/41-download-single-file

È anche possibile usare GitHub come "download server"?

Se decidiamo di passare a Google Code, la funzionalità menzionata viene presentata qui?

O c'è qualche hosting gratuito e VCS per progetti open source?


3
La funzione Rilasci GitHub è intervenuta per ricoprire questo ruolo.
pkamb,

@RadekSimko DownGit potrebbe aiutarti. Vedi questa risposta
Minhas Kamal,

1
Per GitLab, vedere stackoverflow.com/a/51993087/6309 .
VonC,

Questo non funzionerà per tutti ma se usi python panda puoi semplicemente fare qualcosa del genere (funziona anche per file di grandi dimensioni): fai clic su "Visualizza raw" e quindi copia l'URL dal browser, quindi fai semplicemente questo: df = pd.read_csv ( ' raw.githubusercontent.com/t-davidson/… ')
Graham Hesketh

Risposte:


580

Git non supporta il download di parti del repository. Devi scaricare tutto. Ma dovresti essere in grado di farlo con GitHub.

Quando si visualizza un file, ha un collegamento alla versione "raw". L' URL è costruito in questo modo

https://raw.githubusercontent.com/user/repository/branch/filename

Compilando gli spazi vuoti nell'URL, puoi usare Wget o cURL (con l' -Lopzione, vedi sotto) o qualsiasi altra cosa per scaricare un singolo file. Ancora una volta, non otterrai nessuna delle belle funzioni di controllo della versione utilizzate da Git in questo modo.

Aggiornamento: ho notato che hai detto che non funziona con i file binari. Probabilmente non dovresti usare i file binari nel tuo repository Git, ma GitHub ha una sezione di download per ogni repository che puoi usare per caricare i file. Se hai bisogno di più di un file binario, puoi utilizzare un file .zip. L'URL per scaricare un file caricato è:

https://github.com/downloads/user/repository/filename

Tieni presente che gli URL indicati sopra, dai collegamenti in avanti github.com, verranno reindirizzati a raw.githubusercontent.com. Non è necessario utilizzare direttamente l'URL fornito da questo reindirizzamento HTTP 302 perché, in base a RFC 2616 : "Poiché il reindirizzamento potrebbe essere modificato occasionalmente, il client DOVREBBE continuare a utilizzare l'URI di richiesta per richieste future."


16
Nota per i posteri: l'ho appena testato e l'utilizzo di lavori non elaborati per file binari.
emmby,

1
tentato per un file zip di ~ 10 MB ottenuto errore: Errore: il BLOB è troppo grande
ina il

32
Il formato URL suggerito non funziona per me. Trovo che https://raw.github.com/user/repository/branch/filename funzioni.
Brian C.

5
@BrianC .: (almeno a partire dal 27 agosto 2013) il formato URL indicato nella risposta ( rawdopo il nome del repository) viene ora reindirizzato automaticamente al formato menzionato (nome host raw.github.com). In caso di dubbi, cercare il file in questione su github.com e fare clic sul pulsante "Raw".
mklement0

10
se vuoi ancora usare curl, segui il reindirizzamento usando l'opzione -L sulla riga di comando: curl -L -O github.com/user/repository/raw/branch/filename
Lynx-Lab

560
  1. Vai al file che desideri scaricare.
  2. Fare clic per visualizzare i contenuti all'interno dell'interfaccia utente di GitHub.
  3. In alto a destra, fai clic con il Rawpulsante destro del mouse sul pulsante.
  4. Salva come...

22
Invece di "Salva con nome", copia l'URL. Questo è l'URL del file. Ora puoi scaricarlo con qualsiasi strumento che utilizza l'URL per scaricare: wget, il tuo browser, ecc.
jgomo3

1
@MattParkins L'ho appena provato e penso che funzioni ora per file di grandi dimensioni (anche file binario con l'avviso "non possiamo mostrare file che sono così grandi in questo momento")
lmsurprenant

3
Smetti di fare questo passo dettagliato, usa questa estensione di Chrome per farlo. chrome.google.com/webstore/detail/github-mate/…
Cam Song

3
Mio Dio, una risposta concisa, semplice, intuitiva, di facile lettura e comprensione che non solo ha senso, ma funziona senza bisogno di alcun BS esterno di terze parti! Se solo tutte le risposte StackOverflow fossero così semplici. Grazie.
Padawan,

2
Questo ha funzionato per un singolo file C #. Forse github dovrebbe aggiungere un altro pulsante per il download. Fare clic con il tasto destro su un pulsante non è molto intuitivo.
Nick

39

Puoi usare l'API V3 per ottenere un file raw come questo (avrai bisogno di un token OAuth):

curl -H 'Authorization: token INSERTACCESSTOKENHERE' -H 'Accept: application/vnd.github.v3.raw' -O -L https://api.github.com/repos/owner/repo/contents/path

Tutto questo deve andare su una linea. L' -Oopzione salva il file nella directory corrente. È possibile utilizzare -o filenameper specificare un nome file diverso.

Per ottenere il token OAuth segui le istruzioni qui: https://help.github.com/articles/creating-an-access-token-for-command-line-use

L'ho scritto anche come sintesi: https://gist.github.com/madrobby/9476733


4
Questo è buono, ma purtroppo supporta solo file con dimensioni fino a 1 MiB.
Per Lundberg,

1
Se si esegue questo all'interno di un programma, assicurarsi che User-Agent sia impostato.
Zugwalt,

1
Puoi darci alcuni esempi del percorso. Se il repository è il mio repository e il file che si desidera ottenere è in x / y / z.txt, l'URL sarebbe ... È stato difficile capire che / owner / repo / dovrebbe essere compilato da me. Grazie.
Gray,

Funziona bene ma c'è uno svantaggio. Non sempre l'ultima versione di un file. Prova a modificare un file, non aspettare troppo e prova a recuperare il file usando questo metodo. Otterrai invece solo la versione precedente.
Pacomix,

34

Secondo questa sintesi , puoi usare wget o cURL:

  1. Fare clic sul nome del file in un repository GitHub.
  2. Fare clic su Raw per visualizzare il contenuto del file.
  3. Copia l'URL nel tuo browser.
  4. Nella riga di comando, eseguire:

    • wget --no-check-certificate --content-disposition https://URL-from-step3/
    • curl -LJO https://URL-from-step3/

    Ancora uno: in RHEL7.6, esegui quanto segue:

    • wget https://URL-from-step3/ --output-document=FILE_NAME

Ho usato wgetseguito dal percorso non elaborato del file sorgente C desiderato dopo aver visualizzato il file nel repository github e facendo clic sul pulsante Raw. Ha lavorato come un campione con Raspbian sul mio Raspberry Pi 3.
Richard Chambers il

Sono un po 'in ritardo al gioco, ma questo ha funzionato perfettamente per me. La visualizzazione del contenuto non elaborato e il clic con il pulsante destro del mouse per il download non hanno funzionato nel mio caso perché avevo bisogno del file in un formato specifico, che non era offerto dal mio computer. I comandi in questa risposta scaricano tutto come se fosse.
Seankala,

16

GitHub Mate semplifica il download di singoli file, basta fare clic sull'icona per scaricare, attualmente funziona solo su Chrome.

Scarica GitHub Mate


1
@jcollum Controllato proprio ora, funziona per me. Puoi assicurarti di utilizzare l'ultima versione? o fammi sapere l'errore. Sono felice di aiutarti a farlo funzionare.
Cam Song

2
Sono sulla versione più recente di Chrome, 34.0.1847.116, e questo sicuramente non funziona. Quale sistema operativo stai usando? Sono su OS X Mavericks.
Jahkobi Digital,

Ho provato su Chrome 34 in Windows 7 e OS X Mavericks, entrambi funzionano. abbastanza strano se non funziona eh? Si noti che la cartella non è scaricabile. Forse puoi provare su un'altra macchina.
Cam Song

ok, quel metodo funzionerà solo se hai l'estensione chrome. chrome.google.com/webstore/detail/github-mate/…
humazed

Da questo punto di vista, fai semplicemente clic con il pulsante destro del mouse e salva come file
Thierry Dalon,

16

Puoi usare in curlquesto modo:

curl -OL https://raw.githubusercontent.com/<username>/<repo-name>/<branch-name>/path/to/file

Osignifica che l'arricciatura scarica il contenuto
Lsignifica che l'arricciatura segue il reindirizzamento


15

Questo è ora possibile in GitHub per qualsiasi file. Devi tradurre i tuoi file per raw.github.com. Ad esempio, se il file si trova nel repository in:

https://github.com/<username>/<repo>/some_directory/file.rb

Usando wget puoi prendere il file raw da:

https://raw.github.com/<username>/<repo>/<branch>/some_directory/file.rb

Rails Composer ne è un ottimo esempio.


2
Alcuni file sono ospitati su raw.githubusercontent.com
jcollum il

1
e alcune volte è raw2.github.com solo fyi
jeremy.bass

11

C'è un'estensione di Chrome chiamata Enhanced Github

Aggiungerà un pulsante di download direttamente a destra di ciascun file.

inserisci qui la descrizione dell'immagine


È meglio di Github Mate solo perché non richiede l'autorizzazione "Leggi tutta la cronologia di navigazione"! Ricorda di fare clic con il tasto destro sul pulsante di download> Salva collegamento come.
Gh0sT

È necessario aggiungere token dall'account GitHub.
BartusZak,

questo è sicuro da usare?
Arian saputra

1
@Ariansaputra Lo uso da molto tempo ormai, non ho mai riscontrato problemi. Dovrebbe essere sicuro. Non vedo perché non lo sarebbe
Abraham Murciano Benzadon il

@AbrahamMurcianoBenzadon ringrazia
Arian saputra il

10

Per dare seguito a ciò che ha detto Thomas ma invece per gli utenti di GitHub Enterprise ecco cosa puoi usare.

curl -H 'Authorization: token INSERTACCESSTOKENHERE' -H 'Accept: application/vnd.github.v3.raw' -O -L https://your_domain/api/v3/repos/owner/repo/contents/path

Inoltre ecco la documentazione dell'API https://developer.github.com/v3/repos/contents


1
Puoi darci alcuni esempi del percorso. Se il repository è my-repo e il file che si desidera ottenere è in x / y / z.txt, l'URL sarebbe ... Grazie
Gray,

1
@Grayhttps://your_domain/api/v3/repos/{owner}/my-repo/contents/x/y/z.txt
Gregory Suvalian,

se voglio scaricare un file da un ramo? Come posso farlo?
Carlos Andres,

@CarlosAndres utilizza il parametro ref developer.github.com/v3/repos/contents/#parameters-1
Drew Michel,

9

Nel caso in cui si desideri scaricare un file zip da githubutilizzarewget

wget -O filename.zip https://github.com/downloads/user/repository/filename.zip?raw=true

visita questo sito per maggiori dettagli


Puoi scaricare qualsiasi file, non solo .zip.
enriquetaso,

6

Questo metodo funziona per Windows poiché non ho mai usato MAC, quindi non so quali sono le chiavi alternative in MAC per le chiavi che ho intenzione di menzionare di seguito.

Parliamo dei file CSV. Se si desidera scaricare il file CSV:

  1. Vai a quel particolare set di dati che desideri scaricare e fai clic su di esso.
  2. Vedrai il pulsante "Raw" nella parte in alto a destra del set di dati.
  3. Premi "Alt", quindi fai clic con il pulsante sinistro del mouse sul pulsante "Raw".
  4. L'intero CSV verrà scaricato nel tuo sistema.

Ricorda, devi premere Alt e fare clic con il tasto sinistro contemporaneamente. Basta fare clic sul pulsante "Raw" per aprire il CSV nel browser.

Spero che aiuti.


5

Dovresti semplicemente farlo con l' rawURL del tuo file.

Ad esempio per scaricare il file README di AFNetworking:

curl https://raw.githubusercontent.com/AFNetworking/AFNetworking/master/README.md > ADREADME.md 

Poiché si tratta di un repository pubblico non è necessario disporre di credenziali. Si prega di notare il tipo di url:raw.githubusercontent.com/path/to/file


4

Riepilogo 2019

Esistono diversi modi per gestirlo, a seconda della dimensione del file, se è necessario scaricare cartelle oltre ai file e se si prevede di farlo manualmente o a livello di programmazione.

Di seguito sono elencate sei opzioni. E per coloro che preferiscono una spiegazione più pratica, ho messo insieme un video di YouTube: Scarica singoli file e cartelle da GitHub .

Inoltre, ho pubblicato una risposta simile su StackOverflow per coloro che hanno bisogno di scaricare singole cartelle / directory da GitHub (al contrario dei file).


1. Interfaccia utente di GitHub

  • C'è un pulsante di download sulla maggior parte delle immagini.
  • C'è un pulsante di download sulla homepage del repository. Ovviamente, questo scarica l'intero repository, dopodiché dovrai decomprimere il download e quindi trascinare manualmente i file specifici necessari.

2. Menu contestuale del browser

  • Vai al file su GitHub, fai clic destro sul pulsante "Raw" per aprire il menu di scelta rapida del browser. Da lì, se stai utilizzando Google Chrome, seleziona "Salva collegamento con nome ...". Gli altri browser avranno un'interfaccia utente simile, ma la descrizione della selezione può variare. Ad esempio, verrà elencato come "Scarica file collegato" e "Scarica file collegato come" su Safari.

3. Strumenti di terze parti

  • Esistono diverse estensioni del browser e app Web in grado di gestirlo, di cui DownGit è una di queste. Basta incollare l'URL GitHub nel file e premere il pulsante "Download". Si noti che il collegamento dovrebbe essere la vista del repository ospitato su GitHub.com, al contrario del collegamento diretto al file. Link file di esempio: https://github.com/babel/babel-eslint/blob/master/lib/parse.js.

4. Sovversione

  • GitHub non supporta git-archive (la funzione git che ci consentirebbe di scaricare file specifici). GitHub, tuttavia, supporta una varietà di funzionalità di Subversion, una delle quali possiamo usare a questo scopo. Subversion è un sistema di controllo della versione (un'alternativa a git). Avrai bisogno di Subversion installato. Prendi l'URL GitHub per il file che desideri scaricare. Tuttavia, dovrai modificare questo URL. Si desidera il collegamento al repository, seguito dalla parola "trunk" e termina con il percorso del file nidificato. In altre parole, usando lo stesso link al file che ho menzionato sopra, sostituiremmo "blob / master" con "trunk". Infine, apri un terminale, vai alla directory in cui desideri scaricare il contenuto, digita il seguente comando (sostituendo l'URL con l'URL che hai costruito):svn export https://github.com/babel/babel-eslint/trunk/lib/parse.js

5. cURL

  • Avrai bisogno di cURL installato. Vai al file su GitHub.com, fai clic con il pulsante sinistro del mouse sul pulsante "Raw" per accedere al collegamento diretto al file, copia questo URL, apri un terminale, passa alla directory in cui desideri scaricare il contenuto, digita il seguente comando, sostituendo il nome del file con quello che vuoi dargli un nome, e sostituendo l'URL con quello appena copiato: curl -o parse.js https://raw.githubusercontent.com/babel/babel-eslint/master/lib/parse.js.

6. API GitHub

  • Questo è in realtà ciò che DownGit sta usando sotto il cofano. Utilizzando l'API REST di GitHub , inviare una richiesta GET all'endpoint del contenuto. L'endpoint può essere costruito come segue:https://api.github.com/repos/:owner/:repo/contents/:path . Dopo aver sostituito i segnaposto, un esempio endpoint è: https://api.github.com/repos/babel/babel-eslint/contents/lib/parse.js. Questo ti dà i dati JSON per quel file, incluso un URL di download (lo stesso URL di download che abbiamo usato nell'esempio cURL sopra). Questo metodo non è poi così utile per un singolo file (sarebbe più probabile utilizzarlo per scaricare una cartella specifica, come dettagliato nella risposta che ho collegato sopra).

è mia comprensione che i pulsanti di download non scaricano l'intero repository ... potrei sbagliarmi. ecco un esempio: github.com/googleapis/google-api-php-client se scarichi il repository, non otterrai la directory degli esempi; devi cambiare ramo per farlo.
Albert

1
@albert Buona cattura. Questo in realtà perché hanno specificamente escluso cartelle / file specifici nel file .gitattributes: github.com/googleapis/google-api-php-client/blob/master/…
jabacchetta

bello, grazie per averlo condiviso! TIL ...
albert,

4

Funzionalità di rilascio di GitHub

Anziché creare un collegamento per scaricare un file specifico all'interno del repository, è necessario utilizzare le versioni di GitHub funzione per associare i dati scaricabili (come i binari compilati) alla versione taggata del codice sorgente utilizzato per generare tali dati.

https://github.com/blog/1547-release-your-software

Siamo entusiasti di annunciare le versioni, un flusso di lavoro per il software di spedizione per gli utenti finali. I rilasci sono oggetti di prima classe con log delle modifiche e risorse binarie che presentano una storia completa del progetto al di là dei manufatti Git.

Le versioni sono accompagnate da note di rilascio e collegamenti per scaricare il software o il codice sorgente.

Seguendo le convenzioni di molti progetti Git, le versioni sono legate ai tag Git. Puoi utilizzare un tag esistente o consentire alle versioni di creare il tag quando viene pubblicato.

inserisci qui la descrizione dell'immagine


1
Sì! Questa è la soluzione più semplice, realizzabile direttamente dal tuo browser! 1. Dalla pagina principale del repository, selezionare releases2. Fare clic sul numero di commit. 3. Trova il file desiderato, fai clic sui tre punti ...e seleziona View file4. Fai clic su View rawper scaricare il file !!!
Jonathan Benn,

3

Funzionerebbe sicuramente. Almeno in Chrome. Fare clic con il tasto destro sull'icona "Raw" -> Salva collegamento come .


1
Questo salva il file HTML della pagina github, che include il wrapper github attorno al file.
Gregor Thomas,

@Gregor - Cordiali saluti, non dovrebbe, almeno per le pagine che sono TESTO. In caso di dubbi, fare clic con il tasto SINISTRA sull'icona "Raw". Questo dovrebbe aprire il file di testo nel browser, SENZA HTML. Ora fai clic in qualsiasi punto della pagina e fai "Salva con nome ...". (Oppure seleziona Seleziona tutto / Copia, quindi Incolla dove vuoi)
ToolmakerSteve

3

Per scaricare un file da un repository Github, utilizzare il comando 'curl' con il collegamento al file raw.

curl https://raw.githubusercontent.com/user/repo/filename --output filename

Aggiungi l'opzione --output seguita dal nuovo nome file per scaricare il file raw nel file appena creato.


2
  1. La pagina che hai collegato risponde alla prima domanda.

  2. GitHub ha anche una funzione di download per cose come le versioni.

  3. Google Code non ha Git .

  4. GitHub, Google Code e SourceForge , solo per iniziare, sono hosting gratuito. SourceForge potrebbe ancora fare CVS .


2

Di recente ho trovato un servizio chiamato gitzip ed è anche open source:

sito - http://kinolien.github.io/gitzip/

repo - https://github.com/KinoLien/gitzip

Visita il sito sopra, inserisci l'URL repository o directory, puoi scaricare singoli file o l'intera directory come file zip.


Ma come faccio a scaricare solo jszip.min.jsda quel repository? troll face
Levi Fuller,

apri il file in github e poi vai a raw. Dovresti vedere quindi il codice sorgente del file e quindi puoi scaricarlo usando il browser con il tasto destro del mouse e salva con nome. Per me funziona.
Boris,

2

Ora è possibile scaricare qualsiasi file o cartella particolare all'interno del repository utilizzando questa estensione di Google Chrome:

GitZip per github: link: https://chrome.google.com/webstore/detail/gitzip-for-github/ffabmkklhbepgcgfonabamgnfafbdlkn

Utilizzo:

  1. In qualsiasi pagina di repository pubblici di GitHub.
  2. Basta fare doppio clic sugli articoli necessari.
  3. Fai clic sul pulsante di download in basso a destra.
  4. Vedi la dashboard di avanzamento e attendi il download del trigger del browser.
  5. Ottieni il file ZIP.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine



1

Se ti capita di usare curl e firefox ... potresti usare il componente aggiuntivo cliget che genera una chiamata curl che include tutti i meccanismi di autenticazione (ovvero i cookie).

Quindi fai clic con il rawpulsante destro del mouse sul pulsante Cliget -> "Copia URL per collegamento" e quindi incollalo in una shell. Otterrai il tuo file anche se devi accedere per vederlo.


0
  1. Sul lato destro appena sotto "Clona in Desktop" si dice "Scarica file zip"
  2. Scarica il file zip
  3. Estrai il file

C'è un modo per farlo in modo tale da avere il contenuto del file lfs?
Gufo


0

Oppure prova questo

const https = require('https');
const fs = require('fs');
const DOMAIN = 'raw.githubusercontent.com';

function writeFile(data, fileName) {
  fs.appendFile(fileName, data.toString(), err => {
    if (err) {
      console.log('error in writing file', err);
    }
  });
}

function EOF(data) {
  console.log('EOF');
}

function getFileName(pathToFile) {
  var result = pathToFile.split('/');
  var splitLength = result.length;
  return result[splitLength - 1];
}
function getFile(branchName, username, repoName, ...pathToFile) {
  pathToFile.forEach(item => {
    const path = `/${username}/${repoName}/${branchName}/${item}`;
    const URL = `${DOMAIN}${path}`;
    const options = {
      hostname: DOMAIN,
      path: path
    };
    var fileName = getFileName(item);

    https
      .get(options, function(res) {
        console.log(res.statusCode);
        /* if file not found */
        if (res.statusCode === 404) {
          console.log('FILE NOT FOUND');
        } else {
          /* if file found */
          res.on('data', data => writeFile(data, fileName));
          res.on('end', data => EOF(data));
        }
      })
      .on('error', function(res) {
        console.log('error in reading URL');
      });
  });
}
getFile('master', 'bansalAyush', 'InstagramClone', '.babelrc', 'README.md');

0

Ho usato il seguente formato e ritengo sia importante informare sul percorso.

https://github.com/user/repository/raw/branch/filename

^^^ quanto sopra non è molto completo nella mia mente

https://github.com/<user>/<repoROOTname>/blob/master/<path>/<filename>?raw=true

alcuni hanno detto raw.github.com o raw anziché blob, ma la seconda riga funziona per me e spero che possa aiutare gli altri ...

2 ¢


0

Puoi provare github-files-fetcher , è uno strumento da riga di comando che scarica una singola cartella o file da un repository GitHub.

Pensa a uno scenario reale: stavi visitando la seguente pagina web e volevi scaricare asyncsolo la sottodirectory.

https://github.com/reduxjs/redux/tree/master/examples

mi dispiace per non essere autorizzato a pubblicare immagini.

Con The github-files-fetcher, dovresti prima copiare il urldi quella pagina, che è https://github.com/reduxjs/redux/tree/master/examples/async , quindi eseguire il comando seguente nella riga di comando:

fetcher --url=https://github.com/reduxjs/redux/tree/master/examples/async


-2

Questo è ciò che ha funzionato per me proprio ora ...

  1. Apri il file raw in una scheda separata.

  2. Copia tutto nel tuo blocco note in un nuovo file.

  3. Salvare il file nell'estensione che aveva originariamente

testato con un file php che ho scaricato proprio ora (al momento della risposta)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.