Tag: git

Repositorio central git en el servidor

Hace algún tiempo me pareció curioso ver como mis compañeros de desarrollo web realizaban sus cambios en su máquina (local), los subían a un repositorio remoto (remote), accedían al servidor donde estaba en ambiente producción, actualizaban y veían sus cambios sin hacer mucho esfuerzo. Años después pude “descifrarlo” y quiero compartirlo por dos razones: 1) sé que se me va a olvidar y quiero tenerlo registrado en alguna parte y 2) compartilor por si alguien quiere aprenderlo. Agradezco a Rodolfo Terrones quien me compartió conocimiento para poder realizar este post. Es desarrollador Web y iOS por si están interesados.

En este post quiero hablar de como montar un repositorio central git en el servidor (así pude encontrarlo en Internet, si alguien tiene el concepto correcto por favor compártanlo). La idea que mostraré es la siguiente:

(Principalmente en web): un programador web termina de desarrollar los cambios correspondientes en su máquina (en local) y ya está listo para mandarlos al ambiente de producción. Para eso deben subir sus cambios al repositorio donde está el ambiente productivo que es en el servidor, posteriormente ingresa un adminsitrador al servidor vía SSH y baja las actualizaciones hechas por los desarrolladores para que se vean reflejadas en el ambiente de producción.

Bueno, pues para poder replicar el proceso anterior realizaremos los siguientes pasos:

Crear un repositorio vacío en el servidor

Este repositorio va a fungir como el repositorio central que recibirá las actualizaciones de los desarrolladores y que las liberará a producción, se podría decir que es la “aduana” que se encargará de administrar y controlar los cambios. Para realizar esto, primero debemos acceder a nuestro servidor por SSH cuyo comando es:

ssh -p puerto usuario@dirección-ip

donde:

[puerto]: puerto en donde se puede tener acceso a SSH. Algo muy importante para tomar en cuenta, es que el puerto por default de este protocolo es el 22, sin embargo algunos servidores ofrecen un puerto diferente por cuestiones de seguridad y es necesario especificarlo, de lo contrario no podrán acceder. Si el puerto de SSH SI es el predeterminado, solo basta con omitir “-p  [puerto]” y podrán ingresar.

usuario: es el identificador del usuario que tiene acceso por SSH. Estos usuarios deberán ser administrador desde el servidor

dirección-ip: es la URL donde se podrá acceder

Al presionar enter, consola solicitará una contraseña para poder acceder. Ya una vez dentro, deberán posicionarse (desde la Terminal) en la carpeta donde quieren se almacene su proyecto. Comúnmente todos los sitios web están alojados en una carpeta pública o en la carpeta de subdirectorio. Estando posicionados ahí crearán una carpeta tal y como se muestra:

mkdir mirepositorio.git

donde:

mirepositorio: nombre real del repositorio. Por ejemplo: fcojlanda.git

Ya creado la carpeta, accedemos a ella con:

cd mirepositorio.git

y acto seguido ingresaremos el comando git

git –bare init

Pero, ¿qué es –bare?. De acuerdo con la documentación de git, hay dos formas de inicializar un repositorio: git init y git –bare init. El primero es un espacio de trabajo, es decir, donde se realizan los cambios, solamente para trabajar; en cambio el segundo almacena el historial de cambios y las copias de trabajo de los archivos del proyecto y sirve para compartir, consumir y enviar los cambios generados.

Con esto, terminamos la primera parte.

Crear el repositorio de trabajo en local

Ahora vamos a crear el repositorio de trabajo donde haremos todas nuestras modificaciones. Para eso, accedemos por terminal a la carpeta raíz donde está nuestro proyecto con el siguiente comando

cd dirección/de/mi/repositorio

y posteriormente inicializamos el repositorio git

git init

Con esto ya preparamos nuestro espacio de trabajo. Ahora debemos agregar el repositorio remoto a donde enviaremos nuestros cambios hechos en el repositorio local. Debemos recordar que es un repositorio donde nos vamos a comunicar con el protocolo SSH, por lo que agregamos nuestro repo remoto de la siguiente forma:

git remote add origin ssh://usuario@url_ip:puerto/dirección/del/repositorio/central/mirepositorio.git/

Donde:

git remote add origin: comando para agregar el repositorio remoto con nombre “origin”

ssh: protocolo que se usará para conectarse

usuario: el usuario con el que se pretende acceder con permisos correspondientes

url_ip: dirección del servidor

puerto: puerto para aceder a SSH. NOTA: si se tiene acceso desde el puerto 22 que es el predeterminado, entonces se omite este parámetro

puerto/dirección/del/repositorio/central/mirepositorio.git/: path de la carpeta donde está ubicado el repositorio central.

Una vez agregado, procedemos a agregar el commit inicial, primero agregando todos los archivos de forma recursiva:

git add -A

después encapsularlos en el commit:

git commit -m “Este es el commit inicial”

y finalmente inauguramos el repositorio central enviando los cambios:

git push origin master

 

Actualizar cambios del repositorio central desde el server

Y ahora, llegamos al último paso que es actualizar los cambios en el servidor y por fin se vean reflejados en producción. Para esto, nos vamos a posicionar en donde queremos descargar dichas actualizaciones (para web, comúnmente pueden almacenarse en la carpeta “public_html”), y una vez ahí vamos a clonar el proyecto bare que creamos anteriormente. Para esto, aplicamos el siguiente comando en Terminal:

git clone ssh://usuario@url_ip:puerto/directorio/del/repositorio/bare/mirepositorio.git/

donde:

git clone: comando git para clonar el proyecto

ssh: protocolo de comunicación

usuario: usuario con el que se accederá

url_ip: dirección IP del servidor

puerto: puerto para la comunicación SSH. NOTA: si el puerto de acceso es el pretedeterminado 22, este valor puede ser omitido.

/directorio/del/repositorio/bare/mirepositorio.git/: ubicación a nivel disco duro donde se encuentra almacenado el repositorio.

Una vez ingresado, nos pedirán nos autentiquemos y finalmente, habremos clonado el proyecto. Para asegurarnos que así sea, escribiremos en la carpeta de recepción del repositorio el comando:

git pull origin master

y con esto, tendremos nuestros cambios en producción.

 

Actualización de código

¿Por qué hacer esto? El proceso de subir un proyecto actualizado sin este método podría significar horas de actualización por que se está copiando TODO el proyecto, en cambio con un repositorio el esfuerzo es menos ya que solo agrega el código que se cambió únicamente, y no todo. Para llevar a cambo este proceso de actualización primero comenzamos desde el repositorio del área de trabajo con los siguientes comandos:

git add -A

 

git commit -m “Mensaje del commit”

 

git push origin master

 

Y una vez subidos los cambios, procedemos a bajarlos accediendo al servidor nuevamente

ssh -p puerto usuario@dirección-ip

y escribir el comando para “jalar” los cambios en git

git pull origin master

En realidad, este procedimiento es muy ágil y práctico que nos liberará de muchos problemas de control en el versionado, tiempo de actualización y posibles confusiones en el proceso de liberación.

Git básico

Git es software que se utiliza para mantenimiento y la gestión de versiones en sistemas complejos donde están involucrados varios integrantes en el proyecto o la cantidad de archivos es considerable, buscando así confiabilidad en el proceso de desarrollo y eficiencia, pero por estas mismas razones, a veces puede ser un poco confuso entenderlo. Es por esta razón que en este post el objetivo es mostrarles algunos comandos básicos de Git para sobrevivir en el ámbito laboral.

git init

Crea un repositorio vacío o bien reinicializa uno ya existente. Esto permite que puedas comenzar a trabajar con cualquier repositorio que no reconoce los comandos de git.

git clone <dirección>

Te permite crear una copia de la rama del master del proyecto almacenado remotamente a tu máquina (local). La dirección normalmente se encuentra en la página del proyecto y comúnmente termina en .git

git clone -b <rama> <dirección>

Te permite descargar una copia del proyecto pero solamente de la rama que ingreses. La dirección normalmente se encuentra en el repositorio del proyecto y comúnmente termina en .git

git add -A

Agrega  todo los archivos con los que trabajaste (modificados, nuevos y eliminados) para el siguiente commit. El comando git add se considera el primero de todos para realizar el proceso de commit hacia el repositorio remoto. Es decir, no ignora ningún tipo de cambio.

git add .

Realiza la misma acción que el comando pasado.

git add -u

Realiza una actualización de todos los archivos ya existentes solamente. Si agregaste o eliminaste, éstos no se visualizarán.

git commit -m “Comentario

Realiza el proceso de encapsulado de los archivos agregados con los comandos anteriores para considerar enviarlo en el próximo “commit”. -m es un parámetro que indica permitir añadir un mensaje cerrado entre comillas.

git push origin <rama>

Realiza la actualización del código preparado por los previos comandos en la rama que indiques. Es importante que los cambios que hayas hecho estén en la misma rama que subas.

git status

Te permite visualizar todos los archivos modificados (agregados, eliminados y actualizados)

git branch

Te permite visualizar todas las ramas disponibles en el repositorio remoto (el proyecto en la nube) y que fueron activadas localmente.

git pull origin <rama>

Realiza la descarga de todos los archivos ubicados remotamente (en la nube) de una rama en específico (puede ser la misma rama u alguna otra). Toma en cuenta que para ejecutar este comando sin problemas primero debes realizar un commit a tus propios cambios con los comandos que arriba compartí.

git merge <rama>

Realiza una fusión de archivos entre la rama en la que tu estás posicionado local y la rama que desees que se unan remotamente.

git remote add origin <dirección>

Este comando te permitirá agregar una ubicación remota al proyecto actual que tienes localmente. Esto es importante por que de lo contrario, si no existiera una relación entre tu código local con el código remoto, es imposible realizar commit a tu proyecto, ya que no sabrá a donde dirigir la actualización

git checkout -b <rama>

Te permite cambiar de una rama a otra por primera vez agregando su nombre. En caso de que ya esté la rama almacenada localmente, solo basta ejecutar la misma instrucción sin el parámetro -b.

git tag x.x.x

Te permite agregar como tag una versión del software del último commit en remoto. Los valores de versiones representan un cambio mayor en el primera valor, un cambio menor en el segundo, y la cantidad de bugs corregidos en el tercer valor.

git push origin — tags

Va acompañado con el anterior, y su función es agregar dicho tag al commit remoto.

git reset — hard

Te elimina todos los cambios hecho hasta ahora, regresando al último commit hecho remotamente.

Espero que estos comandos simples te permiten sobrevivir laboralmente, ya que son básicos, y si quisieras aprender más te recomiendo leer la documentación de Git publicado por Atlassian (https://es.atlassian.com/git/tutorials/learn-git-with-bitbucket-cloud/).