2011-09-08 17 views
6

Su una macchina di produzione, voglio controllare un file specifico a una revisione specifica da GitHub per facilitare la migrazione del database. Non voglio eseguire il checkout (o anche clonare) l'intero repository del codice sorgente (perché questo è il mio ambiente di produzione). Come posso tirare solo il file che sto cercando?Come posso ritirare un singolo file da GitHub senza clonare l'intero repository?

+2

già risolto per certo: http://stackoverflow.com/questions/610208/how-to-retrieve-a-single-file-from-specific -revisione-in-git http://stackoverflow.com/questions/692246/how-do-i-revert-one-file-to-the-last-commit-in-git http://stackoverflow.com/domande/6580641/how-to-checkout-a-single-file-in-git http://stackoverflow.com/questions/1125476/git-retrieve-a-single-file-from-a-repository – fuzzyalej

+1

Tutto di quanto sopra sono per lo più irrilevanti, eccetto http://stackoverflow.com/questions/1125476/git-retrieve-a-single-file-from-a-repository, ma sfortunatamente non è possibile usare '' --remote = '' con GitHub (http://groups.google.com/group/github/browse_thread/thread/cfcbcb1dc5f41f16). –

risposta

3

Per quanto posso dire, il download di un singolo file da un repository git servito su http è attualmente impossibile. Credo che GitHub abbia una funzione di "download" separata che vogliono invece utilizzare (ma non so se supporterà il download di un singolo file).

La soluzione alternativa consiste nel clonare l'intero repository (!) E quindi estrarre il file di interesse. Ecco una funzione bash, che fa il lavoro:

git-cat() { 
    if [ -z "$1" -o -z "$2" ]; then 
     echo "Usage: git-cat REPO_URL FILE [BRANCH]" 
     exit 1 
    fi 
    tmprepo=`mktemp -d -t gitrepo.XXXXXX` 
    reponame=$1 
    filename=$2 
    branchname=$3 
    if [ -z "$branchname" ]; then 
     branchname="master" 
    fi 
    git clone -nq $reponame $tmprepo && 
    git --git-dir $tmprepo/.git show ${branchname}:${filename} && 
    rm -rf $tmprepo 
} 
8

Lo faccio con per le dorsali in questo modo

curl -O https://raw.github.com/documentcloud/backbone/master/backbone-min.js 
1

La mia soluzione è come in primo post. Ma provo a spiegare un po 'di più. C'è un pulsante "Raw" su GitHub per ogni file - mostrerà solo testo nel browser. Inoltre, puoi usare quell'URL.

Ad esempio, ho repo https://github.com/MasterSergius/conf_files.git e voglio ottenere il mio file .vimrc, ecco il link al mio file: https://raw.githubusercontent.com/MasterSergius/conf_files/master/.vimrc penso, che da questo modello che si può intuire anche file di URL da pronti contro termine e file percorso completo. Così, ora posso scaricarlo con l'arricciatura:

curl https://raw.githubusercontent.com/MasterSergius/conf_files/master/.vimrc -o ~/.vimrc 
Problemi correlati