web-dev-qa-db-fra.com

GitHub Api télécharger le lien Zip ou tarball

Il y avait un bon lien ici sur la façon dont la chaîne Zip/tarball est créée

Lorsque je télécharge un Zip depuis github, que représente la chaîne hexadécimale à la fin du nom de fichier?

Mais je regarde l'APIv3 GitHub et j'étais curieux de savoir si je manque quelque chose.

  1. Existe-t-il un moyen d'obtenir le lien Zip/tarball via un appel API?

  2. Sinon, existe-t-il un moyen de créer cette chaîne sans utiliser le binaire ou la bibliothèque git? Autrement dit, puis-je utiliser divers appels d'API pour extraire les données nécessaires et les assembler à l'URL dont j'ai besoin?

Je sais que la deuxième question est un peu déraisonnable pour stackoverflow et c'est un peu un projet amusant pour moi, donc je préférerais la deuxième question si vous me donniez un petit coup de coude dans la bonne direction plutôt que de jeter un extrait de code . Ou juste m'a dit si c'était possible.

55
mkly

Vous pouvez wget sortir du référentiel GitHub pour obtenir un fichier tar ( archive ):

wget --no-check-certificate https://github.com/User/repo/archive/master.tar.gz

# better, if the certificate authorities are present:
wget https://github.com/User/repo/archive/master.tar.gz

vous obtiendrez un fichier nommé "maître" de l'utilisateur "Repo utilisateur" "repo".

RL V3 API mise à jour est:

https://api.github.com/repos/User/repo/:archive_format/:ref
#
# two possibilities for fomat:
https://api.github.com/repos/User/repo/tarball/master
https://api.github.com/repos/User/repo/zipball/master

# from github example:
$curl -L https://api.github.com/repos/octokit/octokit.rb/tarball > octokit.tar.gz

Vous pouvez alors tar xpvf master, obtention de l'archive complète.
Il créera un répertoire suivant la convention de dénomination décrite dans la question que vous avez mentionnée .

Aucun binaire git n'est nécessaire pour obtenir une archive de GitHub, grâce à leur service de téléchargement "Nodeload" .


ligemer proposé dans une édition l'exemple suivant:

Edit 2016-08-25 - Exemple de shell avec Wget, variables et Untar:

#!/bin/bash -ex

# arguments:
# token = $1
# organization = $2
# repo name = $3
# branch = $4

wget --header="Authorization: token ${1}" --header="Accept:application/vnd.github.v3.raw" -O - https://api.github.com/repos/${2}/${3}/tarball/${4} | tar xz

Appelez via:

$ scriptName.sh token my-organization site.com master

La commande ci-dessus téléchargera et extraira le dossier Github dans le même répertoire que le script.


Diogo Quintela suggère dans les commentaires :

L'exemple suivant permet de télécharger, d'extraire et de couper le répertoire de niveau supérieur

curl -L https://api.github.com/repos/octokit/octokit.rb/tarball | tar xz --strip=1 
96
VonC

La syntaxe est décrite dans la documentation :

GET /repos/:owner/:repo/:archive_format/:ref

L'exemple d'URL suivant pointera (via une redirection 302 ) vers une archive Zip de master dans le repo hadley/devtools :

https://api.github.com/repos/hadley/devtools/zipball/master

(L'autre option pour archive_format est tarball.)

Je n'ai aucune idée depuis quand cette API est disponible.

23
krlmlr