###### tags: `UNIAT` `TERMINAL` `OPS` `Clase` `Sistemas Operativos`
# Git

Sistema de control de versiones.
En lugar de tener muchos archivos con multiples versiones, podemos tener un sistema que gestiona las versiones.
Donde facilita:
* Trabajar de forma colaborativa.
* Detectar errores.
* Hacer cambios precisos.
* Modificar y mezclar versiones
### git & GitHub

Git funciona de forma local, instalas en tu computadora en cualquier sistema operativo, puedes utilizar acciones como:
* checkout.
* commit.
* add.
* init
En cambio Git extiende esas funcionalidades a una plataforma en linea, donde permite compartir el proyecto de forma privada o publica.
Llega a ser visto como una red social, el perfil personal puede ser armado como un CV que muestra realmente los proyectos que ha desarrollado.
No es solo para programadores, puede ser utilizado para cualquier proyecto que involucre versiones.
## Descarga git
https://git-scm.com/
##
## git
.gitignore
## Area de trabajo
Crea un proyecto vacío de consola en Visual studio.
Una vez que se haya generado el proyecto abre la carpeta desde la terminal.
Genera el .git ignore para el proyecto desde
https://www.gitignore.io/
### Commandos comunes
$ git init = Empieza en tu carpeta un repositorio (es el que arranca el repositorio).
$ git add biografia.txt = Con esto el sistema de control de versiones, ahora sabe que existe biografia.txt.
$ git commit -m “versión 1” = Es el que envía los últimos cambios del archivo a la base de datos del sistema de control de versiones para controlar los cambios que se hallan hecho.
$ git add . = Esta es otra opción para agregar archivos, cuando le agregas el punto lo que haces es que agregas todos los archivos que hallan cambiado en la carpeta donde en ese momento estás.
$ git status = Sirve para ver el estatus de tu base de datos.
$ git show = Muestra todos los cambios históricos que hallas hecho.
$ git log biografia.txt = El comando log sirve para ver la historia entera de un archivo.
$ git push = El comando push sirve para re enviar hacia otro repositorio remoto lo que estás haciendo.
$ git checkout = Cambia de branch
```
git init
git add .
git add .\ConsoleApplication1\
git add .\gitTest.sln
git add .\.gitignore
git add .\gitTest\
git add .\gitTest.sln
git commit - "first commit"
```
## Ingresar credenciales
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
## Add remote
```bash=
git remote add origin https://github.com/osadsanu/repo.git // Agregar tú propia repo
git push -u origin master
```
## Subir actualización de Git
1. Abre la solución de Visual studio (el archivo con terminación .sln)
## branches
1. Crear un branch desde github nuevo llamado loops
2. desde terminal `git pull`
3. desde terminal `git checkout loops`
* Esto cambia la version del código a un nuevo branch
4. modificar el código fuente (Agregan un ciclo al código).
5. Agregamos los cambios `git add gitTest/*`
6. Commit a los cambios `git commit -m "add loops"`
7. push al repo `git push origin`
## git stages

## Tarea 16/oct
* Crear un repositorio publico en GitHub.
* Utilizando el código de algún proyecto de programación que tengas disponible.
* Inicializa el repositorio de git desde la terminal.
* Agrega un archivo .gitignore.
* Agrega los archivos indispensables para él proyecto utilizando git add.
* Has commit a estos cambios.
* Publica esa version del código en el repositorio.
* Crear un nuevo branch (uno nuevo ademas de master)
* Publica una ligera modificación al proyecto ( puede ser un comentario, cambiar de nombre alguna variable, imprimir algo.)
* Agregar un archivo de documentación README.md
* Dentro de la carpeta contenedora
:::warning
(NO selecciones la opción inicializar con un archivo README.md al momento de crear el repositorio[Es para evitar un problema de mergeo y versiones])
:::
* Debe contener un titulo (puede ser clickbait) alusivo al proyecto.
* Debe contener una descripción.
* Debe contener una imagen.
* Responder el correo con el enlace al repositorio.
:::danger
### 👎🏻No hacer:
* Subir el código compartiendo la misma cuenta de Git (una cuenta por usuario).
:::
:::success
### 👍🏻 Puedes hacer:
* Agregar suficiente información a la documentación del .README
* En caso de no tener información para documentar, agrega texto, e imágenes de cualquier otro tema.
:::
:::info
### Puntos extras
Estos puntos son puntos extras a la calificación en el examen del siguiente parcial. En caso de no necesitarlos puedes regalarlos a algún compañero en necesidad de puntos con un valor de la mitad del valor.
* Crea una copia del repositorio en GitLab (alternativa a GitHub) (+ 5 puntos).
* Genera un issue y pull request en el repo de algún compañero. ( +2 [limitado a 1 uso])
* Acepta el pull request de algún compañero(+1 [limitado a 1 uso).
:::
## Git stages
1. `mkdir git2`
2. `cd git2`
3. `$null > README.md`
4. Agregar al archivo readme:
```
# Titulo Nuevo
Hello world
# Imagen

# Tabla
| Alumno | Calificacion |
| ------ | -- |
| Michel | 100|
| Alguien| 54|
# Linea de codigo
`$null > README.md`
# bullets
* Bullet 1
* Bullet 2
1. Bullet 1.
2. Bullet 2.
<h1>Titulo1 </h1>
<h2>Titulo2 </h2>
# Bloque de codigo
```C++
cout << "texto" << endl;
```
5. crear un repositorio en github.
6. Agregar el codigo a github.
## Actividad / Tarea (23/oct)
1. En la maquina virtual, clona el repo que creaste.
`git clone url`
2. compilalo utilizando g++
`g++ main.cpp -o app`
:::warning
Posible problema:
Abre el programa
No utilices funciones con `System` estas solo funcionan en windows, comentalas o cambialas por el equivalente en linux
:::
3. corre el programa
`./app`
4. Crea otro branch llamado 'update'
`git checkout -b update`
6. Modifica el codigo.
7. agrega y has commit a los cambios.
`git add .`
`git commit -m "mensaje"`
9. cambia al branch master
`investiga este comando`
11. has merge a los camibios.
`investiga este comando`
12. has push a los cambios (incluyendo el archivo compilado por g++)
`git add .`
`git commit -m "example"`
`git push`
13. Envia el enlace de la repo a `oscar@ebron.tech`