¿Cuál es el mecanismo más eficiente (con respecto a los datos transferidos y el espacio en disco utilizado) para obtener el contenido de un solo archivo desde un repositorio de git remoto?
Hasta ahora he logrado llegar a:
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é hay de obtener múltiples archivos del repositorio?
git
git-checkout
sparse-checkout
git-sparse-checkout
dreftymac
fuente
fuente
Respuestas:
en git versión 1.7.9.5 esto parece funcionar para exportar un solo archivo desde un control remoto
Esto capturará el contenido del archivo
README.md
.fuente
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x
cat README.md
tar -xO
salida a STDOUT para tuberías, por ejemploFILE=README.md && git archive --remote=ssh://host/pathto/repo.git HEAD "$FILE" | tar -xO "$FILE"
Siguiendo con la respuesta de Jakub . produce un archivo tar o zip, por lo que debe canalizar la salida a través de tar para obtener el contenido del archivo:
git archive
Guardará una copia del 'nombre de archivo' del HEAD del repositorio remoto en el directorio actual.
La
:path/to/directory
parte 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
repositorios Git alojados en git-daemon, debe habilitar la opción de configuración daemon.uploadarch. Ver https://kernel.org/pub/software/scm/git/docs/git-daemon.htmlfuente
Si hay una interfaz web implementada (como gitweb, cgit, Gitorious, ginatra), puede usarla para descargar un solo archivo (vista 'sin formato' o 'simple').
Si el otro lado lo habilitó , puede usar la opción 's' de git archive
--remote=<URL>
(y posiblemente limitarlo a un directorio en el que reside el archivo dado), por ejemplo:fuente
git config daemon.uploadarch true
en el repositorio remoto. Por defecto, git daemon desactiva el archivo remoto con "fatal: error remoto: acceso denegado o depósito no exportado: ..."git archive
enfoque fue mi primer intento, pero luego noté que exigirtar
en la máquina cliente no era exactamente conveniente para los usuarios de Windows. Terminamos buscando desde nuestrocgit
servidor local . Funciona, pero no es tan rápido como me gustaría que fuera (y aún requiere ejecutarseunix2dos
o similar en máquinas Windows ya que almacenamos archivos con terminaciones de línea Unix en el repositorio de Git).No en general, pero si estás usando Github:
Para mí,
wget
la URL sin procesar resultó ser la mejor y más fácil forma de descargar un archivo en particular.Abra el archivo en el navegador y haga clic en el botón "Sin procesar". Ahora actualice su navegador, copie la url y haga una
wget
ocurl
en ella.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
fuente
curl https://example.com/raw.txt > savedFile.txt
Para exportar un solo archivo desde un control remoto:
Esto descargará el archivo
README.md
a su directorio actual.Si desea exportar el contenido del archivo a STDOUT:
Puede proporcionar múltiples rutas al final del comando.
fuente
Me parece una solución: http://gitready.com/intermediate/2009/02/27/get-a-file-from-a-specific-revision.html
donde
4
significa cuatro revisiones a partir de ahora y~
es una tilde como se menciona en el comentario.fuente
git show HEAD:./my_other_file > local_file
si el archivo no está en su directorio raíz :)yo uso esto
fuente
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'.
Una variante matizada de algunas de las respuestas aquí que responde a la pregunta del OP:
fuente
Si su repositorio admite tokens (por ejemplo, GitLab), genere un token para su usuario, luego navegue hasta el archivo que descargará y haga clic en la salida RAW para obtener la URL. Para descargar el archivo use:
fuente
Resolví de esta manera:
Si lo desea, puede reemplazar "BranchName" por "HEAD"
fuente
Me parece la forma más fácil de usar lo siguiente:
fuente
La respuesta de Israel Dov es sencilla, pero no permite la compresión. Puede usarlo
--format=zip
, pero no puede descomprimirlo directamente con un comando de tubería como puede hacerlo con tar, por lo que debe guardarlo como un archivo temporal. Aquí hay un script:Esto funciona con directorios también.
fuente
Para un solo archivo, solo use el comando wget.
Primero, siga la imagen a continuación para hacer clic en "sin procesar" para obtener la URL; de lo contrario, descargará el código incrustado en html.
Luego, el navegador abrirá una nueva página con url que comienza con https://raw.githubusercontent.com/ ...
solo ingrese el comando en la terminal:
Un momento el archivo se colocará en su carpeta.
fuente
Si su repositorio Git está alojado en Azure-DevOps (VSTS), puede recuperar un solo archivo con la API Rest .
El formato de esta API se ve así:
Por ejemplo:
fuente
Uso curl, funciona con repositorios públicos o aquellos que usan 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.
fuente
Si desea obtener un archivo de un hash específico + un repositorio remoto, probé git-archive y no funcionó.
Tendría que usar git clone y una vez que se clona el repositorio, tendría que usar git-archive para que funcione.
Publico una pregunta sobre cómo hacerlo más simple en el archivo git desde un hash específico desde remoto
fuente
para bitbucket directamente desde el navegador (utilicé safari ...) haga clic con el botón derecho en 'Ver sin formato "y seleccione" Descargar archivo vinculado ":
fuente
Si no le importa clonar todo el directorio, esta pequeña función bash / zsh tendrá el resultado final de clonar un solo archivo en su directorio actual (clonando el repositorio en un directorio temporal y eliminándolo después).
Pro: solo obtienes el archivo que deseas
Con: todavía tienes que esperar a que todo el repositorio se clone
fuente
Solución empresarial Github
fuente
GITHUB_PERSONAL_ACCESS_TOKEN
?Si su objetivo es simplemente descargar el archivo, hay una aplicación sin problemas llamada
gget
:El ejemplo anterior descargaría un solo archivo del
hugo
repositorio.https://github.com/dpb587/gget
fuente
En relación con la respuesta de @Steven Penny, también uso wget. Además, para decidir a qué archivo enviar la salida, uso -O.
Si está utilizando gitlabs, otra posibilidad para la url es:
A menos que tenga el certificado o acceda desde un servidor de confianza para la instalación de gitlabs que necesita, no verifique el certificado, como dijo @Kos. Prefiero eso en lugar de modificar .wgetrc pero depende de tus necesidades.
Si es un archivo grande, puede considerar usar la opción -c con wget. Para poder continuar descargando el archivo desde donde lo dejó si la intención anterior falló en el medio.
fuente