Hoe kan ik een enkel onbewerkt bestand downloaden van een privé-github-opslagplaats met behulp van de opdrachtregel?

Op de CI-server wil ik een configuratiebestand ophalen dat we op Github onderhouden, zodat het door veel taken kan worden gedeeld. Ik probeer dit bestand via curl te krijgen, maar deze benaderingen mislukken allebei (ik krijg een 404):

# As advised by the oAuth docs
curl -H 'Authorization: token the_token' -L -o setup.sh https://raw.github.com/org/repo/file
# The url of the raw file after clicking to view it
curl -L https://raw.github.com/org/repo/file?login=username&token=the_token 

Antwoord 1, autoriteit 100%

De vorige antwoorden werken niet (of werken niet meer).

Je kunt de V3-API gebruiken om een ​​onbewerkt bestand als dit te krijgen (je hebt een OAuth-token nodig):

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

Dit moet allemaal op één regel. De optie -Oslaat het bestand op in de huidige map. U kunt -o filenamegebruiken om een ​​andere bestandsnaam op te geven.

Volg de instructies hier om de OAuth-token te verkrijgen:

Ik heb dit ook als een kern opgeschreven:

EDIT: API-referenties voor de oplossing zijn als volgt:


Antwoord 2, autoriteit 27%

Als alternatief kunt u een github “personal access token” (https://github.com/settings/tokens gebruiken ):

TOKEN=...
curl -s https://[email protected]/<user or organization>/<repo name>/<branch>/<path to file>/<file_name>

Voorbeeld:

$ curl -s https://[email protected]/concourse/concourse/master/README.md
....

Antwoord 3, autoriteit 11%

Ik weet dat dit een oude vraag is, maar geen van de hierboven voorgestelde oplossingen werkte voor mij. Misschien is de API sindsdien veranderd.

Dit werkte:

curl -H 'Authorization: token [insert your token here]' -o output.txt https://raw.githubusercontent.com/[organization]/[repo]/[branch]/[path to file]


Antwoord 4, autoriteit 5%

Ik worstelde hier een paar minuten mee totdat ik me realiseerde dat je de url alleen tussen aanhalingstekens hoeft te zetten om aan het ampersand te ontsnappen.

curl "https://raw.github.com/org/repo/file?login=username&token=the_token"

Dat werkte voor mij in mijn privé-opslagplaats.


Antwoord 5, autoriteit 5%

Of, als u geen token heeft:

curl --user [your_user] 'https://raw.github.com/path/to/file.config' > file.config

Antwoord 6

Ik kwam een ​​authenticatiefout tegen toen de url werd omgeleid naar Amazon S3:

Slechts één authenticatiemechanisme toegestaan; alleen de X-Amz-Algorithmqueryparameter…

Het wijzigen van de Authorization: token Xheader naar de ?access_token=<token>queryparameter werkte voor mij.


Antwoord 7

  1. open in de browser uw github-repo: klik op bestand
  2. open Developer Tools in browser: selecteer het tabblad Netwerk
  3. in browser github: klik op de downloadknop
  4. pop-up sluiten
  5. in browser dev tools: klik met de rechtermuisknop op de lijst met
    file_name?token=ABAHQCAT6KG...
  6. selecteer kopiëren -> link adres kopiëren

    url heeft de volgende indeling:

    https://raw.githubusercontent.com/<USERNAME>/<PATH>/<FILENAME>?token=ABAHQCAT6KGHYHMG2SLCDT243PH4I

  7. in terminal:

    wget -O myFilename https://raw.githubusercontent.com/<USERNAME>/<PATH>/<FILENAME>?token=ABAHQCAT6KGHYHMG2SLCDT243PH4I

Link is slechts voor een beperkte tijd geldig of u kunt uw token maken: GitHub-artikel


Antwoord 8

Een wat eenvoudigere oplossing IMHO is om Officiële GitHub CLIghte gebruiken .

  1. Eerst moet je ingelogd zijn :
gh auth login

Voor mij is dit commando niet vereist omdat ik al ingelogd ben.

  1. Vervolgens hebben we een API-URL nodig die is gericht op het te downloaden bestand. En bel ghom het te converteren naar een geverifieerde download-URL:
API_URL=https://api.github.com/repos/owner/repo/contents/path/file.ext
curl $(gh api $API_URL --jq .download_url) -o file.ext

Een echt voorbeeld is misschien beter. Hier is het om install_linux.mdte downloaden van ghcli:

API_URL=https://api.github.com/repos/cli/cli/contents/docs/install_linux.md
curl $(gh api $API_URL --jq .download_url) -o install_linux.md

In API_URL:

  • Gebruiker owneris cli
  • Repositorynaam repois ook cli
  • Pad naar bestand (path/file.ext) is docs/install_linux.md

Antwoord 9

We moesten vrij vaak bestanden downloaden van privé GitHub-repo’s en hacky shell-scripts sneden het niet helemaal, dus creëerden we fetch, een open source, platformonafhankelijke tool die het gemakkelijk maakt om bronbestanden te downloaden en activa vrij te geven van een git-tag, commit of branch van publieke en private GitHub-repo’s.

Als u bijvoorbeeld het bestand bazvan versie 0.1.3van een privé GitHub-repo naar /tmpwilt downloaden, doet u het volgende: volgende:

GITHUB_OAUTH_TOKEN="your token"
fetch --repo="https://github.com/foo/bar" --tag="0.1.3" --source-path="/baz" /tmp

Antwoord 10

Gewoon een aanvulling op het geaccepteerde antwoord, als u Github Enterprise gebruikt, is de url iets anders:

curl -H 'Authorization: token [your token]' \
-H 'Accept: application/vnd.github.v3.raw' \
-L https://[your domain]/api/v3/repos/[owner]/[repo-name]/contents/[path of file]

Antwoord 11

Verrassend genoeg werkte geen van de antwoorden voor mij totdat ik een tijdelijke oplossing vond.

U kunt persoonlijke toegangstoken https://github.com/settings/tokensgebruiken zoals beantwoord door @thomasfuchs

Opmerking: tijdens het maken van een token moet u de beheerdersrechten controleren. Zie het gerelateerde probleem

https://github.com/octokit/octokit.net/issues/1812


Antwoord 12

Ik heb het voor github enterprise kunnen laten werken, bedankt voor de bovenstaande suggesties. Ik moest al je suggesties aannemen en proberen en uiteindelijk kon ik het laten werken. Dit zijn de stappen die ik heb gevolgd om het werkend te krijgen.

  1. Maak een persoonlijke token, volg deze stappen:

https://docs .github.com/en/github/authenticating-to-github/creating-a-personal-access-token

  1. Zorg ervoor dat u minimaal de volgende rechten heeft voor de token:

    • repo(Selecteer alles onder repo)
    • admin:org -> read:org(selecteer “read:org” onder “admin:org”)
      voer hier de afbeeldingsbeschrijving in
  2. Gebruik de volgende curl-opdracht om de inhoud op te halen:

curl -H "Authorization: token [yourPersonalToken]" -H "Accept: application/vnd.github.v3.raw" -o [filePath]-content.json -L https://github.[company].com/api/v3/repos/[ORG]/[REPO_NAME]/contents/[PATH_TO_FILE]/content.json?ref=[BRANCH_NAME]

Waar->

[yourPersonalToken] is the token you created.
 [filePath] is a path where you want to save the downloaded copy.
 [company] is the name of company which hosted the github enterprise.
 [ORG] is the github organization is which repo is created.
 [REPO_NAME] is the name of the repository.
 [PATH_TO_FILE] is the path where file is located.
 [BRANCH_NAME] is the name of the branch you want to use, e.g. master, develop etc.

Voorbeeld:

curl -H "Authorization: token 5a86ecda9ff927baaa66fad2af5bee8" -H "Accept: application/vnd.github.v3.raw" -o C:\Downloads\manifest.json -L https://github.example.com/api/v3/repos/cms/cms_one/contents/app/data/manifest.json?ref=master

Antwoord 13

curl -H 'Authorization: token YOUR_TOKEN' \
  -H 'Accept: application/vnd.github.v4.raw' \
  -O \
  -L https://api.github.com/repos/INSERT_OWNER_HERE/INSERT_REPO_HERE/contents/PATH/TO/FILE

Dus als de url van het onbewerkte bestand (indien ingelogd) is

https://raw.githubusercontent.com/mr_coder/my_repo_name/master/my_script
Then 
  -L https://api.github.com/repos/INSERT_OWNER_HERE/INSERT_REPO_HERE/contents/PATH/TO/FILE
becomes
  -L https://api.github.com/repos/mr_coder/my_repo_name/contents/my_script

Opmerking: we hebben API v4


Antwoord 14

Voor GitHub Enterprise en API v3 zag mijn bash-oplossing er als volgt uit (inclusief TOKEN-opruiming / privacy):

TOKEN=yourTokenHere; history -d $((HISTCMD-1)) > /dev/null
curl -H "Authorization: token $TOKEN" \
  -H 'Accept: application/vnd.github.v3.raw' \
  -o file.ext \
  -L http://github.company.com/api/v3/repos/[org]/[repo]/contents/path/file.ext?ref=[branch]
unset TOKEN

Antwoord 15

Ik denk dat het een beetje gevaarlijke en geen goede manier is om een ​​persoonlijk toegangstoken uit te geven dat toegang heeft tot alle repositories, zelfs als je maar een enkel bestand uit mijn privérepository downloadt.

Hoe –

Ik zou graag aanraden om url met token voor één bestandte gebruiken. Maak je geen zorgen. De token-string wordt automatisch gegenereerd door github. U kunt deze url op uw broncodepagina krijgen.

  1. Ga naar de broncodepagina wat je wilt downloaden via curl of wget, enz.
  2. Zoek de ‘onbewerkte’ knop en klik erop.
    voer hier de afbeeldingsbeschrijving in
  3. Nieuwe pagina geopend en kopieer de url. Deze url ziet er als volgt uit:
    (https://raw.githubusercontent.com/USERNAME/REPONAME/BRANCHNAME /FILENAME?token=TOKENSTRING).
  4. Je kunt een bestand downloaden met deze url

Antwoord 16

Ik heb een eenvoudige truc geprobeerd om een ​​GitHub privé .iypnb-bestand te openen in zowel Pycharm als Colab en het werkte goed voor mij.

  1. krijg onbewerkte tekst voor je .ipynb-bestand door op de Raw-knop te drukken, dit zal openen
    wat tekst zoals deze.
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": []
}]
}
  1. open kladblok/teksteditor op os (bijv. Windows) kopieer alle tekst naar een nieuw kladblok-bestand.

  2. kladblok opslaan als naam.ipynb in plaats van naam.txt
    en sla op als bestandstype Alle bestanden(.) in plaats van Tekstdocumenten (*.txt)

  3. open eindelijk het bestand in je IDE of colab.


Antwoord 17

Hieronder zou goed moeten werken. Een “raw” voor je branchnaam (master in dit geval).

curl -L -O https://github.com/your/repo/raw/master/fetch_file.sh


Antwoord 18

Je kunt dit doen met een onbewerkte link.

curl -O https://raw.githubusercontent.com/owner/repo/branchname/path/to/file

Other episodes