Extraire un seul fichier d'un dépôt

Quel est le mécanisme le plus efficace (en ce qui concerne les données transférées et l'espace disque utilisé) pour obtenir le contenu d'un seul fichier à partir d'un dépôt git distant?

Jusqu'à présent, j'ai réussi à trouver:

git clone --no-checkout --depth 1 [email protected]:foo/bar.git && cd bar && git show HEAD:path/to/file.txt

cela semble encore exagéré.

Qu'en est-il de l'obtention de plusieurs fichiers à partir de la pension?

181
demandé sur Kara 2009-07-14 17:42:48
la source

17 ответов

dans la version git 1.7.9.5 cela semble fonctionner pour exporter un seul fichier à partir d'un distant

git archive --remote=ssh://host/pathto/repo.git HEAD README.md

ce fichier contient le contenu du fichier README.md .

119
répondu Yisrael Dov 2015-04-21 06:19:21
la source

faisant suite à Jakub 's answer . git archive produit une archive tar ou zip, donc vous devez Piper la sortie à travers tar pour obtenir le contenu du fichier:

git archive --remote=git://git.foo.com/project.git HEAD:path/to/directory filename | tar -x

sauvegardera une copie de "nom de fichier" à partir de la tête du dépôt distant dans le répertoire courant.

la partie :path/to/directory est facultative. En cas d'exclusion, le fichier récupéré sera sauvegardé en <current working dir>/path/to/directory/filename

de plus, si vous voulez activer l'utilisation de git archive --remote sur les dépôts Git hébergés par git-daemon, vous devez activer le daemon.option de configuration de uploadarch. Voir https://kernel.org/pub/software/scm/git/docs/git-daemon.html

47
répondu Robert Knight 2017-12-13 19:26:28
la source

S'il y a interface web déployée (comme gitweb, cgit, gitorious, ginatra), vous pouvez l'utiliser pour télécharger un seul fichier ('raw' ou 'plain' view).

si l'autre côté activé , vous pouvez utiliser git archive ' s ' --remote=<URL> 'option (et éventuellement le limiter à un dossier de répertoire donné réside dans), par exemple:

$ git archive [email protected]:foo/bar.git --prefix=path/to/ HEAD:path/to/ |  tar xvf -
41
répondu Jakub Narębski 2009-07-14 19:50:46
la source

pas en général mais si vous utilisez Github:

pour moi wget pour l'url raw s'est avéré être la meilleure et la plus facile façon de télécharger un fichier particulier.

Ouvrir le fichier dans le navigateur et cliquez sur "Raw". Maintenant rafraîchissez votre navigateur, copiez l'url et faites un wget ou curl dessus.

wget exemple:

wget 'https://github.abc.abc.com/raw/abc/folder1/master/folder2/myfile.py?token=DDDDnkl92Kw8829jhXXoxBaVJIYW-h7zks5Vy9I-wA%3D%3D' -O myfile.py

Curl exemple:

curl 'https://example.com/raw.txt' > savedFile.txt

19
répondu abc 2017-10-02 17:18:27
la source

pour exporter un seul fichier à partir d'une télécommande:

git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x

téléchargez le fichier README.md dans votre répertoire courant.

si vous voulez que le contenu du fichier soit exporté vers STDOUT:

git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -xO

Vous pouvez fournir plusieurs chemins à la fin de la commande.

11
répondu Kousha 2015-09-11 00:45:09
la source

il ressemble à une solution pour moi: http://gitready.com/intermediate/2009/02/27/get-a-file-from-a-specific-revision.html

git show HEAD~4:index.html > fichier local_file

4 signifie quatre révisions à partir de maintenant et ~ est un tilde comme mentionné dans le commentaire.

8
répondu Michal Stefanow 2013-01-18 17:02:28
la source

j'utilise ce

$ cat ~/.wgetrc
check_certificate = off

$ wget https://raw.github.com/jquery/jquery/master/grunt.js
HTTP request sent, awaiting response... 200 OK
Length: 11339 (11K) [text/plain]
Saving to: `grunt.js'
5
répondu Steven Penny 2012-09-04 07:43:42
la source

une variante nuancée de certaines des réponses ici qui répond à la question de L'OP:

git archive [email protected]:foo/bar.git \
  HEAD path/to/file.txt | tar -xO path/to/file.txt > file.txt
3
répondu Willem van Ketwich 2018-09-14 18:58:59
la source

si votre dépôt prend en charge les tokens (par exemple GitLab), alors créez un token pour votre utilisateur, puis naviguez vers le fichier que vous téléchargez et cliquez sur la sortie brute pour obtenir l'URL. Pour télécharger le fichier utiliser:

curl --silent --request GET --header 'PRIVATE-TOKEN: replace_with_your_token' \
'http://git.example.com/foo/bar.sql' --output /tmp/bar.sql
2
répondu panticz.de 2018-03-06 15:48:16
la source

la réponse de Yisrael Dov est simple, mais elle ne permet pas la compression. Vous pouvez utiliser --format=zip , mais vous ne pouvez pas le décompresser directement avec une commande pipe comme vous le pouvez avec tar, donc vous devez le sauvegarder en tant que fichier temporaire. Voici un script:

#!/bin/bash

BASENAME="151900920"

function usage {
    echo "usage: $BASENAME <remote-repo> <file> ..."
    exit 1
}

[ 2 -gt "$#" ] && { usage; }

REPO=
shift
[email protected]

TMPFILE=`mktemp`.zip
git archive -9 --remote=$REPO HEAD $FILES -o $TMPFILE
unzip $TMPFILE
rm $TMPFILE

cela fonctionne aussi avec les répertoires.

1
répondu naught101 2017-05-23 14:54:43
la source

j'utilise curl, il fonctionne avec des pensions publiques ou ceux qui utilisent l'authentification de base https via une interface web.

curl -L --retry 20 --retry-delay 2 -O https://github.com/ACCOUNT/REPO/raw/master/PATH/TO/FILE/FILE.TXT -u USER:PASSWORD

je l'ai testé sur github et bitbucket, fonctionne sur les deux.

0
répondu JasonS 2015-06-04 05:24:25
la source

Si vous voulez obtenir un fichier à partir d'un hash + un dépôt distant j'ai essayé git archive et ça ne fonctionne pas.

vous devrez utiliser le clone git et une fois le dépôt cloné, vous devrez utiliser git-archive pour le faire fonctionner.

je poste une question sur la façon de le faire plus simple dans git archive à partir d'un hachage spécifique à partir de la télécommande

0
répondu Fernanda Martins 2017-05-23 15:18:18
la source

pour un seul fichier, il suffit d'utiliser la commande wget.

tout d'abord, suivez l'image ci-dessous pour cliquer sur "raw" pour obtenir l'url, sinon vous allez télécharger du code intégré dans html. enter image description here

ensuite, le navigateur ouvrira une nouvelle page avec url commencer par https://raw.githubusercontent.com / ...

il suffit d'entrer la commande dans le terminal:

#wget https://raw.githubusercontent.com/...

un moment le fichier va mettre dans votre dossier.

0
répondu malajisi 2017-06-16 18:52:41
la source

pour bitbucket directement à partir du navigateur (j'ai utilisé safari...) cliquez avec le bouton droit de la souris sur 'View Raw' et choisissez "Download Linked File":

enter image description here

0
répondu ingconti 2018-08-30 08:59:23
la source

si votre dépôt Git est hébergé sur Azure-DevOps (VSTS), vous pouvez récupérer un seul fichier avec Rest API .

le format de cette API ressemble à ceci:

 https://dev.azure.com/{organization}/_apis/git/repositories/{repositoryId}/items?path={pathToFile}&api-version=4.1?download=true

par exemple:

 https://dev.azure.com/{organization}/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/items?scopePath=/MyWebSite/MyWebSite/Views/Home/_Home.cshtml&download=true&api-version=4.1
0
répondu Shayki Abramczyk 2018-09-16 14:07:42
la source

j'ai résolu de cette façon:

git archive --remote=ssh://[email protected]/user/mi-repo.git BranchName /path-to-file/file_name | tar -xO /path-to-file/file_name > /path-to-save-the-file/file_name

si vous voulez, vous pouvez remplacer "BranchName" par "HEAD"

0
répondu matiasmasca 2018-09-22 21:24:34
la source

en lien avec la réponse de @Steven Penny, j'utilise aussi wget. De plus, pour décider quel fichier Envoyer la sortie à j'utilise-O.

si vous utilisez gitlabs une autre possibilité pour l'url est:

wget "https://git.labs.your-server/your-repo/raw/master/<path-to-file>" -O <output-file>

sauf si vous avez le certificat ou que vous avez accès à partir d'un serveur de confiance pour l'installation gitlabs dont vous avez besoin --no-check-certificate comme @Kos l'a dit. Je préfère ça plutôt que de la modifier .wgetrc mais cela dépend de vos besoins.

S'il s'agit d'un gros fichier, vous pouvez envisager d'utiliser l'option-c avec wget. Pour être en mesure de continuer à télécharger le fichier à partir de là où vous l'avez laissé si l'intention précédente a échoué au milieu.

-2
répondu Hector Llorens 2014-06-19 15:44:44
la source

Autres questions sur git git-checkout