Aprende GIT Basico

Iniciado por Bartz, Enero 08, 2019, 10:05:52 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

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:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




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

podemos  ver  la  version  y/o  la  ayuda  con
Código: php
$  git  --version 
$  git  --help


Configuramos  el  usuario  y  el  mail
Código: php
$ git config --global user.name "bartz"  
$ git config --global user.email "[email protected]"
                                                 

podemos  ver  las  configuraciones  con  el  comando 
Código: php
$ git  config  --global  -l  (solo  lectura) 


y se  puede  editar  con  (cuidado)
Código: php
$ git config  --global –e 


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
Código: php
$ cd /practicagit/proyecto1  
 

una  vez  dentro  de  la  carpeta  corremos  el  comando
Código: php
$  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
Código: php
$  git  status 


O  el  siguiente  para  verlo  mas  sencillo
Código: php
$  git  status  -s  -b



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
Código: php
$  git  add  . 


Añadir  un  solo  archivo
Código: php
$  git  add  index.html 


Añadir  todos  los archivos con la misma extension
Código: php
$  git  add  *.png 


Añadir  todos  los  archivos de misma extension incluyendo subcarpetas
Código: php
$  git  add  "*.png" 


Añadir  todo  lo  que  esta  dentro  de  una  carpeta
Código: php
$ git  add  css/ 


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


Añadir  una  lista  de  archivos
Código: php
$  git  add  <lista,  de,  archivos> 


Añadir  todos  exepto  uno
Código: php
$  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

Código: php
$  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

Código: php
$ 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)
Código: php
$ git log



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)

Código: php
$ git log --oneline --decorate --all --graph





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

Código: php
$  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
Código: php
$ 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
Código: php
$ git diff index.html



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

Código: php
$ 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

Código: php
$ 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.

Código: php
$ 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.

Código: php
$ git reset --hard 123123(hash)



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

Código: php
$ git reflog
$ git reset --hard 123123(hash)





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
Código: php
*.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
Código: php
$ git branch nombre-rama

vemos las ramas que existen con
Código: php
$ git branch

cambiamos de una rama a otra con
Código: php
$ git checkout nombre-rama

Tambien podemos crear y cambiar a esa rama en el mismo comando con
Código: php
$ git checkout -b nombre-rama

Eliminar una rama
Código: php
$ git branch -d nombre-rama





TAGS

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

Código: php
$ git tag v1.0.0 (se añade al commit actual)


Para mostrar las tags que hemos hecho
Código: php
$ git tag


Para borrar un tag
Código: php
$ git tag -d


tambien para añadirle a un commit anterior
Código: php
$ git tag -a v0.7.0 123123(hash)





Espero que te haya sido de ayuda !




Con la fuerza del mar, con la paz del rio


Buenas noches No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta 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.


Become the change you seek in the world. -Gandhi.


Gracias @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta , 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 !




Con la fuerza del mar, con la paz del rio


Buen aporte Bartz, si aprendes cosas más avanzadas sobre Git, seria muy útil que hicieras una segunda parte.

Saludos.

His name is Robert Paulson

Hay un curso de Git gratuito muy bueno.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No Fear No Distractions

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.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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?

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.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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 ?




Con la fuerza del mar, con la paz del rio


Hola!! les dejo un No tienes permitido ver los links. Registrarse o Entrar a mi cuenta de los comandos básicos que hice, espero que sirva! saludos!