Git para crear modo local
Siguiendo en nuestra idea de empezar a trabajar “localmente” en el desarrollo del sitio que ya tenemos funcionando en GitHub, es el momento de hacer una copia de dicho repositorio remoto en nuestra máquina: necesitaremos recurrir al uso de git…
Sincronizando repositorios y el uso de Git
Una parte del trabajo con git está dedicada a los vínculos entre el repositorio remoto (en nuestro caso alojado en GitHub), y los distintos repositorios locales (en principio uno por cada máquina que esté colaborando en un proyecto).
Dado que no tenemos aún los archivos del proyecto en nuestra computadora, debemos clonar el repositorio remoto usando git.
Pero primero…
Configurar Git por primera vez
Es posible que no hayas usado git previamente, pero como el sistema está pensado para trabajos colaborativos es necesario la identificación de cada usuario con un nombre y un email de contacto.
Es necesario hacer estas cosas solamente una vez en tu computadora, y se mantendrán entre actualizaciones. También puedes cambiarlas en cualquier momento volviendo a ejecutar los comandos correspondientes.
$ git config --global user.name "dsigno Mint"
$ git config --global user.email dsigno4all@gmail.com
$ git config --global color.ui auto
Esta última es la opción por defecto (que colorea la salida cuando va a un terminal).
Clonando un repositorio existente
Si deseas obtener una copia de un repositorio Git existente —por ejemplo, un proyecto en el que te gustaría contribuir— el comando que necesitas es git clone
.
Cada versión de cada archivo de la historia del proyecto es descargada por defecto cuando ejecutas git clone
. De hecho, si el disco de tu servidor se corrompe, puedes usar cualquiera de los clones en cualquiera de los clientes para devolver el servidor al estado en el que estaba cuando fue clonado (puede que pierdas algunos hooks del lado del servidor y demás, pero toda la información acerca de las versiones estará ahí).
Para empezar, desde el terminal hay que posicionarse en el directorio donde almacenas/almacenarás tus repositorios (en mi caso es ~/Shared/GitHub_repos/
)
Puedes clonar un repositorio con git clone [url]
. Por ejemplo, si quieres clonar la librería de Git llamada Empezando-Jekyll puedes hacer algo así:
$ git clone https://github.com/dsigno/Empezando-Jekyll.git
Esto crea un directorio llamado Empezando-Jekyll
, inicializa un directorio .git
en su interior, descarga toda la información de ese repositorio y saca una copia de trabajo de la última versión. Si te metes en el directorio Empezando-Jekyll
, verás que están los archivos del proyecto listos para ser utilizados. Si quieres clonar el repositorio a un directorio con otro nombre, puedes especificarlo con la siguiente opción de línea de comandos:
$ git clone https://github.com/dsigno/Empezando-Jekyll.git mylibgit
Ese comando hace lo mismo que el anterior, pero el directorio de destino se llamará mylibgit
.
Veamos el resultado del comando en acción:
theRaven@ravennest:~/Shared/GitHub_repos$ git clone https://github.com/dsigno/Empezando-Jekyll.git
Clonando en 'Empezando-Jekyll'...
remote: Enumerating objects: 1492, done.
remote: Total 1492 (delta 0), reused 0 (delta 0), pack-reused 1492
Recibiendo objetos: 100% (1492/1492), 8.44 MiB | 322.00 KiB/s, listo.
Resolviendo deltas: 100% (828/828), listo.
Esto es lo instalado…
Lo primero que conviene es “mirar” con git status
theRaven@ravennest:~/Shared/GitHub_repos/Empezando-Jekyll$ git status
En la rama gh-pages
Tu rama está actualizada con 'origin/gh-pages'.
nada para hacer commit, el árbol de trabajo esta limpio
En este momento ambos repositorios están sincronizados…
Probando generar “cambios” locales y subirlos al remoto
Aún sin instalar Jekyll en local ya podemos probar si las cosas van a funcionar. Recordemos que instalar Jekyll nos facilitará desarrollar nuestro sitio estático: generar cambios en el contenido y/o layout y poder ver como será el resultado antes de subirlo a GitHub.
Una manera de hacer esto es escribir un post en markdown tal como vinimos haciendo hasta ahora (Front Matter incluído), guardarlo en la carpeta _post
en el repositorio local, y luego hacer el trabajo con git que culmine con un git push gh-pages
…
Voy a probar, en cambio, agregar una imagen (la que ves un poco más arriba en este post), copiándola a la carpeta images
, y procesándola con git
-
Copio la imagen
clone-results.png
a la carpetaimages
-
Realizo un nuevo
git status
$ git status
En la rama gh-pages
Tu rama está actualizada con 'origin/gh-pages'.
Archivos sin seguimiento:
(usa "git add <archivo>..." para incluirlo a lo que se será confirmado)
images/clone-results.PNG
no hay nada agregado al commit pero hay archivos sin seguimiento presentes (usa "git add" para hacerles seguimiento)
- Lo bueno de git es que nos dá muchos tips de ayuda… nos avisa que tendremos que agregar el nuevo archivo al grupo de los que llevan seguimiento (normalmente si no hay necesidad de seguimiento se los indica en
.gitignore
)
$ git add images/clone-results.PNG
$ git status
En la rama gh-pages
Tu rama está actualizada con 'origin/gh-pages'.
Cambios a ser confirmados:
(usa "git reset HEAD <archivo>..." para sacar del área de stage)
nuevo archivo: images/clone-results.PNG
El git add
trabaja “silenciosamente” ; para ver los resultados repetimos git status
y nos avisa que ya está en la staging area (área de preparación). Falta confirmar vía git commit
nuestra decisión.
- Confirmamos entonces al archivo imagen… junto con cualquier otro cambio presente en la staging area (en nuestro caso no hay nada más).
$ git commit -m "agrego imagen sobre clonado"
[gh-pages 6307318] agrego imagen sobre clonado
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 images/clone-results.PNG
$ git status
En la rama gh-pages
Tu rama está adelantada a 'origin/gh-pages' por 1 commit.
(usa "git push" para publicar tus commits locales)
nada para hacer commit, el árbol de trabajo esta limpio
- Hasta este momento, todo lo que ha hecho está en su sistema local pero invisible para su repositorio de GitHub hasta que empuje (push) esos cambios (diríamos subir los cambios).
$ git push origin gh-pages
Username for 'https://github.com': dsigno
Password for 'https://dsigno@github.com':
Contando objetos: 4, listo.
Delta compression using up to 4 threads.
Comprimiendo objetos: 100% (4/4), listo.
Escribiendo objetos: 100% (4/4), 95.39 KiB | 10.60 MiB/s, listo.
Total 4 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/dsigno/Empezando-Jekyll.git
bbdd084..6307318 gh-pages -> gh-pages
Su commit ahora está en el repositorio remoto (origen), en la rama gh-pages.
Si visualizamos el repositorio en GitHub veremos reflejado este trabajo que realizamos primero en “local”: no sólo aparece el archivo de la imagen sino también el mensaje del commit y el commit ID.
PD: ¿Y si ahora agrego un post con el viejo método? (desde el sitio de GitHub)
De hecho, acabo se hacer esto con este mismísimo post —lo que antecede a esta post-data, of course—
Sabemos, pues, que hay un archivo en GitHub que no tenemos en nuestro repo local… la manera rápida de sincronizar este repositorio es a través del comando git pull
para bajar y fusionar los cambios remotos.
Usando
pull
en realidad estaremos haciendo unfetch
y unmerge
(ya lo detallaremos más adelante)
Usaremos un método que separe por pasos la sincronización…
Git fetch + Git merge
El comando git fetch
nos va a permitir recuperar todos los ficheros de un repositorio remoto que hayan sido modificados por otros colaboradores del proyecto y que actualmente no disponemos de ellos.
Git fetch
tan sólo recupera la información del repositorio remoto y la ubica en una rama oculta de tu repositorio local, por lo que no la fusionará automáticamente con tu repositorio local. En este caso tenemos que saber que por cada repositorio remoto que tengamos configurado también tendremos una rama oculta de este.
$ git fetch
remote: Enumerating objects: 12, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 12 (delta 6), reused 0 (delta 0), pack-reused 0
Desempaquetando objetos: 100% (12/12), listo.
Desde https://github.com/dsigno/Empezando-Jekyll
6307318..524dc14 gh-pages -> origin/gh-pages
$ git status
En la rama gh-pages
Tu rama está detrás de 'origin/gh-pages' por 3 commits, y puede ser avanzada rápido.
(usa "git pull" para actualizar tu rama local)
nada para hacer commit, el árbol de trabajo esta limpio
Y como último paso vamos a fusionar esta rama con la rama local en la que estamos trabajando actualmente y para ello necesitamos hacer uso del comando git merge
.
$ git merge origin/gh-pages
Actualizando 6307318..524dc14
Fast-forward
_posts/2020-01-09-Git-para-crear-modo-local.md | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 164 insertions(+)
create mode 100644 _posts/2020-01-09-Git-para-crear-modo-local.md
Como actualizar y sincronizar este post (con PD), y traerlo a local con pull
Toda esta parte que estoy agregando al post original la voy a insertar usando Prose (directamente desde GitHub), por lo que tendré luego que sincronizar nuevamente mi sitio local: esta vez usaré el comando pull
Git pull
El comando git pull
es un atajo o una forma de abreviar todos los procesos que realizamos usando los comandos git fetch
y git merge
por lo que nos permite ahorrar tiempo.
Cuando realizamos un
git pull
estamos sincronizando y trayéndonos todos los cambios del repositorio remoto a la rama en la que estemos trabajando actualmente, sin necesidad de ejecutar ningún comando extra.
NOTA: También nos puede ocasionar algún disgusto por lo que en proyectos grandes quizás sea mejor comprobar antes dichos cambios hacia una rama alternativa.
$ git pull
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Desempaquetando objetos: 100% (4/4), listo.
Desde https://github.com/dsigno/Empezando-Jekyll
524dc14..2975eb2 gh-pages -> origin/gh-pages
Actualizando 524dc14..2975eb2
Fast-forward
_posts/2020-01-09-Git-para-crear-modo-local.md | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 65 insertions(+)
Para cerrar…
En este post comenzamos con el trabajo del sitio en modo local (aun sin instalar Jekyll), y usamos aquellos comandos de git más frecuentes —con la ausencia de comandos de deshacer, principalmente—
Falta dedicar algún resumen ampliatorio sobre la filosofía de trabajo con Git… veré como armar algo.
NOTA final: si el desarrollador del sitio es una sola persona, una vez que ha creado su “entorno de trabajo local” es conveniente que trabaje todo desde su máquina y luego use
git push
; mejor aún , conviene que abra una rama (branch) de desarrollo (normalmente llamada development) para probar sus cambios, y luego conmerge
integre dichos cambios a la rama principal o estable —gh-pages en nuestro caso—
FUENTES