You are on page 1of 40

EN TODO ESTÁS VOS

GIT
Control de versiones
Momento de presentarse
● Mariano Carballal
● Programador
● GO de Plataforma Digital
● Responsable de los sitios web y aplicaciones
móviles de la ciudad en DGGOBE
● Alguna de las tecnologías con las cuales trabajo
son: Javascript, Python, PHP, NodeJS, Django,
Drupal, AngularJS, Solr, bla bla bla
¿Qué es GIT?
● Sistema de control de versiones
● Evitar pérdida de información
● Facilitar el trabajo en equipo
● Transferir archivos
¿Cómo instalar GIT?
> sudo yum install git-core
> sudo apt-get install git
> brew install git o
http://sourceforge.net/projects/git-osx-inst
aller/
> http://msysgit.github.io/
¿Cómo funciona GIT?
¿Qué es el working directory?
¿Qué es el staging area?
¿Qué es el repository?
Antes de empezar

> git config --global user.name "John Doe"


> git config --global user.email johndoe@example.com
¿Cómo se crea un repositorio?
En la consola de comandos tipear:
> mkdir test
> cd test
> touch README.md
> git init
> git status
Clonar un repositorio
Si el repositorio ya existe y sólo queremos
sumarnos para trabajar debemos clonar el
mismo.
> git clone git://github.com/schacon/grit.git mygrit
Agregando archivos al repositorio
> git add -u
Agrega los archivos modificados y borrados al
próximo commit
> git add .
Agrega los archivos nuevos al próximo commit
> git add . -A
Agrega archivos borrados, editados y nuevos al
próximo commit
¿Qué es el archivo .gitignore?
El archivo .gitignore sirve para evitar que
aquellos archivos/directorios que no hace falta
versionar y que por algún motivo se encuentran
dentro del directorio de la aplicación, puedan
ignorarse. Es decir que los mismos no van al
repositorio remoto.
¿Qué se debe ignorar?
● Archivos de sistema como .DS_Store o
Thumbs.db
● Carpetas que contengan archivos subidos por
la aplicación como la carpeta uploads de un
sitio.
● Archivos de configuración ya que las
configuraciones son establecidas en base al
entorno.
Agregué algo que debía ignorar
Si agregaste algo que tenías que ignorar debes
eliminar el trackeo de ese archivo o carpeta
antes de agregarlo al .gitignore, para hacerlo:

> git rm --cached file.txt


Los directorios ¿son trackeados?
NO. Para enviar un directorio a un repositorio
remoto es necesario que contenga al menos un
archivo.
Se suele utilizar un archivo vacío con el
nombre “empty”.
¿Porqué es importante el README.md?

La mayoría de las plataformas web (github.com


por ejemplo) leen este archivo y lo muestran en
formato amigable. Sirve como una forma de
documentación del proyecto.
Para escribir el mismo se utiliza un lenguaje
que se denomina markdown.
http://daringfireball.net/projects/markdown/
¿Cómo se ve el README.md?
Mi primer versión
> git add . -A
> git commit -m ‘Mi primer commit’
> git status
Crear un repositorio remoto en Gitlab
● Solicitar el alta de usuario al área de QA de la ASI.
● Generar las claves ssh
● Agregar claves ssh al Gitlab
● Crear repositorio remoto
● Agregar la dirección del repositorio remoto al
repositorio local.

http://git-asi.buenosaires.gob.ar/
Enviando al repositorio remoto mis cambios

> git pull origin master


> git push origin master
Actualizando mi repositorio local
Para actualizar el repositorio local desde el
repositorio remoto se debe tipear:
> git pull <server-remoto> <branch-local>

Por ejemplo
> git pull origin master
Branches (Ramas)
Para crear una nueva rama
> git checkout -b nueva-feature-1002

Para listar las ramas y ver la actual


> git branch
Terminé con la feature ¿y ahora?
Una vez implementada la feature se debe integrar en la
rama estable.
> git checkout master
> git pull origin master
> git checkout nueva-feature-1002
> git merge master
> git checkout master
> git merge nueva-feature-1002
Alguien creó una rama ¿Cómo la traigo?

Si algún miembro del equipo que trabaja en el


proyecto creó una rama y queremos traer la
misma para continuar con su trabajo debemos
tipear:
> git fetch
> git checkout <branch-name>
¿Cómo envío una rama al repositorio remoto?

Para enviar una rama a un repositorio


remoto se debe escribir los siguiente:
> git push <server-name> <local-branch-name>

Por ejemplo:
> git push origin new-feature-1002
Tengo conflictos ¿y ahora quién podrá defenderme?

Un conflicto ocurre cuando alguna persona que trabajó


en el repositorio modificó lo mismo que yo.

Por ejemplo: Marcos borra la línea 25 del archivo


README.md y yo en vez de borrar la línea cambio su
contenido.
Cuando me traiga lo que hizo marcos voy a tener un
conflicto.
¿Cómo se ve un conflicto?
¿Cómo se arregla un conflicto?
Borrar la rama
Para borrar una en el repositorio local basta
con tipear
> git branch -d nueva-feature-1002

Para hacer lo mismo en remoto


> git push origin :nueva-feature-1002
Revisando el log
Para saber cuáles fueron los últimos cambios
en el repositorio se debe tipear:
> git log

La forma más amigable de ver esto es con una


herramienta visual como gitk o el cliente para
git de github.
¿Cómo se ve un log?
Rollback
El siguiente comando remueve los archivos
nuevos que sin querer coloqué en el
repositorio:

> git clean -f


Rollback
Si todavía lo que cambié no esta commiteado
pero ya estaba trackeado, es decir que
formaba parte de la versión anterior pero
todavía no estaba en el stage (no se ejecutó git
add todavía):

> git checkout .


Rollback
Si todavía lo que cambié no esta commiteado pero ya
estaba trackeado, es decir que formaba parte de la
versión anterior y ya estaba agregado al stage (se
corrió git add):

> git reset HEAD

Va a llevar el repositorio al último commit.


Rollback al último commit (infalible)
Para asegurarnos de ir al último commit y
descartar todo lo que hayamos hecho en el
repositorio local:

> git clean -f


> git reset HEAD
> git checkout .
Rollback a un commit particular
Si queremos ir a un commit particular estable:
> git reset --hard <commit-hash>

CUIDADO: Este comando destruye todo el


historial que se generó después de ese
commit.
Usar solo cuando es muy necesario.
Herramientas visuales
● Gitk
● GitHub for Windows
● GitHub for Mac
● Source Tree
Gitk
Github
Source Tree
GRACIAS
Mariano Carballal
GO Plataforma Digital
Gobierno Electrónico - ASI
marianocarballal@gmail.com
Próximo curso
Curso de Organización interna de trabajo: No más mail
03/07 10 a 13 hs.

You might also like