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?
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.
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.
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.
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:Aquí,
master
obviamente , es la rama que desea archivar, y/some/path
contendrá solo los archivos, no.git
o.gitignore
.O puede usar lo
git checkout-index
que se parece más a un "pago" de archivos:Aquí, la
-a
opción le dicegit
que revise todos los archivos. El prefijo se antepondrá a la salida. Alguien también escribió un envoltorio alrededor de esto para dar ungit export
.fuente
GIT_WORK_TREE=/destinationpath git checkout -f
mientras su directorio actual está en la parte superior de un repositorio simple, o el subdirectorio .git. Obtendrá un pago a / destinationpath