Underc0de

Programación Web => Back-end => Mensaje iniciado por: Bartz en Enero 08, 2019, 10:05:52 PM

Título: Aprende GIT Basico
Publicado por: Bartz en Enero 08, 2019, 10:05:52 PM
Buenas buenas !

Entonces, que es GIT ?

Segun su pagina oficial Git es un software de control de versiones diseñado por Linus Torvalds, pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando éstas tienen un gran número de archivos de código fuente.

Es decir, controlar las versiones, ayudarnos a trabajar en equipo y protegernos de la perdida de informacion (entre otras cosas)

Descarguemos Git de:

https://git-scm.com/downloads




Seguimos  los  pasos  de  la  instalación y  terminamos  teniendo  la  consola

podemos  ver  la  version  y/o  la  ayuda  con
$  git  --version
$  git  --help


Configuramos  el  usuario  y  el  mail
$ git config --global user.name "bartz" 
$ git config --global user.email "[email protected]"
                                                 

podemos  ver  las  configuraciones  con  el  comando 
$ git  config  --global  -l  (solo  lectura)

y se  puede  editar  con  (cuidado)
$ git config  --global –e

(https://i.imgur.com/uYdnhLF.png)
La parte de alias todavia no la tenes, pero en unos minutos lo vamos a agregar



Iniciando Git en nuestro proyecto

Para  seguir  explicando  los  comandos  vamos  a  descargarnos  un  template  web de  www.initializr.com  (300kb)
Creamos  la  carpeta  de  nuestro  proyecto  y  hacemos  CD  adentro  de  ella
$ cd /practicagit/proyecto1   

una  vez  dentro  de  la  carpeta  corremos  el  comando
$  git  init

Lo  que  hace  este  comando  es  crear  una  carpeta  .git  que  usara  git  para  hacer  su  magia.
Veamos  como  reacciona  a  este  comando
$  git  status

O  el  siguiente  para  verlo  mas  sencillo
$  git  status  -s  -b

(https://i.imgur.com/1aLazpx.png)

Los  archivos  estan  en  rojo  porque  todavia  no  estan  guardados,  y  aca  cabe  destacar  que  hay  dos  situaciones,   archivos  que  estan  en  el  "Stage"  y  archivos  que  han  sido  "Commited"
Tu repositorio local esta compuesto por tres "árboles" administrados por git. El primero es tu Directorio de trabajo que contiene los archivos, el segundo es el Stage que actua como una zona intermedia, y el último es el HEAD que apunta al último commit realizado.

Poniendolo en otras palabras, se agregan los archivos a guardar en en Stage, y cuando haces Commit se guarda todo lo que este en el Stage en ese momento



Commits

Vamos  a  agregar  los  archivos  al  stage,  hay  varias  maneras  de  hacerlo, talvez  quieras  que  todo  sea un  solo  commit  o  quieras  agregar  las  imagenes  primero,  js  despues,  css  despues,  etc.

Añadir  todos  los  archivos
$  git  add  .

Añadir  un  solo  archivo
$  git  add  index.html

Añadir  todos  los archivos con la misma extension
$  git  add  *.png

Añadir  todos  los  archivos de misma extension incluyendo subcarpetas
$  git  add  "*.png"

Añadir  todo  lo  que  esta  dentro  de  una  carpeta
$ git  add  css/

Añadir  todos  los  de  la  misma  extensión  de  una  carpeta
$  git  add  js/*.js

Añadir  una  lista  de  archivos
$  git  add  <lista,  de,  archivos>

Añadir  todos  exepto  uno
$  git  add  -A  (todos)
$  git  reset  archivo.html  (lo  quita  del  stage)


Sea  cual  sea  la  manera  que  queramos  en  el  momento,  despues  de  añadirlo  al  stage  hay  que  hacer  el  commit,  por  ejemplo  subiendo  el  proyecto  entero

$  git  add  .
$  git  commit  -m  "Añadiendo plantilla inicial"


El parametro -m deja un mensaje en el commit, el cual tiene que ser descriptivo a lo que estamos haciendo, para no complicarnos la vida cuando tengamos que recordar que fue lo que hicimos en ese commit.

En este punto, ya habiendo hecho el primer commit, tenemos nuestro trabajo salvado.
Podes hacer la prueba de eliminar algunos archivos y correr el siguiente comando, el cual restaura todo como estaba en el ultimo commit

$ git checkout -- .    (atencion al espacio entre los guiones y el punto)

Veamos el log de los commits (se ordena en manera descendente, el de mas arriba es el mas reciente)
$ git log

(https://i.imgur.com/uzBCTll.png)

Se ve algo extenso para ser solo 4 commits, no ? 
La mejor manera seria hacerlo con el siguiente comando que es muy util la manera en que nos muestra los branches, y demas todo muy bonito (aunque por ahora no se aprecie)

$ git log --oneline --decorate --all --graph

(https://i.imgur.com/GaWvMPb.png)



Creando un Alias

De verdad tengo que escribir todo eso cada vez que quiero ver el log ?!
Absolutamente no, vamos a ver como crear nuestros propios comandos para poder hacer todo eso con solo 2 letras

$  git config --global alias.lg "log --oneline --decorate --all --graph"

El comando que creamos es lo que le sique al punto despues de alias, por lo que ahora todo eso se convierte en
$ git lg



VIAJES EN EL TIEMPO
Seguimos hablando de Git, no nos vamos a ir a 1960, pero que tal si en algun momento cambias de plan
y te conviene mucho mas retomar tu trabajo desde lo que hiciste hace 2 dias y no tener que reescribir todo el codigo ?
Es importante por esto que los commits tengan nombres descriptivos, para saber cual elegir en cada momento

Empecemos por algo sencillo, vamos a ver que diferencias tiene el archivo que tenemos actualmente con el del ultimo commit
$ git diff index.html

(https://i.imgur.com/mh3ugJg.png)

tambien podemos ver las diferencias que tiene con el que esta en el stage en vez del commit

$ git diff index.html --staged

Corrigiendo un mensaje del commit que hemos puesto mal, en el caso de haber hecho otra cosa en vez de lo que habiamos puesto

$ git commit --amend -m "Habia subido el JS y no el CSS"

tambien se puede correr solo $ git commit --amend y nos abrira el editor de texto que elegimos durante la instalación, en mi caso VIM

Podemos tambien borrar los commits que hicimos pero sin borrar el progreso o lo que hayamos escrito, vamos a usar el log para saber el hash del commit al que queremos volver, esto nos sirve por ejemplo si en un commit subimos todos los archivos juntos y en realidad lo queriamos hacer en dos partes o algo asi.

$ git reset --soft 123123(hash)

Tambien como hablabamos antes, se puede volver a un punto anterior en el que hayamos estado trabajando, por ejemplo, actualicé todo el texto del index pero al final cambie de idea y me gustaba mas antes. Cuidado porque borra todo hasta el punto que elegimos.

$ git reset --hard 123123(hash)

(https://i.imgur.com/Wa6IGYk.png)

Como soy una persona indecisa creo que me gustaban los cambios que habia hecho y ya los borre ! Que suerte que no tengo que volver a hacer todo
Existe un comando para ver los commits borrados y todos los cambios que se hayan hecho, este se llama reflog

$ git reflog
$ git reset --hard 123123(hash)


(https://i.imgur.com/CcXflSE.png)



Ignorar ciertos archivos

Esto puede ser util por ejemplo con algun log que no queramos ir guardando o dandole seguimiento, por lo que queremos que Git lo ignore completamente
Debemos crear un archivo llamado .gitignore (atencion al punto)
y dentro de el escribimos los archivos a ignorar
*.log
css/*.min.css
etc/




BRANCHS

Las branchs nos permiten trabajar en dos partes del mismo proyecto pero haciendo diferentes commits
Son utilizadas para desarrollar funcionalidades aisladas unas de otras. La rama master es la rama "por defecto" cuando creas un repositorio. Creas nuevas ramas durante el desarrollo y las fusionas a la rama principal cuando termines.

Creamos una rama con
$ git branch nombre-rama
vemos las ramas que existen con
$ git branch
cambiamos de una rama a otra con
$ git checkout nombre-rama
Tambien podemos crear y cambiar a esa rama en el mismo comando con
$ git checkout -b nombre-rama
Eliminar una rama
$ git branch -d nombre-rama

(https://i.imgur.com/2dEdQGz.png)



TAGS

Las tags sirven para darles un nombre adicional a los commits, por ejemplo para marcar la primera version estable del programa

$ git tag v1.0.0 (se añade al commit actual)

Para mostrar las tags que hemos hecho
$ git tag

Para borrar un tag
$ git tag -d

tambien para añadirle a un commit anterior
$ git tag -a v0.7.0 123123(hash)




Espero que te haya sido de ayuda !
Título: Re:Aprende GIT Basico
Publicado por: Mortal_Poison en Enero 08, 2019, 10:38:06 PM
Buenas noches Bartz, (https://underc0de.org/foro/profile/Bartz/)

Buen aporte Bartz. Para añadir como experiencia, conseguí trabajar bastante con GIT el año pasado y es muy potente para cualquier aspecto concerniente a los desarrollos. Además de ser muy útil, es casi que indispensable cuando se requiere hacer despliegues a servidores de producción y son muchos. Cuando ya se aprende a manejar GIT, muchos optan por usar GitKraken, (https://www.gitkraken.com/) Aunque a mí siempre me ha gustado más la línea de comandos, me parece una interesante opción y que he visto que varias empresas usan GitKraken por motivos de rapidez.

Un saludo.


Título: Re:Aprende GIT Basico
Publicado por: Bartz en Enero 09, 2019, 09:52:46 PM
Gracias @Mortal_Poison (https://underc0de.org/foro/index.php?action=profile;u=69104) , se ve interesante eso de GitKraken !

Personalmente empecé a trabajar en una empresa y mi primer dia fueron 6 horas de aprender Git, lo que naturalmente se convirtió en este post  xD

Saludos !
Título: Re:Aprende GIT Basico
Publicado por: Cain en Enero 21, 2019, 05:10:02 PM
Buen aporte Bartz, si aprendes cosas más avanzadas sobre Git, seria muy útil que hicieras una segunda parte.

Saludos.
Título: Re:Aprende GIT Basico
Publicado por: Robot101 en Febrero 01, 2019, 12:58:03 PM
His name is Robert Paulson

Hay un curso de Git gratuito muy bueno.

https://miriadax.net/web/gitmooc
Título: Re:Aprende GIT Basico
Publicado por: BraveF0X en Febrero 01, 2019, 01:19:22 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
His name is Robert Paulson

Hay un curso de Git gratuito muy bueno.

https://miriadax.net/web/gitmooc

Gracias. Lo que me parece importante ahora es resolver los conflictos, sé como resolver con git reset --hard o git merge, pero hay casos más complejos que no he podido resolver por consola y me toca acudir a una GUI como SourceTree, pero me gustaria poder solucionarlo desde la terminal. Conoces una pagina donde muetren los diferentes conflictos de GIT?
Título: Re:Aprende GIT Basico
Publicado por: Bartz en Marzo 01, 2019, 09:51:41 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
His name is Robert Paulson

Hay un curso de Git gratuito muy bueno.

https://miriadax.net/web/gitmooc

Gracias. Lo que me parece importante ahora es resolver los conflictos, sé como resolver con git reset --hard o git merge, pero hay casos más complejos que no he podido resolver por consola y me toca acudir a una GUI como SourceTree, pero me gustaria poder solucionarlo desde la terminal. Conoces una pagina donde muetren los diferentes conflictos de GIT?

Personalmente estoy usando TortoiseGit hoy en dia, el cual te permite analizar los conflictos archivo por archivo..

Que es particularmente lo que te complica con mergear los conflictos ?
Título: Re:Aprende GIT Basico
Publicado por: Cecilitta en Mayo 04, 2023, 10:08:08 AM
Hola!! les dejo un resumen (https://docs.google.com/document/d/1aUBa_An3QMCSgZ6jByz101zx-BOchTuzkprMmrwdw2o/edit?usp=share_link) de los comandos básicos que hice, espero que sirva! saludos!