GIT

Víctor Suárez García

HacktoberFestEs 2021

Víctor Suarez

Ingeniero informático que siempre esta tratando de aprender y dar charlas y talleres a los demás. Miembro de la asociación La Jaquería y Python Almería.

!Cuidado con el! !!usa Java¡¡

¿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

En caso de error, hay que añadir el usuario y mail para realizar commit.

>git config user.name "victor"
>git config user.mail "miemail@dominio.com"

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/ Gitlab

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

Pero no es open source.

 

 

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

Pero SI es open source.

 

 

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...

Issues

Una issue es una petición que puede hacerse a un repositorio; puede ser informar de un error, pedir una mejora e incluso puede ser un punto de discusion de distintos temas.

OJO: Las peticiones de Hacktoberfest se identifican por una etiqueta con el mismo nombre

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.

Además de integración continua gracias a Github Actions.

Nota: Github tiene una oferta mejora en repositorios privados para estudiantes.

 Añadir Repositorio Remoto

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

GitLab

Gitlab es una plataforma que nos va a permitir tener también repositorios tanto publicos como privados y además integración continua.

GitLab

Con gitlab podemos crear un nuevo proyecto (repositorio) de forma sencilla y nos permitirá además crear proyectos más complejos.

GitLab

Una vez creado nuestro proyecto ya podemos copiar la dirección 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.

 

NOTA: en las ultimas versiones git la rama principal es main.

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

Git Flow

Una de las estrategias mas conocidas es la llamada GITFLOW.

Pull Request / Merge 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:

  • Pedir permisos de acceso.
  • Hacer un Fork del repositorio y realizar posteriormente un Pull Request.

Pull Request

Vamos a realizar la segunda opción. Ya que no tenemos acceso a dicho repositorio.

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

Merge Request

Al usar Gitlab También se puede realizar la misma operación; creando un Merge Request.

HacktoberFest

  • Toda issue que sea válida para el hacktoberfest tendrá el label "hacktoberfest"
  • Toda pull/merge request etiquetada con "hacktoberfest-accepted" aunque no haya sido aceptada, será valida.
  • Todas las pull/merge requet aceptadas en el periodo de tiempo serán válidas (puede que tarden un tiempo).

Ejercicio Práctico 2

Pull /Merge Request

Ejercicio Práctico 2

Primer paso: Realizar un fork del repositorio:
https://github.com/zerasul/github101

https://gitlab.com/zerasul/github101

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

Cuarto Paso: Crear un Pull/merge Request

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.

Visual Studio Code

Una vez hemos aprendido a utilizar Git, vamos a utilizarlo usando un Entorno de Desarrollo Integrado (IDE)

VSCode

Con Visual Studio code podemos ver facilmente los cambios que hemos realizado y poder realizar commits facilmente.

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
  • Visual Studio code Git: https://code.visualstudio.com/docs/editor/versioncontrol

GIT

By zerasul

GIT

Introduction to Git Source Version Control Management(SCM)

  • 4,414