###### tags: `git` `github`
GIT - GITHUB
============
Aprendiendo git.
## Table of contents
- [GIT - GITHUB](#git---github)
- [Table of contents](#table-of-contents)
- [Instalando Git](#instalando-git)
- [Flujo de trabajo en Git](#flujo-de-trabajo-en-git)
- [Tu Identidad](#tu-identidad)
- [GITHUB Interface](#github-interface)
- [1. Crear Repositorio vacio en Github.](#1-crear-repositorio-vacio-en-github)
- [2. Nombre del repositorio y configuraciones](#2-nombre-del-repositorio-y-configuraciones)
- [3. Alojando un proyecto local en el repositorio ya creado.](#3-alojando-un-proyecto-local-en-el-repositorio-ya-creado)
- [Existen 2 opciones](#existen-2-opciones)
- [4. Clonando un repositorio de Github](#4-clonando-un-repositorio-de-github)
- [Pasos que usualmente se realiza cuando se trabaja con Git.](#pasos-que-usualmente-se-realiza-cuando-se-trabaja-con-git)
- [1. Obteniendo cambios del remoto](#1-obteniendo-cambios-del-remoto)
- [2. Editar archivos](#2-editar-archivos)
- [3. Git diff](#3-git-diff)
- [4. Git status](#4-git-status)
- [5. Git add](#5-git-add)
- [6. Git diff or git diff --staged](#6-git-diff-or-git-diff---staged)
- [7. Git Commit](#7-git-commit)
- [8. Git Log](#8-git-log)
- [9. Git push](#9-git-push)
# Instalando Git
- En manjaro
```shell=
# Si usamos yay como gestor de paquetes
yay -Sy # para actualizar las bases de datos de paquetes del servidor
yay -S git
# o si usamos pacman
sudo pacman -Sy
sudo pacman -S git
```
- En Debian/Ubuntu/Kubutu/Lubuntu/Linux Mint/Deepin.
```shell=
sudo apt update
sudo apt install git
```
# Flujo de trabajo en Git
<!--  -->

# Tu Identidad
Lo primero que debemos hacer cuando instalamos Git es establecer nuestro nombre de usuario y dirección de correo electrónico. Esto es importante porque los "commits" de Git usan esta información, y es introducida de manera inmutable en los commits que envías:
Un documento para [configurar-Git-por-primera-vez](https://git-scm.com/book/es/v2/Inicio---Sobre-el-Control-de-Versiones-Configurando-Git-por-primera-vez).
```shell=
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
```
# GITHUB Interface
## 1. Crear Repositorio vacio en Github.

## 2. Nombre del repositorio y configuraciones
- public repository
- private repository
ELEGIR publico/privado

Ya habiendo creado un repositorio en github, subir un proyecto local al repositorio que se acaba de crear.
## 3. Alojando un proyecto local en el repositorio ya creado.
### Existen 2 opciones
- **Via [SSH](https://techterms.com/definition/ssh)**
Significa "Secure Shell". SSH es un método de comunicación segura con otra computadora. La parte "segura" del nombre significa que todos los datos enviados a través de una conexión SSH están encriptados . Esto significa que si un tercero intenta interceptar la información que se transfiere, parecería codificada e ilegible. La parte "shell" del nombre significa que SSH se basa en un shell Unix , que es un programa que interpreta los comandos ingresados por un usuario.
- **Via [HTTP](https://techterms.com/definition/http)**
Significa "Protocolo de transferencia de hipertexto". HTTP es el protocolo utilizado para transferir datos a través de la web . Es parte del conjunto de protocolos de Internet y define los comandos y servicios utilizados para transmitir datos de la página web .

Antes de avanzar veamos un [flujo de trabajo en Git](https://medium.com/laboratoria-how-to/describiendo-el-flujo-de-trabajo-en-git-ede2eee5b589).
1. Iniciar un proyecto git.
`git init`
2. Adicionado todo los archivos con `.` al area de stagin.
`git add .`
4. Commit.
`git commit -m "comentario de los cambios" -m 'otro comentario'`
4. Adicionando al remoto un proyecto en Git.
`git remote add origin git@github.com:<github-user>/<repo-name>.git`
5. Pusheando/Subiendo un proyecto al repositorio de Github. En este caso a la rama `master`.
`git push origin master`
pero, podria ser a cualquier otra rama, por ejemplo: `branch develop`.
`git push origin develop`
## 4. Clonando un repositorio de Github
Hay dos opciones para clonar.
- SSH

```shell=
git clone git@github.com:github-user/name-project.git
```
- HTTP

```shell=
git clone https://github.com/github-user/name-project.git
```
>Personalmente uso la opcion de SSH.
# Pasos que usualmente se realiza cuando se trabaja con Git.
Esto como Sugerencia...
Esto lo tienes q saber como el padre nuestro.
okno.
1. [Obtener cambios del remoto](#1-Obteniendo-cambios-del-remoto)
2. [editar los archivos](#2-Editar-archivos)
3. [git diff](#3-Git-diff0)
4. [git status](#4-Git-status)
5. [git add](#5-Git-add)
6. [git diff](#6-Git-diff-or-git-diff---staged)
7. [git commit](#7-Git-Commit)
8. [git log](#8-Git-Log)
9. [git push](#9-Git-push)
## 1. Obteniendo cambios del remoto
Es necesario tener actualizado los cambios del repositorio remoto, porque cuando se trabaja en equipo es muy comun toparse con conflictos.
**Primera opcion:** Pull
```shell=
git pull
# o
git pull --rebase
```
**Segunda option:** Fetch y merge
```shell=
git fetch
git merge origin/master
```
> Usar la opcion de su preferencia `fetch y merge` o `fetch` y [rebase](https://git-scm.com/docs/git-rebase)
Y listo con cualquiera de las 2 opciones ya se tendra los datos actualizado.
## 2. Editar archivos
Aqui trabajas en tu codigo local.
## 3. Git diff
Para ver los cambios que hiciste en tu codigo.
```shell=
git diff
```
## 4. Git status
Para listar que archivos que se agregaron, modificaron o eliminaron.
```shell=
git status
```
## 5. Git add
Luego de haber modificado los archivos necesarios hay que agregarlos al `staging area`.
```shell=
# para agregar todos los archivos que se listan en el status
git add .
# o si solo quiere agregar un archivo en especifico
git add file_name
```
## 6. Git diff or git diff --staged
Para ver los cambios que hiciste en tu codigo despues de haber hecho git add.
```shell=
git diff
git diff --staged
```
## 7. Git Commit
Luego de tener los archivos modificados en el `staging area`, estos ya estan listos para realizar una confirmacion. (se creara un historico)
>Agregando un titulo y cuerpo al mensaje del commit con `-m` y `-m`
```shell=
git commit -m "Added new files" -m "Added new files in src folder"
```
En caso de que se haya equivocado con el mensaje del commit, puede renombrarlo con `--amend`
```shell=
git commit --amend -m "Nuevo mensaje"
```
## 8. Git Log
Si quieres listar todos los commits que se hicieron:
```shell=
git log
```
Si quieres ver solo tus commits.
```shell=
git log --author=TuNombre
```
Si quieres ver que archivos modificaste en los commits
```shell=
git log --oneline --stat
```
Si quieres ver que archivos y lineas modificaste en los commits
```shell=
git log -p --author=TuNombre
# --author=TuNombre opcional
```
## 9. Git push
Una vez que se realiza git add, git commit se procede a subir los cambios al repositorio remoto.
**Nota:** Puede que tengas conflictos al momento de realizar `push`, para solucionarlo [ver paso 1](#1-Obteniendo-cambios-del-remoto)
```shell=
git push origin master
# or
git push origin
```
Ya luego :ghost: empiezas desde el paso 1.
----
En resumen, el flujo de trabajo en Git luce asi.
