Crear un repositorio git en el lado del servidor

10 minutos de lectura

Tengo un gran problema y no puedo entender este tema. Tengo un servidor con un sitio web. Creé un repositorio allí con git init. de lo que hice un git add * para agregar todos los archivos de mi servidor al repositorio. de lo que hice un commit para enviar todos los archivos al repositorio.

De lo que lo cloné con git clone ssh://[email protected]/wordpress/.git a mi cliente local.

Todo funcionó bien y obtuve una copia de mi proyecto. No, cambié algo en mi versión local e hice una commit con un push. Busqué en FileZilla pero el contenido del archivo no cambió. En la otra dirección cuando cambié algo en el servidor y pulled a la copia local vi los cambios. ¿Sabes por qué los cambios que hice en la copia local no son visibles en mi servidor?

¡Gracias por tu ayuda!

  • Acaso tú git add files?

    – franco

    8 de noviembre de 2016 a las 4:08


avatar de usuario
Nilpo

Debe enviar los cambios a un repositorio central del que tanto su máquina local como el servidor puedan extraerlos (o agregarlos como controles remotos entre sí). Un servicio como GitHub funciona muy bien para esto. Aquí hay instrucciones para un flujo de trabajo completo que funciona bien para esto. Las instrucciones actualizadas se pueden encontrar en este esencia. Este flujo de trabajo utiliza ganchos para hacer el trabajo pesado para que las actualizaciones de su servidor estén automatizadas.

Uso de Git para administrar un sitio web en vivo

Visión general

Como freelance, construyo muchos sitios web. Son muchos cambios de código para rastrear. Afortunadamente, un flujo de trabajo habilitado para Git con la bifurcación adecuada hace que el seguimiento del proyecto sea breve. Puedo ver fácilmente las funciones de desarrollo en las sucursales, así como una instantánea del código de producción de los sitios. Una buena adición a ese flujo de trabajo es la capacidad de usar Git para enviar actualizaciones a cualquiera de los diversos sitios en los que trabajo mientras confirmo cambios.

Deberá tener Git instalado en sus máquinas de desarrollo, así como en el servidor o servidores donde desea alojar su sitio web. Este proceso incluso se puede adaptar para trabajar con múltiples servidores, como espejos detrás de un balanceador de carga.

Configuración del acceso SSH sin contraseña

El proceso para actualizar un servidor web en vivo se basa en el uso de enlaces de publicación dentro del entorno de Git. Dado que esto está completamente automatizado, no hay oportunidad de ingresar las credenciales de inicio de sesión mientras se establece la conexión SSH con el servidor remoto. Para evitar esto, vamos a configurar el acceso SSH sin contraseña. Para comenzar, necesitará SSH en su servidor.

ssh [email protected]

A continuación, deberá asegurarse de tener un ~/.ssh en el directorio de inicio de su usuario. Si no, continúe y cree uno ahora.

mkdir ~/.ssh

En Mac y Linux, puede aprovechar el poder de la terminal para hacer ambas cosas a la vez.

if [ ! -d ~/.ssh ]; then mkdir ~/.ssh; fi

A continuación, deberá generar una clave SSH pública si aún no tienes uno. Enumere los archivos en su ~/.ssh directorio a consultar.

ls -al ~/.ssh

El archivo que está buscando suele tener un nombre similar a id_rsa.pub. Si no está seguro, puede generar uno nuevo. El siguiente comando creará una clave SSH utilizando el correo electrónico proporcionado como etiqueta.

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Probablemente querrá mantener todas las configuraciones predeterminadas. Esta voluntad debe crear un archivo llamado id_rsa en el ~/.ssh directorio creado anteriormente.

Cuando se le solicite, asegúrese de proporcionar una frase de contraseña SSH segura.

Si tuvo que crear una clave SSH, deberá configurar el programa ssh-agent para usarla.

ssh-add ~/.ssh/id_rsa

Si sabe lo que está haciendo, puede usar una clave SSH existente en su ~/.ssh directorio proporcionando el archivo de clave privada a ssh-agent.

Si todavía no está seguro de lo que está pasando, debe tener dos archivos en su ~/.ssh directorio que corresponde a los archivos de clave pública y privada. Por lo general, la clave pública será un archivo con el mismo nombre con una extensión .pub agregada. Un ejemplo sería un archivo de clave privada llamado id_rsa y un archivo de clave pública llamado id_rsa.pub.

Una vez que haya generado una clave SSH en su máquina local, es hora de colocar el archivo de clave compartida coincidente en el servidor.

ssh [email protected] 'cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_rsa.pub

Esto agregará su clave pública a las claves autorizadas en el servidor remoto. Este proceso se puede repetir desde cada máquina de desarrollo para agregar tantas claves autorizadas como sean necesarias al servidor. Sabrá que lo hizo correctamente cuando cierre su conexión y vuelva a conectarse sin que se le solicite una contraseña.


Configuración del repositorio del servidor remoto

La máquina que pretende usar como servidor de producción en vivo debe tener un repositorio de Git que pueda escribir en un directorio adecuado al que se pueda acceder desde la web. Los metadatos de Git (el directorio .git) no necesitan estar en una ubicación accesible desde la web. En su lugar, puede estar en cualquier lugar que el usuario de SSH pueda escribir.

Configuración de un repositorio básico

Para enviar archivos a su servidor web, deberá tener una copia de su repositorio en su servidor web. Querrá comenzar creando un repositorio simple para albergar su sitio web. El repositorio debe configurarse en algún lugar fuera de su raíz web. Le indicaremos a Git dónde colocar los archivos reales más tarde. Una vez que decida la ubicación de su repositorio, los siguientes comandos crearán el repositorio básico.

mkdir mywebsite.git
cd mywebsite.git
git init --bare

Un repositorio simple contiene todos los metadatos de Git sin HEAD. Esencialmente, esto significa que su repositorio tiene un .git directorio, pero no tiene ningún archivo de trabajo desprotegido. El siguiente paso es crear un enlace de Git que verificará esos archivos cada vez que se lo indique.

Si desea ejecutar comandos git desde el árbol de trabajo separado, deberá configurar la variable ambiental GIT_DIR al camino de mywebsite.git antes de ejecutar cualquier comando.

Agregar un gancho posterior a la recepción

Crear un archivo llamado post-receive en el directorio hooks de tu repositorio con los siguientes contenidos.

#!/bin/sh
GIT_WORK_TREE=/path/to/webroot/of/mywebsite git checkout -f

Una vez que haya creado su enlace, continúe y márquelo como ejecutable.

chmod +x hooks/post-receive

GIT_WORK_TREE le permite indicar a Git dónde debe estar el directorio de trabajo para un repositorio. Esto le permite mantener el repositorio fuera de la raíz web con un árbol de trabajo separado en una ubicación accesible desde la web. Asegúrese de que exista la ruta que especifique, Git no la creará por usted.


Configuración de la máquina de desarrollo local

La máquina de desarrollo local albergará el repositorio del sitio web. Los archivos relevantes se copiarán en el servidor en vivo cada vez que elija impulsar esos cambios. Esto significa que debe mantener una copia de trabajo del repositorio en su máquina de desarrollo. También puede emplear el uso de cualquier repositorio centralizado, incluidos los basados ​​en la nube, como GitHub o BitBucket. Su flujo de trabajo depende completamente de usted. Dado que todos los cambios se envían desde el repositorio local, este proceso no se ve afectado por la forma en que elija manejar su proyecto.

Configuración del repositorio de trabajo

En su máquina de desarrollo, debe tener un repositorio Git en funcionamiento. De lo contrario, puede crear en un directorio de proyecto existente con los siguientes comandos.

git init
git add -A
git commit -m "Initial Commit"

Agregar un repositorio remoto que apunte al servidor web

Una vez que tenga un repositorio en funcionamiento, deberá agregar un apuntador remoto al que configuró en su servidor.

git remote add live ssh://server1.example.com/home/user/mywebsite.git

Asegúrese de que el nombre de host y la ruta que proporcione apunten al servidor y al repositorio que configuró anteriormente. Finalmente, es hora de enviar su sitio web actual al servidor en vivo por primera vez.

git push live +master:refs/head/main

Este comando le indica a Git que envíe la rama principal actual a la live remoto. (No hay necesidad de enviar ninguna otra sucursal). En el futuro, el servidor solo se retirará de la sucursal principal, por lo que no necesitará especificar eso explícitamente cada vez.


Construye algo hermoso

Todo está listo. ¡Es hora de dejar fluir los jugos creativos! Su flujo de trabajo no necesita cambiar en absoluto. Cuando esté listo, enviar cambios al servidor web en vivo es tan simple como ejecutar el siguiente comando.

git push live

Ajuste receive.denycurrentbranch “ignorar” en el servidor elimina una advertencia emitida por versiones recientes de Git cuando envía una actualización a una rama desprotegida en el servidor.


Consejos adicionales

Aquí hay algunos consejos y trucos más que pueden resultarle útiles al emplear este estilo de flujo de trabajo.

Envío de cambios a varios servidores

Puede encontrar la necesidad de empujar a múltiples servidores. Tal vez tenga varios servidores de prueba o su sitio en vivo se refleja en varios servidores detrás de un balanceador de carga. En cualquier caso, empujar a múltiples servidores es tan fácil como agregar más URL al [remote "live"] sección en .git/config.

[remote "live"]
    url = ssh://server1.example.com/home/user/mywebsite.git
    url = ssh://server2.example.com/home/user/mywebsite.git

Ahora emitiendo el comando git push live actualizará todas las direcciones URL que ha agregado a la vez. ¡Simple!

Ignorar los cambios locales en los archivos rastreados

De vez en cuando encontrará que hay archivos que desea rastrear en su repositorio pero que no desea cambiar cada vez que actualiza su sitio web. Un buen ejemplo serían los archivos de configuración en su sitio web que tienen configuraciones específicas para el servidor en el que se encuentra el sitio. Enviar actualizaciones a su sitio normalmente sobrescribiría estos archivos con cualquier versión del archivo que se encuentre en su máquina de desarrollo. Prevenir esto es fácil. SSH en el servidor remoto y navegue al repositorio de Git. Ingrese el siguiente comando, enumerando cada archivo que desea ignorar.

git update-index --assume-unchanged <file...>

Esto le indica a Git que ignore cualquier cambio en los archivos especificados con cualquier pago futuro. Puede revertir este efecto en uno o más archivos en cualquier momento que lo considere necesario.

git update-index --no-assume-unchanged <file...>

Si desea ver una lista de archivos ignorados, también es fácil.

git ls-files -v | grep ^[a-z]

Referencias

pushing el código simplemente actualiza las referencias del repositorio remoto.

No cambia la copia de trabajo desprotegida.

Considere que podría agregar el repositorio de un colega como un control remoto. Si presionó y el comportamiento fue que verificaría automáticamente ese nuevo código, eso afectaría en lo que están trabajando.

Parece que lo que realmente desea es una herramienta de integración continua, ya sea algo con todas las funciones o simplemente un rsync activado desde un anzuelo.

solo debes empujar a un bare repositorio (a menos que sepa exactamente lo que está haciendo; e incluso entonces, solo debe empujar a un bare repositorio).

no deberías clonar una copia de trabajo .git/ directorio.

¿Ha sido útil esta solución?