git – checkout file único en repository vacío

En el server tengo el repository vacío, que es el origen del process de desarrollo y para simplificar la implementación en el entorno de control de calidad.

Entonces, en post-receive simplemente lo hace

 GIT_WORK_TREE=/home/dev git checkout -f 

Pero a medida que el producto se complica, hay otras cosas que deberían estar sucediendo. Así que ahora se maneja mediante el script deploy.sh que también es rastreado por el repository. Entonces, lo que quiero hacer es poder, en lugar de verificar todo el repository, ejecutar y ejecutar solo deploy.sh . Pensé que algo así funcionaría:

 SOURCE_PATH="/home/dev" GIT_WORK_TREE=$SOURCE_PATH git checkout deploy.sh $SOURCE_PATH"/deploy.sh" 

Pero no funciona dando error:

 error: pathspec 'deploy.sh' did not match any file(s) known to git. 

¿Qué estoy haciendo mal? ¿O es simplemente imposible hacerlo de esta manera?

Como explico en " pago y envío solo un file de git ", no puede pagar solo un file sin clonar ni recuperar primero.

Pero tienes que git show ese file , lo que significa que puedes volcar su contenido en un file /another/path./deploy.sh y ejecutar ese file.

 git-show HEAD:full/repo/path/to/deploy.sh > /another/path./deploy.sh /another/path./deploy.sh 

Como lo ejecuta desde un deploy.sh posterior a la recepción, el git-show mostrará la última versión del file deploy.sh .


La otra alternativa sería intentar

  GIT_WORK_TREE=$SOURCE_PATH git checkout -- path/to/deploy.sh 

Y revise solo ese file, directamente en su tree de trabajo.

El ' -- ' ayuda al command git para entender que es un file, no otro parámetro como una label o una twig con nombre.

De la testing de OP AlexKey , requiere que el tree de trabajo haya sido revisado (completamente) al less una vez.

Este show de git o similar de Git Cat-File Blob funciona más o less bien para los files de text, pero son inútiles para los files binarys.

Mejor enfoque que funciona de manera confiable para cualquier tipo de file e incluso permite realizar compras en carpetas enteras:

 git archive mybranch folder/file.txt --output result.tar 

Crea un file tar con el contenido deseado, exactamente el file que se encuentra en el control de origen. Funciona perfectamente bien con files binarys.

Lo único que debes hacer es extraer este file tar

 tar -xf result.tar 

Ver mi blogpost para más detalles