Pagar archivos Git a una ubicación fuera del repositorio

21

¿Es posible "pagar" a una ubicación fuera del repositorio? Lo que quiero decir es un clon de una rama sin el directorio ".git".

Por ejemplo: use git para administrar un sitio web. Edita algunos archivos, confirma y copia los archivos a un servidor web a través de WebDAV. La ruta WebDAV sería la ubicación fuera del repositorio, que no debería contener el ".git".

Este puede no ser el problema para el que se compiló git, pero ¿es esto posible?

usuario240826
fuente

Respuestas:

19

Sí, esto es ciertamente posible.

Digamos que tengo un repositorio desnudo nombrado /srv/production.giten el sistema / servidor de destino.

En el sistema de destino puedo usar el comando cd /srv/production.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

Si estoy en un repositorio no desnudo, el comando es ligeramente diferente. Digamos que tengo un repositorio no descubierto en /srv/testing. Para verificar que usaríacd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

De hecho, en mi sistema incluso automatizo esto en un enlace posterior a la confirmación en mi production.gitrepositorio. Entonces, cuando empuja a production.gitla última versión, se retira automáticamente a la raíz web.

#!/bin/sh
#
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".

GIT_WORK_TREE=/srv/production-www/ git checkout -f
# ... misc other commands to verify permissions are set correctly.

Si su único acceso al sistema remoto es webdav, ciertamente debería ser posible escribir un enlace posterior a la confirmación que realice el pago en el host webdav, ya sea directamente o en una ubicación temporal, que luego puede escribir una carga.

Zoredache
fuente
buscado en varios lugares ... única solución de trabajo, también limpia!
karthikeayan
6

Si solo quieres los archivos, puedes usarlos git archive. Por lo general, escribe en un archivo como tarballs o ZIP, pero también puede canalizarlo:

git archive master | tar -x -C /some/path

Aquí, masterobviamente , es la rama que desea archivar, y /some/pathcontendrá solo los archivos, no .gito .gitignore.


O puede usar lo git checkout-indexque se parece más a un "pago" de archivos:

git checkout-index -f -a --prefix=/some/path/

Aquí, la -aopción le dice gitque revise todos los archivos. El prefijo se antepondrá a la salida. Alguien también escribió un envoltorio alrededor de esto para dar un git export.

slhck
fuente
2
Creo que estás haciendo esto más difícil de lo que debe ser. Simplemente ejecute GIT_WORK_TREE=/destinationpath git checkout -fmientras su directorio actual está en la parte superior de un repositorio simple, o el subdirectorio .git. Obtendrá un pago a / destinationpath
Zoredache
Ok, debo haber perdido de alguna manera esa opción, +1 para ti.
slhck
1
Encuentro esta opción mucho más intuitiva, para ser honesto. Y menos propenso a errores.
Minix