Use Git en SSH para extraer directorys específicos

Pregunta total para novatos, pero ¿cuál es la mejor práctica cuando se trata de usar SSH con Git? Estoy trabajando en un proyecto de WordPress. En la raíz tengo gulp y otros files / carpetas de desarrollo como SASS y Scripts que no necesito en el server y en el mismo proyecto tengo mi carpeta de WordPress que contiene un tema y algunos complementos personalizados. Como se puede imaginar cuando el tema o cualquiera de los complementos están listos para ser implementados, no quiero extraer todo en mi repository en el server. En cuanto a un novato, siempre acabo de sacar y empujar todo el repository y usar FTP para cargar lo que necesito al server, entonces, ¿cómo se hace esto con SSH y Git y hay una mejor manera de tener mi configuration?

EDITAR: Para que mi pregunta sea un poco más clara, permítanme darles un ejemplo de lo que creo que es mi problema. En mi carpeta principal del proyecto, tengo una carpeta SASS junto a mi carpeta de WordPress. Todo lo que realmente necesito implementar en el server es la carpeta de WordPress. Mi process de creación que ocurre en mi máquina de desarrollo combina todos los files SASS en un único CSS que luego se coloca en la carpeta de WordPress. Necesito que la carpeta SASS sea rastreada por Git para que cualquier otro desarrollador pueda extraerla y continuar desarrollándola, así que no puedo dejar que git la ignore. Sin embargo, ninguno de esos files SASS debe estar en el server para que WordPress funcione. Simplemente necesito desplegar la carpeta de WordPress y todo lo que contiene.

Entiendo la idea de crear un repository vacío en el server y usar el gancho post-recepción para señalar a la carpeta git que se encuentra fuera de su raíz web para señalar dónde está la raíz web. Pero eso es básicamente cómo funcionan GIT y SSH y eso no responde mi preocupación.

No con Git

Git no está diseñado para extraer solo files o directorys específicos. Es un gráfico acíclico dirigido con blobs binarys como objects y, a veces, múltiples objects se compactan en un solo object más grande.

Debido al layout de Git, su request específica no es posible.

Alternativas

gancho post-recepción

Si su website solo contiene files estáticos simples, está bien enviarlo a un repository git a través de SSH. En realidad, es poco probable que su repository sea grande siempre y cuando no tenga files que no sean de text.

Tomemos como ejemplo la siguiente configuration.

  • /var/lib/www – apache web dir que es la copy clonada de www.git
  • /var/lib/www.git – un repository de git al descubierto.
  • /var/lib/www.git/hooks/post-recieve – Un gancho git del lado del server. Puede ser un script de shell que extrae el repository de www cuando este repository se actualiza.

Ejemplo post-recieve script de gancho post-recieve :

 #!/bin/bash cd /home/sam/sandbox/git-hooks/www unset GIT_DIR git fetch origin master git reset --hard origin/master 

Zip up build en tar.gz

Al final de tu compilation, puedes comprimir tus files en tar.gz. Este file debe estar alojado en alguna parte (quizás las versiones de GitHub si está usando GitHub). Algunas empresas usan el alojamiento de artefactos locales como Nexus o Artifactory.

La idea es: tienes un artefacto probado que tiene un sha256sum específico. El artefacto que testing es exactamente el mismo artefacto que eventualmente pasa a producción.

La inmersión en más detalles, como la continuous integration, la entrega continua y el ciclo de vida de desarrollo del software, podría estar fuera del scope de su pregunta.

No hay mejores prácticas.

Git es para el control de la fuente, no para el deployment. No hay una mejor práctica para usar git de esta manera porque git no es una herramienta de implementación. Tampoco necesita el historial de git en su server. De hecho, no necesitas git en absoluto a less que insistas en usarlo para la implementación. Le invitamos a usarlo de esta manera, pero no es ideal debido a exactamente el tipo de problema que está preguntando.

cual es la mejor practica?

Hay una serie de herramientas que puede usar para manejar sus implementaciones. La mayoría de las herramientas generalmente le permiten configurar una serie de pasos que le permiten implementar el código que desea en el entorno que desea. Podrías usar herramientas simples como Phing o Deployer en el mundo de PHP, o algo más sofisticado como Puppet o Chef si tienes necesidades más complejas. Podrías escribir tus propios scripts bash si lo que necesitas es realmente muy simple. Recomiendo Phing o Deployer dada la información que ha proporcionado. https://deployer.org/ https://www.phing.info/

Simplemente configurará la herramienta que desee enviar a su casilla de destino y copyrá solo los files que desee en el directory que desee en el server, de la manera que desee. Por lo general, tiene los files de copy de scripts en un directory temporal, los descarga, los deshace de ellos y los desata. Después de eso, generalmente hará un trabajo adicional en el server para mover files, cambiar enlaces simbólicos, cualquier otra cosa que necesite hacer.

¿Qué hay de los files comstackdos SASS, ES6 js o cosas estáticas modernas?

Todo lo que necesita hacer es agregar pasos para manejar los files estáticos y hacia dónde desea que vayan. Incluya los files estáticos generados en su tarball cuando inserta cosas, y colóquelos en los directorys correctos en el server una vez que lo haya desencriptado.

Cuando configuró su comstackdor SASS y cualquier otro código estático precomstackdo que pueda tener, lo configuró para crear un file de destino. Es decir, los files de CSS y JS reales que generan. Eso es todo lo que necesita traer, y si tiene el directory de destino configurado para su tema de WordPress, puede que ni siquiera tenga que prestar mucha atención especial a su manejo. Es posible que tenga que moverlos a otro lugar una vez que estén en el server, pero eso depende de la configuration específica de su server, lo que creo que está fuera del scope de esta pregunta.

Notas adicionales:

No preguntaste sobre esto, pero pensé que valía la pena mencionar que no deberías enviar todo el repository de wordpress cada vez que actualices. Al igual que no necesita el código SASS sin comstackr, tampoco necesita volver a empaquetar el núcleo de WordPress. Ni siquiera necesita comprometer el núcleo de WordPress, es una dependencia y no necesita cambiarlo.

Todo lo que debe comprometerse es su tema y código de complemento, y los files estáticos no comstackdos. Los files estáticos comstackdos y las dependencies externas como el núcleo de WordPress no pertenecen a su historial de git. Para fines de implementación, WordPress ya debería estar instalado. Las cosas en sus files comprimidos deben ser solo complementos y temas, y files estáticos adicionales si aún no están allí por alguna razón.

TLDR;

No use git para esto. Use una herramienta como Phing o Deployer. Cree sus files estáticos en su tema, y ​​cree scripts de phing / deployer que solo activen el código que desea, SSH lo transfiere a su server y lo anota en los directorys que desea. Si tiene alguna location especial en el server para sus files estáticos, solo asegúrese de agregar pasos en su secuencia de commands para eso.

Entonces, según su pregunta y comentario, hay tres computadoras involucradas. Hay un server web (cuando dices "server", lo tomo como un server web en este escenario, o la computadora server que ejecuta un progtwig de server web). Hay otro server donde se aloja su git repo. Y, allí está tu estación de trabajo dev. ¿Es esto correcto?

Parece que tienes un repo de git clonado en tu server web. Su práctica / flujo de trabajo actual parece ser (1) (según su expresión "SSH'ed en mi server") que inicia session en el server web a través de SSH (al igual que Telnet) desde su estación de trabajo (SSH es solo un protocolo, que puede ser utilizado para diferentes propósitos). (2) saca de su repository el service alojado (por ejemplo, github), y (3) lo despliega en su directory "www" en el mismo server. ¿Es esto correcto?

(Puedo pensar en un escenario alternativo basado en el uso de la palabra "FTP", etc., pero centrémonos en el escenario anterior, por ahora).

Ahora, su pregunta es, cada vez que "tira" (en su server web), siente que está sacando todo de su repository en su service alojado. Y, ¿hay una mejor manera? ¿Estoy entendiendo tu pregunta correctamente?

De ser así, como sugirió otro comentarista, git (y cualquier sistema de control de versiones, en general) es muy bueno para search "deltas" solamente. Si le preocupa "search todo" cada vez que tira (el paso (2) anterior), entonces su preocupación es infundada.

Ahora, la pregunta es, ¿por qué tienes un repository git en tu server web, si ese es realmente el caso? Esta es una configuration muy legítima y lo he hecho antes (por ejemplo, en EC2). Pero, como mejor práctica, la gente generalmente no hace eso en serveres de "producción". Es porque tienes que "comstackr" tu aplicación web, y realmente no quieres hacer eso en los serveres de producción.

La siguiente pregunta es, ¿qué haces exactamente en el Paso (3)? El process de compilation (cualquiera que sea el process que utilice) generalmente genera un "resultado" que se puede implementar directamente en el server web. (La convención es que el resultado generalmente es una sola carpeta, "público", "www", "dist", o lo que sea, o un solo file (por ejemplo, tar.gz, zip, jar, war), etc.) Independientemente de ya sea que construya la salida desplegable en su estación de trabajo dev (o, una máquina de compilation) o en su server web, generalmente no hace "deltas" en este context. Incluso si solo ha cambiado un solo file (por ejemplo, un file CSS), generalmente comstackrá todo el resultado de nuevo (en lugar de, digamos, simplemente replace el file CSS modificado solamente). Cuando usa FTP para cargar files, etc., puede cargar ciertos files y / o directorys, etc., pero como práctica general, no hacemos eso. Siempre construimos la salida completa desde cero y la implementamos en el server web. (Esto es principalmente para networkingucir los posibles errores de implementación y boost la fiabilidad).

Entonces, para responder a su pregunta, (A) Si está ejecutando git repo en su server web, realmente debería cambiar esa práctica y mover el process de compilation a su computadora dev o una máquina de desarrollo dedicada. (Por cierto, services como github, gitlab, TFS, … brindan el service de compilation para usted). (B) Si actualmente está transfiriendo FTP de forma selectiva los files de su aplicación web a su server web, entonces realmente debería considerar adoptar algún tipo de de construcción formal, y deployment, process avanzando.

Una vez finalizado el process de compilation de SASS, utilice scp o rsync para mover los files al server de prod:

scp -r /[local wordpress dir]/wp-content/themes/your-theme/ [email protected]:/path/to/dir/wordpress/wp-content/themes/

scp -r /[local wordpress dir]/wp-content/plugins/* [email protected]:/path/to/dir/wordpress/wp-content/plugins/

 I am working in a project and using git ssh with bitbucket following is the process i am using it may work for you also if not please correct me : Step 1 ->I have setup git and create repo in bit-bucket. Step 2 ->And setup project with my local and linked with my repo. Step 3 ->connect my server using ssh. Step 4 ->Work in my local and commit and push all changes in my git repo. Step 5 ->Run git pull on ssh so all changes deployed in my server. I am using above process and i love this process.i have used .gitignore file that is not requinetworking for push on my repo. Thanks