Je suppose que la plupart d’entre vous, développeurs, utilisez n’importe quel VCS , et j’espère que certains d’entre vous utilisent Git. Avez-vous un conseil ou une astuce pour obtenir une URL de téléchargement pour un seul fichier dans un référentiel?
Je ne veux pas l'URL pour afficher le fichier brut; dans le cas de binaires, c'est pour rien.
http://support.github.com/discussions/feature-requests/41-download-single-file
Est-il même possible d'utiliser GitHub en tant que "serveur de téléchargement"?
Si nous décidons de passer à Google Code, la fonctionnalité mentionnée est-elle présentée ici?
Ou existe-t-il des systèmes d’hébergement et de VCS gratuits pour les projets open-source?
Git ne prend pas en charge le téléchargement de parties du référentiel. Vous devez tout télécharger. Mais vous devriez pouvoir faire cela avec GitHub.
Lorsque vous visualisez un fichier, il contient un lien vers la version "brute". Le URL est construit comme si
https://github.com/user/repository/raw/branch/filename
En remplissant les blancs de l'URL, vous pouvez utiliser Wget ou cURL (avec l'option -L
, voir ci-dessous) ou autre pour télécharger un seul fichier. Encore une fois, vous n'obtiendrez aucune des fonctionnalités de contrôle de version de Nice utilisées par Git.
Mise à jour: j'ai remarqué que vous avez mentionné que cela ne fonctionnait pas pour les fichiers binaires. Vous ne devriez probablement pas utiliser de fichiers binaires dans votre référentiel Git, mais GitHub a une section de téléchargement pour chaque référentiel que vous pouvez utiliser pour télécharger des fichiers. Si vous avez besoin de plus d'un fichier binaire, vous pouvez utiliser un fichier .Zip . L'URL pour télécharger un fichier téléchargé est la suivante:
https://github.com/downloads/user/repository/filename
Notez que les URL indiquées ci-dessus, à partir des liens sur github.com
, seront redirigées vers raw.githubusercontent.com
. Vous ne devez pas utiliser directement l'URL fournie par cette redirection HTTP 302 car, pour RFC 2616 : "La redirection pouvant être modifiée à l'occasion, le client DEVRAIT continuer à utiliser le Request-URI pour les futures requêtes."
Raw
.Vous pouvez utiliser l'API V3 pour obtenir un fichier brut comme celui-ci (vous aurez besoin d'un jeton OAuth):
curl -H 'Authorization: token INSERTACCESSTOKENHERE' -H 'Accept: application/vnd.github.v3.raw' -O -L https://api.github.com/repos/owner/repo/contents/path
Tout cela doit aller sur une seule ligne. L'option -O
enregistre le fichier dans le répertoire en cours. Vous pouvez utiliser -o filename
pour spécifier un nom de fichier différent.
Pour obtenir le jeton OAuth, suivez les instructions suivantes: https://help.github.com/articles/creating-an-access-token-for-command-line-use
J'ai aussi écrit ceci en tant que Gist: https://Gist.github.com/madrobby/9476733
GitHub Mate permet de télécharger un fichier unique sans effort, il suffit de cliquer sur l’icône pour le télécharger, pour le moment, cela ne fonctionne que sur Chrome.
Selon ce Gist , vous pouvez utiliser wget ou cURL:
wget --no-check-certificate --content-disposition https://URL-from-step3/
curl -LJO https://URL-from-step3/
Ceci est maintenant possible dans GitHub pour n'importe quel fichier. Vous devez traduire vos fichiers pour raw.github.com. Par exemple, si votre fichier se trouve dans votre référentiel à l’adresse:
https://github.com/<username>/<repo>/some_directory/file.rb
En utilisant wget, vous pouvez récupérer le fichier brut à partir de:
https://raw.github.com/<username>/<repo>/<branch>/some_directory/file.rb
Rails Composer est un excellent exemple de cela.
Pour revenir à ce que thomasfuchs a dit, mais plutôt aux utilisateurs de GitHub Enterprise, voici ce que vous pouvez utiliser.
curl -H 'Authorization: token INSERTACCESSTOKENHERE' -H 'Accept: application/vnd.github.v3.raw' -O -L https://your_domain/api/v3/repos/owner/repo/contents/path
Voici également la documentation de l'API https://developer.github.com/v3/repos/contents
Vous pouvez utiliser curl
de cette façon:
curl -OL https://raw.githubusercontent.com/<username>/<repo-name>/<branch-name>/path/to/file
O
signifie que curl télécharge le contenuL
signifie que curl suit la redirection
Si vous souhaitez télécharger un fichier Zip depuis github
en utilisant wget
wget -O filename.Zip https://github.com/downloads/user/repository/filename.zip?raw=true
voir ce site web pour plus de détails
Il existe une extension chrome appelée Enhanced Github
Il ajoutera un bouton de téléchargement directement à la droite de chaque fichier.
Vous devriez simplement le faire avec l'URL raw
de votre fichier.
Par exemple, pour télécharger le README d’AFNetworking:
curl https://raw.githubusercontent.com/AFNetworking/AFNetworking/master/README.md > ADREADME.md
Comme il s’agit d’un repo public, vous n’avez pas besoin d’identifiants ..___ Veuillez noter le type d’URL: raw.githubusercontent.com/path/to/file
Cette méthode fonctionne pour Windows car je n’ai jamais utilisé MAC, je ne sais donc pas quelles sont les clés alternatives dans MAC pour les clés que je vais mentionner ci-dessous.
Parlons des fichiers CSV. SI vous voulez télécharger le fichier CSV:
Rappelez-vous, vous devez appuyer sur Alt et clic gauche simultanément. Il suffit de cliquer sur le bouton "Raw" pour ouvrir le fichier CSV dans le navigateur.
J'espère que ça aide.
Cela fonctionnerait certainement. Au moins dans Chrome. Faites un clic droit sur l'icône "Raw" -> Enregistrer le lien sous .
Plutôt que de créer un lien pour télécharger un fichier spécifique dans le référentiel, vous devez utiliser la fonction Releases de GitHub pour associer des données téléchargeables (telles que des fichiers binaires compilés) à la version balisée du code source utilisée pour générer ces données.
https://github.com/blog/1547-release-your-software
Nous sommes ravis d'annoncer le lancement de Releases, un workflow permettant d'envoyer des logiciels aux utilisateurs finaux. Les versions sont des objets de première classe avec des journaux des modifications et des actifs binaires qui présentent un historique complet du projet au-delà des artefacts Git.
Les versions sont accompagnées de notes de publication et de liens permettant de télécharger le logiciel ou le code source.
Suivant les conventions de nombreux projets Git, les versions sont liées aux balises Git. Vous pouvez utiliser une balise existante ou laisser les éditions créer la balise lors de sa publication.
J'ai récemment trouvé un service appelé gitzip
et son source ouverte:
site - http://kinolien.github.io/gitzip/
repo - https://github.com/KinoLien/gitzip
Accédez au site ci-dessus, entrez l’URL du référentiel ou du répertoire. Vous pouvez télécharger des fichiers individuels ou un répertoire complet sous forme de fichier Zip.
La page à laquelle vous avez accédé répond à la première question.
GitHub a également une fonction de téléchargement pour des choses comme les versions.
Google Code n'a pas Git du tout.
GitHub, Google Code et SourceForge , juste pour commencer, sont des hébergements gratuits. SourceForge peut toujours faire CVS .
Il est maintenant possible de télécharger n’importe quel fichier ou dossier dans le référentiel en utilisant cette extension Google Chrome:
GitZip pour github:link: https://chrome.google.com/webstore/detail/gitzip-for-github/ffabmkklhbepgcgfonabamgnfafbdlkn
Pour télécharger un fichier depuis un dépôt Github, utilisez la commande 'curl' avec le lien vers le fichier brut.
curl https://raw.githubusercontent.com/user/repo/filename --output filename
Ajoutez l'option --output suivie du nouveau nom de fichier pour télécharger le fichier brut dans le fichier nouvellement créé.
Si vous utilisez par exemple curl et firefox ... vous pouvez utiliser le module complémentaire cliget qui génère un appel curl incluant tous les mécanismes d'authentification (ou cookies).
Alors faites un clic droit sur le bouton raw
du bouton -> "Copier l’URL du lien" puis collez-le dans un shell. Vous obtiendrez votre fichier même si vous deviez vous connecter pour le consulter.
Vous pouvez essayer github-files-fetcher , il s’agit d’un outil de ligne de commande permettant de télécharger un seul dossier ou fichier à partir d’un dépôt GitHub.
Imaginez un scénario réel: vous visitiez la page Web suivante et souhaitiez télécharger uniquement le sous-répertoire async
.
https://github.com/reduxjs/redux/tree/master/examples
désolé de ne pas être autorisé à poster des images.
Avec le github-files-fetcher
, vous devez d’abord copier la url
de cette page, qui est https://github.com/reduxjs/redux/tree/master/examples/async , puis exécuter la commande ci-dessous en ligne de commande:
fetcher --url=https://github.com/reduxjs/redux/tree/master/examples/async
J'ai utilisé le format suivant et j'estime qu'il est important d'informer sur le chemin.
https://github.com/user/repository/raw/branch/filename
^^^ ce qui précède n'est pas très complet dans mon esprit
https://github.com/<user>/<repoROOTname>/blob/master/<path>/<filename>?raw=true
certains disent raw.github.com ou raw au lieu de blob, mais la 2ème ligne fonctionne pour moi et j'espère que cela aidera les autres ...
2 ¢
Pour les utilisateurs de GitHub Enterprise, vous devez créer une URL dans le schéma suivant.
Invoke-WebRequest http://github.mycompany.com/api/v3/repos/my-org/my-repo/contents/myfiles/file.txt -Headers @{"Authorization"="token 8d795936d2c1b2806587719b9b6456bd16549ad8"}
Les détails peuvent être trouvés ici
http://artisticcheese.blogspot.com/2017/04/how-to-download-individual-files-from.html
Ou essayez ceci
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');