Como baixar .zip do GitHub para um commit em particular?

106

Quero baixar um .zip com o código-fonte de uma biblioteca hospedada no github, mas não quero o master, porque toda vez que faço o download, posso estar baixando uma versão diferente.

Esta biblioteca em particular não possui tags, então não posso usar isso.

Então, como faço o download do source.zip para um commit específico?

ChocoDeveloper
fonte
3
Isso não precisa ser marcado com php ou composer-php, precisa?
Cacovsky

Respostas:

218

Você pode colocar o sha que deseja no url de download:

https://github.com/{username}/{projectname}/archive/{sha}.zip

Como regra geral, se você tiver um url que funcione, poderá substituir "master" pelo sha específico que deseja.

No Unix:

wget https://github.com/{username}/{projectname}/archive/{sha}.zip

Lembre-se de que, se este for um repositório privado, o wget não funcionará, a menos que você também passe um token OAuth.

Aqui estão mais informações sobre isso:

Problemas para baixar tarballs de arquivo Git do Private Repo

Zeki
fonte
7
Não esperava aquela maneira (legal) de fazer isso. Estava esperando comandos git;)
HenchHacker
Verifique também este link - pode estar procurando por isso stackoverflow.com/a/48503019/341117
Ravindra Gullapalli
Você pode usar o sha curto também!
wjandrea
Mesmo que eu use wget -Opara renomear o arquivo ZIP, quando descompactado recebo um nome de diretório SHA1 muito feio. Alguma maneira de evitar isso?
QED
40

Ao visualizar o código do commit, clique no botão "Browse Code" no canto superior direito, depois clique em "Download ZIP".

user2722591
fonte
1
Eles têm um botão 'Clonar ou Baixar' agora, onde você pode 'Baixar o ZIP'.
SureshS
"Clonar ou Baixar" é o novo botão que substitui os antigos botões "Clonar" e "Baixar". O novo botão não faz versões específicas - use a forma como Zeki descreveu
amigo
3
Isso funcionou para mim em fevereiro de 2017. Ele baixou o repositório com alterações no carimbo de data / hora do commit selecionado.
ocean4dream
7

Esta é uma questão antiga, mas gostaria de mencionar que se você quiser apenas o commit como um patch, e não o repositório inteiro no momento do commit, você pode usar:

$ wget http://github.com/username/repo/commit/sha1.patch
#                        ^^^^^^^^ ^^^^        ^^^^
#                        change   change      change

As partes /commite .patchsendo a parte importante.

Isso é particularmente útil se você deseja mesclar uma alteração que foi revertida um tempo atrás e, portanto, não existe no repositório bifurcado.

trojanfoe
fonte