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 référentiel 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 toujours exagéré.
Qu'en est-il d'obtenir plusieurs fichiers du référentiel?
Réponses:
dans la version 1.7.9.5 de git, cela semble fonctionner pour exporter un seul fichier depuis une télécommande
Cela contiendra le contenu du fichier
README.md
.la source
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x
cat README.md
tar -xO
pour sortir vers STDOUT pour la tuyauterie, par exempleFILE=README.md && git archive --remote=ssh://host/pathto/repo.git HEAD "$FILE" | tar -xO "$FILE"
Dans le prolongement de la réponse de Jakub .
git archive
produit une archive tar ou zip, vous devez donc diriger la sortie via tar pour obtenir le contenu du fichier:Enregistre une copie de «nom de fichier» à partir de la tête du référentiel distant dans le répertoire actuel.
le
:path/to/directory
pièce est facultative. S'il est exclu, le fichier récupéré sera enregistré dans<current working dir>/path/to/directory/filename
De plus, si vous souhaitez activer l'utilisation des
git archive --remote
référentiels Git hébergés par git-daemon, vous devez activer l'option de configuration daemon.uploadarch. Voir https://kernel.org/pub/software/scm/git/docs/git-daemon.htmlla source
S'il y a une interface web déployée (comme gitweb, cgit, Gitorious, ginatra), vous pouvez l'utiliser pour télécharger un seul fichier (vue «brute» ou «simple»).
Si un autre côté l'a activé , vous pouvez utiliser l'option 's' de git archive
--remote=<URL>
(et éventuellement la limiter à un répertoire dans lequel se trouve un fichier), par exemple:la source
git config daemon.uploadarch true
sur le référentiel distant. Par défaut, le démon git désactive l'archive distante avec "fatal: erreur distante: accès refusé ou référentiel non exporté: ..."git archive
approche a été mon premier essai - mais j'ai remarqué qu'exigertar
sur la machine client n'était pas vraiment pratique pour les utilisateurs de Windows. Nous avons fini par aller chercher sur notrecgit
serveur local . Cela fonctionne, mais ce n'est pas aussi rapide que je le souhaiterais (et cela nécessite toujours d'être exécutéunix2dos
ou similaire sur les machines Windows puisque nous stockons des fichiers avec des terminaisons de ligne Unix dans le référentiel Git).Pas en général, mais si vous utilisez Github:
Pour moi,
wget
l'URL brute s'est avérée être la meilleure et la plus simple façon de télécharger un fichier particulier.Ouvrez le fichier dans le navigateur et cliquez sur le bouton "Raw". Actualisez maintenant votre navigateur, copiez l'URL et faites un
wget
oucurl
dessus.exemple wget:
wget 'https://github.abc.abc.com/raw/abc/folder1/master/folder2/myfile.py?token=DDDDnkl92Kw8829jhXXoxBaVJIYW-h7zks5Vy9I-wA%3D%3D' -O myfile.py
Exemple de boucle:
curl 'https://example.com/raw.txt' > savedFile.txt
la source
curl https://example.com/raw.txt > savedFile.txt
Pour exporter un seul fichier depuis une télécommande:
Cela va télécharger le fichier
README.md
dans votre répertoire actuel.Si vous souhaitez que le contenu du fichier soit exporté vers STDOUT:
Vous pouvez fournir plusieurs chemins à la fin de la commande.
la source
Cela ressemble à une solution pour moi: http://gitready.com/intermediate/2009/02/27/get-a-file-from-a-specific-revision.html
où
4
signifie quatre révisions à partir de maintenant et~
est un tilde comme mentionné dans le commentaire.la source
git show HEAD:./my_other_file > local_file
si le fichier n'est pas dans votreJ'utilise ceci
la source
wget https://raw.github.com/bk322/bk_automates/master/bkubuntu/bkubuntu.bash
ERROR: Certificate verification error for raw.github.com: unable to get local issuer certificate.
To connect to raw.github.com insecurely, use '--no-check-certificate'.
Une variante nuancée de certaines des réponses ici qui répond à la question du PO:
la source
Si votre référentiel prend en charge les jetons (par exemple GitLab), générez un jeton pour votre utilisateur, puis accédez au fichier que vous téléchargerez et cliquez sur la sortie RAW pour obtenir l'URL. Pour télécharger le fichier, utilisez:
la source
J'ai résolu de cette façon:
Si vous le souhaitez, vous pouvez remplacer "BranchName" par "HEAD"
la source
Il me semble que le moyen le plus simple d'utiliser ce qui suit:
la source
La réponse de Yisrael Dov est simple, mais elle ne permet pas la compression. Vous pouvez l'utiliser
--format=zip
, mais vous ne pouvez pas le décompresser directement avec une commande de canal comme vous pouvez le faire avec tar, vous devez donc l'enregistrer en tant que fichier temporaire. Voici un script:Cela fonctionne aussi avec les répertoires.
la source
Pour un seul fichier, utilisez simplement la commande wget.
Tout d'abord, suivez la photo ci-dessous pour cliquer sur "raw" pour obtenir l'url, sinon vous téléchargerez le code intégré en html.
Ensuite, le navigateur ouvrira une nouvelle page avec le début de l'url avec https://raw.githubusercontent.com/ ...
entrez simplement la commande dans le terminal:
Un moment, le fichier sera mis dans votre dossier.
la source
Si votre référentiel Git est hébergé sur Azure-DevOps (VSTS), vous pouvez récupérer un seul fichier avec l' API Rest .
Le format de cette API ressemble à ceci:
Par exemple:
la source
J'utilise curl, cela fonctionne avec les dépôts publics 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.
la source
Si vous voulez obtenir un fichier à partir d'un hachage spécifique + un référentiel distant, j'ai essayé git-archive et cela n'a pas fonctionné.
Vous devrez utiliser git clone et une fois le référentiel cloné, vous devrez alors utiliser git-archive pour le faire fonctionner.
Je poste une question sur la façon de le faire plus simplement dans les archives git à partir d'un hachage spécifique à distance
la source
pour bitbucket directement depuis le navigateur (j'ai utilisé safari ...) faites un clic droit sur 'View Raw' et choisissez 'Download Linked File':
la source
Si cela ne vous dérange pas de cloner tout le répertoire, cette petite fonction bash / zsh aura pour résultat final de cloner un seul fichier dans votre répertoire actuel (en clonant le dépôt dans un répertoire temporaire et en le supprimant ensuite).
Pro: vous obtenez uniquement le fichier que vous souhaitez
Con: Vous devez encore attendre que le repo entier soit cloné
la source
Solution d'entreprise Github
la source
GITHUB_PERSONAL_ACCESS_TOKEN
?Si votre objectif est simplement de télécharger le fichier, il existe une application sans tracas appelée
gget
:L'exemple ci-dessus téléchargerait un seul fichier à partir du
hugo
référentiel.https://github.com/dpb587/gget
la source
En relation avec la réponse de @Steven Penny, j'utilise également 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:
À moins que vous n'ayez le certificat ou que vous n'accédiez à partir d'un serveur de confiance pour l'installation de gitlabs dont vous avez besoin --no-check-certificate comme @Kos l'a dit. Je préfère cela plutôt que de modifier .wgetrc mais cela dépend de vos besoins.
S'il s'agit d'un gros fichier, vous pourriez envisager d'utiliser l'option -c avec wget. Pour pouvoir continuer à télécharger le fichier d'où vous l'avez laissé si l'intention précédente a échoué au milieu.
la source