GIT

Víctor Suárez García

HackLab Almería

¿Qué es git?

Git es una herramienta que permite el control de versiones de un proyecto de software de manera distribuida.

Git

Git

Git

Git es una herramienta que esta pensada en la eficiencia y la confiabilidad de un proyecto cuando este tiene un gran número de ficheros de código.  

Git

Git

Git

SVN

Git

Git

  • Cada Usuario tiene un Repositorio Local
  • Hay un repositorio remoto que es quien tiene el código común de todos.
  • Cada usuario trabaja en local hasta que quiere mandar los datos al repositorio remoto.
  • Si el repositorio central se pierde entre los repositorios locales de los usuarios puede rehacerse.

Git

Git

Un fichero puede estar en distintos estados en un repositorio Git. 

MacBook-Pro-de-Victor-2:PFC victor$ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	readme.md

nothing added to commit but untracked files present (use "git add" to track)

Git

Untracked Files: Ficheros que aún no han sido añadidos al repositorio Git.

MacBook-Pro-de-Victor-2:PFC victor$ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	readme.md

nothing added to commit but untracked files present (use "git add" to track)

Siempre podemos ver el estado de nuestro repositorio con git status

Git

Indexed Files: Ficheros que han sido añadidos al repositorio pero no se ha realizado commit

MacBook-Pro-de-Victor-2:PFC victor$ git add readme.md 
MacBook-Pro-de-Victor-2:PFC victor$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   readme.md

Git

commited Files: Ficheros que han sido enviados al repositorio local.

MacBook-Pro-de-Victor-2:PFC victor$ git commit -m "subiendo cambios"
[master (root-commit) 3749849] subiendo cambios
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 readme.md
MacBook-Pro-de-Victor-2:PFC victor$ git status
On branch master
nothing to commit, working directory clean

¿Sencillo verdad?

Ejercicio Práctico:

Crear y añadir un fichero a un repositorio GIT.

Ejercicio 1

Primer paso: Instalar GIT

Windows /Mac Os:

Ir a http://git-scm.org y descargar el sofware

Linux:

#: apt-get install git

#: yum install git

Ejercicio 1

Segundo Paso: Inicializar un repositorio

Desde consola crear una carpeta y dentro de ella ejecutar la siguiente orden

> git init
Initialized empty Git repository in /Users/victor/Documents/hacklab/PFC/.git/

Nota: Para los usuarios de Windows ejecutar la aplicación Git Bash que encontraréis en el menú de inicio.

Ejercicio 1

Tercer Paso: Crear un fichero

Crear un fichero llamado readme.md en la carpeta donde hemos inicializado el repositorio.

Hola Mundo

Ejecutar la orden git status

Ejercicio 1

 Cuarto Paso: Añadir el fichero al control de versiones

Añadir el fichero usando la orden git add luego comprobar con git status

MacBook-Pro-de-Victor-2:PFC victor$ git add readme.md 
MacBook-Pro-de-Victor-2:PFC victor$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   readme.md

Ejercicio 1

 Quinto Paso: Commitear los cambios

Realizar el commit usando git commit y añadir un mensaje con la opción -m "mensaje"

MacBook-Pro-de-Victor-2:PFC victor$ git commit -m "subiendo cambios"
[master (root-commit) 3749849] subiendo cambios
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 readme.md

Remote

Push / Pull

Remote

Hasta ahora hemos estado trabajando en local realizando commits. Pero necesitamos una manera de poder compartir nuestro código con nuestros compañeros de equipo o de subir nuestro código a la comunidad de Software Libre.

Para ello necesitamos tener un repositorio remoto que en este caso vamos a utilizar GitHub

GitHub

GitHub es una página web que nos provee un servicio de control de versiones usando Git como herramienta.

 

Su uso esta muy extendido por la comunidad aunque el código de está página no es Software Libre.

GitHub

GitHub no solo nos permite tener un control en nuestro código sino que también nos permite tener un control de incidencias, documentación, pull request, etc...

Crear Repositorio en GitHub

Nos conectaremos a https://github.com y nos crearemos una cuenta.

Una vez hecho esto, nos crearemos un nuevo repositorio pulsando en el botón verde que nos aparecerá

Crear Repositorio

En Github podemos tener repositorio publico(son visibles por todos) como privados(son de pago).

Nota: Github tiene una oferta de 5 repositorios privados gratuitos a estudiantes.

 Añadir Repositorio Remoto

Una vez creado el repositorio vamos a copiar la dirección que nos provee Github(en Https)

Remote

Por último volvemos a nuestra consola en nuestro repositorio local y ejecutamos las siguientes ordenes.

>git remote add origin https://github.com/zerasul/github101.git
 #donde esta dirección debe ser la que hemos copiado
>git push origin master

Una vez hecho esto, también podemos obtener los cambios con git pull

>git pull origin master

Branchs

Ramas

Branching

Supongamos que estamos trabajando en 1 proyecto con varias personas. Y 2 personas modifican el mismo archivo a la vez.

git add miarchivo.txt
git commit -m "Subiendo cambios"
git push origin master
git add miarchivo.txt
git commit -m "Subiendo cambios molones"
git push origin master

Branching

Branching

Para evitar estos conflictos y tener unas buenas prácticas podemos usar ramas para no entorpecer a otros desarrolladores.

Las Ramas son punteros a commits que hemos realizado para dicha rama; a diferencia de SVN que son copias completas del proyecto

La rama principal siempre es master.

Branching

Hasta ahora solo teníamos una rama y trabajábamos en ella (Rama Master).

Branching

Sin embargo ahora podemos tener varias ramas en nuestro desarrollo.

Branching

Para crear una Rama usaremos el comando git branch

>git branch tarea1

Para cambiar de rama podemos usar el comando git checkout

>git checkout tarea1
Switched to branch "tarea1"

O usar el comando checkout con el modificador -b

>git checkout -b "tarea2"
Switched to new branch "tarea2"

Branching

Podemos comprobar en que rama estamos con git status.

MacBook-Pro-de-Victor-2:PFC victor$ git status
On branch tarea1
nothing to commit, working directory clean

El esquema actual tras hacer commit puede ser el siguiente.

Branching

Si queremos volcar los cambios a la rama master una vez finalizada la tarea usaremos el comando git merge.

MacBook-Pro-de-Victor-2:PFC victor$ git checkout master
Switched to branch 'master'
MacBook-Pro-de-Victor-2:PFC victor$ git merge tarea1
Updating 3749849..ed9baa2
Fast-forward
 readme.md | 1 +
 1 file changed, 1 insertion(+)

Branching

Estrategias de Branching

Es importante tener una buena estrategia de branching a la hora de realizar nuestro desarrollos. Se recomienda tener 4 ramas.

  • master: Rama principal
  • Development: Rama de Desarrollo
  • Test: Rama de Testing
  • Tarea: Rama con 1 tarea especifica.

Branching

Estrategias de Branching

Pull Request

Pull Request

Hasta ahora hemos estado desarrollando en proyectos pequeños con pocos desarrolladores. Pero que pasa en proyectos con muchos desarrolladores como por ejemplo el núcleo de Linux; ¿Como se gestiona?

Pull Request

Supongamos que queremos realizar un cambio en la página web de HackLab.

Tenemos 2 opciones:

  • Darle el coñazo a Miguel Angel para que nos de permisos.
  • Hacer un Fork del repositorio y realizar posteriormente un Pull Request.

Pull Request

Vamos a realizar la segunda opción. Ya que Miguel Angel no nos quiere.

Primero realizaremos un fork desde Github

Un fork es una copia del repositorio que se creará en nuestro usuario.

Pull Request

Una vez tenemos el repositorio, vamos a clonarlo a nuestro equipo para trabajar en local.

>git clone https://github.com/zerasul/hacklab-almeria.github.io.git
#Donde la direccion es la de nuestro repositorio clonado.

Cuando terminemos de hacer los cambios volvemos a Github y vamos al apartado de Pull Request

Pull Request

Pull Request

Ejercicio Práctico 2

Pull Request

Ejercicio Práctico 2

Primer paso: Realizar un fork del repositorio del grupo a vuestra derecha.

Segundo Paso: Clonar el repositorio creado en vuestro equipo.

git clone <direccion fork>

Tercer Paso: Realizar algun cambio y subirlo al repositorio.

Ejercicio Práctico 2

Quinto Paso: Crear un Pull Request

Sexto Paso: Aceptar el pull Request que os haya realizado otro grupo.

MarkDown

Markdown

Markdown es un lenguaje de marcado que permite de forma rápida y sencilla escribir textos con formato.

# Esto es un encabezado

**Texto en negrita**

_texto en cursiva_

![descripcion](uri imagen) Imagen en MarkDown

[texto](url) enlace en MarkDown

```java
System.out.println("Hola Mundo");
```

Markdown

En Github podemos usar MarkDown para documentar nuestros proyectos. Solo tenemos que crear un fichero llamado readme.md.

GitBook

Gitbook es una plataforma Online donde podemos crear y hospedar nuestros libros electrónicos

GitBook

Por medio de MarkDown podemos ir escribiendo distintos capitulos e ir añadiéndolos al libro. El libro queda hospedado en un repositorio Git.

GitBook

Usando Github podemos subir los nuevos archivos al repositorio.

GitBook

En primer lugar usaremos MarkDown para ir haciendo cada uno de los capítulos; después usaremos el fichero Summary.md para añadirlo al libro.

# Summary

* [Introducción](README.md)
* [Arduino IDE](arduinoide/index.md)
   * [Instalar en Windows](arduinoide/instalacion/windows.md)
   * [Instalar en Linux](arduinoide/instalacion/linux.md)
   * [instalar en Mac OS X](arduinoide/instalacion/macosx.md)
* [Otros IDEs](otrosides/index.md)
   * [CLion](otrosides/clion/index.md)
   * [Sublime Text](otrosides/sublimetext/index.md)
* [Los Sketchs](sketchs/index.md)
* [GPIOS](gpios/index.md)
  * [Blink](gpios/blink/index.md)
* [Bibliotecas](bibliotecas/index.md)
   * [IR Remote](bibliotecas/irremote/index.md)
   * [DHT](bibliotecas/dht/index.md)
   * [NeoPixel](bibliotecas/neopixel/index.md)
       * [Semáforo](bibliotecas/neopixel/ejemplos/semaforo.md)
       * [Chapter](chapter/README.md)
       * [Colores Aleatorios](bibliotecas/neopixel/ejemplos/aleatorios.md)
   * [SnoozeLib](bibliotecas/snoozelib/index.md)

GitBook

Referencias

  • Wikipedia: https://es.wikipedia.org/wiki/Git
  • Git: http://git-scm.org
  • The Git Book: https://git-scm.com/book/es/v1
  • Github Documentation:https://help.github.com
  • Markdown: https://es.wikipedia.org/wiki/Markdown
  • GitBook Documentation: http://help.gitbook.com
  • BooleanBite: http://booleanbite.com/web/tag/github/

GIT

By zerasul

GIT

  • 1,311
Loading comments...

More from zerasul