Git y Github

Git es un sistema de control de versiones distribuido, libre y open source, diseñado para manejar desde pequeños a grandes proyectos con rapidez y eficacia.

https://git-scm.com

Git almacena estas versiones en repositorios locales, por lo que necesitamos usar plataformas en la nube como Github para crear repositorios remotos.

https://github.com

Estados de git

En git existen 3 estados o fases:

Working directory: empezamos a trabajar con nuestros archivos de código pero aún no se han añadido la siguiente fase para llevar un seguimiento de los mismos.

Staging area: aquí ya tenemos los archivos listos para crear una revisión o commit.

Repository: los commit son almacenados en un repositorio, por defecto local, pero podemos usar nubes como github para tener un repositorio remoto con nuestro código.

Primeros pasos

Como requisitos previos tenemos que tener instalado Git y una cuenta creada en Github. Arriba están los enlaces.

Para abrir la terminal de git tenemos que hacer click derecho en la carpeta donde vayamos a trabajar con nuestro proyecto > Git bash here

Añadir los datos de identificación de nuestro usuario:

git config --global user.name "Alex"

git config --global user.email "alexclementefornas95@gmail.com"

Esta información se puede comprobar con:

$ git config --list
core.symlinks=false
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
http.sslbackend=openssl
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge --skip -- %f
filter.lfs.process=git-lfs filter-process --skip
filter.lfs.required=true
credential.helper=manager
user.name=Alex
user.email=alexclementefornas95@gmail.com
core.editor=notepad

Crear la estructura inicial de Git para que git pueda trabajar.

$ git init
Initialized empty Git repository in C:/Users/Documentos/test/.git/

Podemos comprobar que se ha creado la carpeta .git

$ ls -la
total 8
drwxr-xr-x 1 alexinadamas 197121 0 feb. 15 20:04 ./
drwxr-xr-x 1 alexinadamas 197121 0 feb. 15 19:58 ../
drwxr-xr-x 1 alexinadamas 197121 0 feb. 15 20:04 .git/

Ahora podemos crear nuestros archivos:

touch index.html

touch style.css

Por ahora, estos archivos están en el working directory. Si utilizamos el comando git status veremos que los nombres de los archivos aparecen en rojo indicándonos que no se está haciendo un seguimiento de estos archivos.

Añadir los archivos a la stage area

git add .

El punto «.» se utiliza para añadir todos los archivos. Se podría especificar el nombre de un archivo en concreto.

Si usamos el comando git status nuevamente veremos que los archivos ya aparecen en verde.

Crear un commit

Con los archivos ya preparados en el stage area ya podemos crear un commit con los cambios realizados. Añadiremos una breve descripción del contenido de la revisión.

$ git commit -m "Creación del index y style"
[master (root-commit) eb2b10e] Creación del index y style
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 index.html
create mode 100644 style.css

Los commit quedan almacenados en el nuestro repositorio. Con git log podemos ver los existentes.

$ git log
commit eb2b10e4c3f5a4c9826fd10dc0846999ed58b28a (HEAD -> master)
Author: Alex <alexclementefornas95@gmail.com>
Date:   Sat Feb 15 20:19:11 2020 +0100

    Creación del index y style
Date:   Sat Feb 15 20:19:11 2020 +0100
[crayon-5ecfe6c5424ac122064340/]

También podemos usar

git log --online
para ver en una sola linea cada commit.

Repositorio en Github

Creamos un repositorio desde https://github.com/new

En la siguiente página ya tendremos el enlace para acceder a nuestro repositorio

Volvemos a la terminal y añadimos el repositorio remoto.

$ git remote add origin https://github.com/alexynadamas/bananas.git

origin es el nombre que le damos a este repositorio.

Podemos comprobar los repositorios remotos añadidos:

$ git remote -v
origin  https://github.com/alexynadamas/bananas.git (fetch)
origin  https://github.com/alexynadamas/bananas.git (push)

Eliminar el repositorio remoto

$ git push origin --delete remoteBranchName

Subir los cambios de la rama actual al repositorio remoto

$ git push -u origin master

La primera vez nos pedirá logearnos

Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 246 bytes | 246.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/alexynadamas/bananas.git
 * [new branch]      master -&gt; master
Branch 'master' set up to track remote branch 'master' from 'origin'.

NOTA: Estos credenciales se quedan registrados en el Administrador de credenciales de Windows. Aquí es donde se pueden quitar.

Panel de control\Todos los elementos de Panel de control\Administrador de credenciales

Podemos comprobar que nuestros archivos ya aparecen en nuestro repositorio de github.

Trabajando con ramas

Dentro de un proyecto tendremos la línea principal de trabajo que será la rama master. Añadiremos más ramas del proyecto que representarán otras funcionalidades para unirlas a la rama principal más adelante pero se podrán trabajar por separado.

Podemos ver las ramas existentes con git branch

$ git branch
* master

También podemos ver las ramas «ocultas», es decir, las copias de origin del servidor

$ git branch -a
  footer
* master
  remotes/origin/footer
  remotes/origin/master

Crear una rama

$ git branch footer

Borrar una rama

$ git branch -d footer
Deleted branch footer (was eb2b10e).

Seleccionar la rama creada para trabajar con ella

$ git checkout footer
Switched to branch 'footer'

Se puede crear y cambiar a la rama de trabajo a la vez con

$ git checkout -b footer
Switched to a new branch 'footer'

Para hacer la prueba vamos a modificar uno de nuestros archivos

nano index.html

Lo añadimos al staging area y creamos un commit

git add .

git commit -m "Hola"

Subimos el commit al repositorio de github

$ git push
fatal: The current branch footer has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin footer

La primera vez nos dice que utilicemos este comando

$ git push --set-upstream origin footer
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 282 bytes | 282.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/alexynadamas/bananas.git
   eb2b10e..109e433  footer -&gt; footer

Podemos observar que aparece la rama en github con el fichero modificado.

Ahora podemos unir la nueva rama a la rama principal

Seleccionamos la rama principal

$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

Y ahora especificamos la rama que vamos a fusionar con la master

$ git merge footer
Updating eb2b10e..109e433
Fast-forward
index.html | 1 +
1 file changed, 1 insertion(+)

El contenido de la rama footer se fusionará con el de la rama master. En nuestro caso el archivo modificado index.html en la rama footer será modificado por el index.html de la rama master.

Por último podemos hacer un git push para actualizar la rama master de github

$ git push
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/alexynadamas/bananas.git
   eb2b10e..109e433  master -> master