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.
Me parece una solución: http://gitready.com/intermediate/2009/02/27/get-a-file-from-a-specific-revision.html
git show HEAD ~ 4: index.html> local_file
donde 4
significa cuatro revisiones a partir de ahora y ~
es una tilde como se menciona en el comentario.
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.