ver tag restaurar recuperar pendientes modificados log crear commits borrados archivos git git-checkout

tag - git ver commits pendientes



Recuperar un solo archivo de un repositorio (14)

¿Cuál es el mecanismo más eficiente (con respecto a los datos transferidos y el espacio de disco utilizado) para obtener el contenido de un solo archivo desde un repositorio remoto de git?

Hasta ahora he logrado encontrar:

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

Esto todavía parece excesivo.

¿Qué tal obtener múltiples archivos del repositorio?


En relación con la respuesta de @Steven Penny, también uso wget. Además, para decidir a qué archivo enviar la salida utilizo -O.

Si está usando gitlabs, otra posibilidad para la url es:

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

A menos que tenga el certificado o acceda desde un servidor de confianza para la instalación de gitlabs, necesita --no-check-certificate como dijo @Kos. Prefiero eso en lugar de modificar .wgetrc, pero depende de tus necesidades.

Si es un archivo grande, podría considerar usar la opción -c con wget. Para poder seguir descargando el archivo desde donde lo dejó, si el intento anterior falló en el medio.



Para exportar un solo archivo desde un control remoto:

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

Esto descargará el archivo README.md a su directorio actual.

Si desea que el contenido del archivo se exporte a STDOUT:

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

Puede proporcionar varias rutas al final del comando.


Para un solo archivo, simplemente use el comando wget.

En primer lugar, siga la imagen a continuación para hacer clic en "raw" para obtener la URL; de lo contrario, descargará el código incrustado en html.

Luego, el navegador abrirá una nueva página con url start con https://raw.githubusercontent.com/ ...

solo ingrese el comando en la terminal:

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

Un rato el archivo se pondrá en su carpeta.


Si desea obtener un archivo de un hash específico + un repositorio remoto, he intentado con git-archive y no funcionó.

Tendría que usar git clone y una vez clonado el repositorio, tendría que usar git-archive para hacerlo funcionar.

Publiqué una pregunta sobre cómo hacerlo de forma más simple en el archivo git desde un hash específico desde el control remoto


Si hay una interfaz web implementada (como gitweb, cgit, Gitorious, ginatra), puede usarla para descargar un solo archivo (vista "en bruto" o "simple").

Si el otro lado lo habilitó , puede usar la --remote=<URL> '' --remote=<URL> '' de git archive (y posiblemente limitarlo a un directorio en el que reside el archivo), por ejemplo:

$ git archive [email protected]:foo/bar.git --prefix=path/to/ HEAD:path/to/ | tar xvf -


Si su repositorio admite tokens (por ejemplo, GitLab), genere un token para su usuario, navegue hasta el archivo que descargará y haga clic en la salida RAW para obtener la URL. Para descargar el archivo, use:

curl --silent --request GET --header ''PRIVATE-TOKEN: replace_with_your_token'' / ''http://git.example.com/foo/bar.sql'' --output /tmp/bar.sql


Siguiendo con la answer de Jakub . git archive produce un git archive tar o zip, por lo que debe canalizar la salida a través de tar para obtener el contenido del archivo:

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

Guardará una copia de ''nombre de archivo'' del HEAD del repositorio remoto en el directorio actual.

La parte del :path/to/directory es opcional. Si se excluye, el archivo recuperado se guardará en <current working dir>/path/to/directory/filename

Además, si desea habilitar el uso de git archive --remote en los repositorios Git alojados por git-daemon, debe habilitar la opción de configuración daemon.uploadarch. Ver https://kernel.org/pub/software/scm/git/docs/git-daemon.html


Una variante matizada de algunas de las respuestas aquí que responde a la pregunta del OP:

git archive [email protected]:foo/bar.git HEAD path/to/file.txt | tar -xO path/to/file.txt > file.txt


Uso curl, funciona con repositorios públicos o aquellos que usan la autenticación básica https a través de una interfaz web.

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

Lo he probado en github y bitbucket, funciona en ambos.


en la versión de Git 1.7.9.5 esto parece funcionar para exportar un solo archivo desde un control remoto

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

Esto incluirá el contenido del archivo README.md .


yo uso esto

$ 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''


No en general, pero si está usando Github:

Para mí, la url en bruto resultó ser la mejor y más fácil manera de descargar un archivo en particular.

Abra el archivo en el navegador y haga clic en el botón "Raw". Ahora actualiza tu navegador, copia la url y haz un wget o curl sobre él.

Ejemplo de wget:

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

Curl ejemplo:

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


La respuesta de Yisrael Dov es la respuesta directa, pero no permite la compresión. Puede usar --format=zip , pero no puede descomprimirlo directamente con un comando pipe como puede hacerlo con tar, por lo que debe guardarlo como un archivo temporal. Aquí hay un script:

#!/bin/bash BASENAME=$0 function usage { echo "usage: $BASENAME <remote-repo> <file> ..." exit 1 } [ 2 -gt "$#" ] && { usage; } REPO=$1 shift FILES=$@ TMPFILE=`mktemp`.zip git archive -9 --remote=$REPO HEAD $FILES -o $TMPFILE unzip $TMPFILE rm $TMPFILE

Esto también funciona con directorios.