git - tipos - ¿Es posible hacer un pago escaso sin consultar primero todo el repositorio?
qué tipos de etiquetas existen en git (8)
El clon de Git tiene una opción ( --no-checkout
o -n
) que hace lo que quieres.
En tu lista de comandos, solo cambia:
git clone <path>
A esto:
git clone --no-checkout <path>
A continuación, puede utilizar el pago escaso como se indica en la pregunta.
Estoy trabajando con un repositorio con una gran cantidad de archivos que demora horas en finalizar la compra. Estoy estudiando la posibilidad de si Git funcionaría bien con este tipo de repositorio ahora que admite revisiones dispersas, pero cada ejemplo que puedo encontrar hace lo siguiente:
git clone <path>
git config core.sparsecheckout true
echo <dir> > .git/info/sparse-checkout
git read-tree -m -u HEAD
El problema con esta secuencia de comandos es que el clon original también realiza un pago. Si agrega -n al comando de clonación original, entonces el comando read-tree da como resultado el siguiente error:
error: salida escasa no deja entrada en el directorio de trabajo
¿Cómo se puede hacer el pago disperso sin verificar primero todos los archivos?
Encontré la respuesta que estaba buscando en el one-liner publicado anteriormente por pavek (¡gracias!), Así que quería proporcionar una respuesta completa en una sola respuesta que funciona en Linux (GIT 1.7.1):
1--> mkdir myrepo
2--> cd myrepo
3--> git init
4--> git config core.sparseCheckout true
5--> echo ''path/to/subdir/'' > .git/info/sparse-checkout
6--> git remote add -f origin ssh://...
7--> git pull origin master
Cambié el orden de los comandos un poco, pero eso no parece tener ningún impacto. La clave es la presencia de la barra al final "/" al final de la ruta en el paso 5.
Lamentablemente, ninguno de los anteriores funcionó para mí, por lo que pasé mucho tiempo probando diferentes combinaciones de archivos sparse-checkout
.
En mi caso, quería omitir las carpetas con las configuraciones de IntelliJ IDEA.
Aquí esta lo que hice:
Ejecute git clone https://github.com/myaccount/myrepo.git --no-checkout
Ejecute git config core.sparsecheckout true
Creado .git/info/sparse-checkout
con el siguiente contenido
!.idea/*
!.idea_modules/*
/*
Ejecute ''git checkout -'' para obtener todos los archivos.
Lo más importante para hacerlo funcionar fue agregar /*
después del nombre de la carpeta.
Tengo git 1.9
Prueba esto:
mkdir myrepo
cd myrepo
git init
git config core.sparseCheckout true
git remote add -f origin git://...
echo "path/within_repo/to/desired_subdir/*" > .git/info/sparse-checkout
git checkout [branchname] # ex: master
Ahora verá que tiene un proceso de "eliminación" con solo los archivos de la ruta / within_repo / to / desired_subdir presentes (y en esa ruta).
Tenga en cuenta que en la línea de comandos de Windows no debe citar la ruta, es decir, debe cambiar el sexto comando con este:
echo path/within_repo/to/desired_subdir/* > .git/info/sparse-checkout
si no lo hace obtendrá las comillas en el archivo de salida dispersa, y no funcionará
Sí, escaso checkout descarga todo para descargar una carpeta de git. Ninguno de los métodos anteriores funciona para mí. Para descargar solo una muestra de https://github.com/gearvrf/GearVRf-Demos aquí está lo que hice ...
Para que el usuario de Windows descargue e instale SlikSvn_x84, agregue este "C: / Archivos de programa (x86) / SlikSvn / bin" a la variable de entorno de Ruta. el usuario de mac usa el cliente svn alternativo.
Use la línea de comando:
svn export https://github.com/foobar/Test.git/trunk/foo
Observe el formato de URL:
La URL base es https://github.com/ / trunk agregado al final
Ejemplo: svn export https://github.com/gearvrf/GearVRf-Demos.git/trunk/gvr-renderableview
Espero que esto ayude a alguien. ref: https://.com/a/18324458/5710872
Soy nuevo en git, pero parece que si hago git checkout para cada directorio, entonces funciona. Además, el archivo de salida dispersa debe tener una barra inclinada detrás de cada directorio como se indica. Alguien más experiencia por favor confirme que esto funcionará.
Curiosamente, si realiza una compra en un directorio que no está en el archivo de salida dispersa, parece que no importa. No se muestran en estado de git y git árbol de lectura -m -u HEAD no hace que se elimine. git reset --hard no hace que el directorio sea eliminado tampoco. ¿Alguien más con experiencia se preocupa por comentar qué cree git de los directorios que se prestan pero que no están en el archivo de salida disperso?
Tenía un caso de uso similar, excepto que quería pagar solo la confirmación de una etiqueta y podar los directorios. Usar --depth 1
hace realmente escaso y realmente puede acelerar las cosas.
mkdir myrepo
cd myrepo
git init
git config core.sparseCheckout true
git remote add origin <url> # Note: no -f option
echo "path/within_repo/to/subdir/" > .git/info/sparse-checkout
git fetch --depth 1 origin tag <tagname>
git checkout <tagname>
git 2.9 (junio de 2016) generalizará la --no-checkout
para git worktree add
(el comando que permite trabajar con múltiples árboles de trabajo para un repositorio )
Ver commit ef2a0ac (29 de marzo de 2016) por Ray Zhang ( OneRaynyDay
) .
Ayudado por: Eric Sunshine ( sunshineco
) , y Junio C Hamano ( gitster
) .
(Fusionado por Junio C Hamano - gitster
- in commit 0d8683c , 13 de abril de 2016)
La página man de git worktree
ahora incluye:
--[no-]checkout:
De forma predeterminada,
add
--no-checkout
out a<branch>
, sin embargo,--no-checkout
se puede utilizar para suprimir el proceso de pago para realizar personalizaciones, como la configuración de sparse-checkout .