GIT
Víctor Suárez García
HacktoberFestEs 2024
Víctor Suarez
Ingeniero informático y Profesor 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 disminuir 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.
Trunk Based
Otra estategia conocida es la Trunk Based que se trata de utilizar una rama principal
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
Repositorio para prácticar
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,660