GIT

Comparte tu Código



SFD Bucaramanga 2014   

¿Que es un sistema de control de versiones?

Herramientas que facilitan la administración de las distintas versiones de cada producto

¿Por qué debería usar control de versiones?


¿Por qué debería usar control de versiones?

Alguna vez:

  • Has hecho un cambio en el código, te has dado cuenta que es un error, y has querido desahacerlo?
  • Perdido  código o tener un  "backup" muy viejo?
  • Tener que mantener múltiples versiones de un producto?
  • Has querido ver la diferencia entre dos o más versiones de tu código?
  • Has querido probar  si un cambio en particular daña o arregla una parte de código?

¿Por qué debería usar control de versiones?

Alguna vez:

  • Has querido revisar la historia de algún código?
  • Has querido subir un cambio al código de alguien mas?
  • Has querido  compartir tu código, o dejar a otras personas trabajar en este?
  • Has querido ver que tanto trabajo se ha realizado, y donde, cuando y quien lo hizo?
  • Has querido experimentar con una nueva característica sin interferir con el código en funcionamiento?

Ejemplos: https://github.com/torvalds/linux    https://github.com/django/django

Por que git?


  • Velocidad
  • Diseño simple
  • Soporte robusto para desarrollo no-lineal  (miles de ramas en paralelo)
  •   Totalmente distribuido
  • Es capaz de manejar grandes proyectos eficientemente, como el kernel de Linux (velocidad y tamaño de datos)

https://en.wikipedia.org/wiki/Comparison_of_revision_control_software

github? Bitbucket? Algún Otro?



Una red social para programadores :)

https://en.wikipedia.org/wiki/Comparison_of_open-source_software_hosting_facilities#Available_version_control_systems

historia de git


Git basico

Snapshots, No Diferencias

git basico

casi todas las operaciones son locales

Tu tienes toda la historia de tu proyecto en tu disco local


Git tiene Integridad

Todo en git tiene suma de comprobacion


Git generalmente solo añade datos

Es muy difícil perder datos

git basico

los tres estados

empezando

configurando git


git config {key} {value}
user.name
user.email
core.editor
merge.tool

git config --list

Empezando

ayuda

git help <verb>

git help config

Auto-Completado

https://github.com/git/git/blob/master/contrib/completion/git-completion.bash
source ~/.git-completion.bash

iniciando un repositorio git

$ git init
$ git init --bare <directory>

$ git clone git://github.com/schacon/simplegit-progit.git

iniciando un repositorio git

svn vs git


guardando cambios

$ git add *.py
$ git add README

$ git commit -m 'initial project version'


guardando cambios

estados de los archivos en git

revisando un repositorio git

$ git status 

Git Tutorial: git status

$ git log 

revisando un repositorio git

revisando un repositorio git

$ git blame <file>

http://www.linuxhispano.net/tira/blame.png

otros comandos utiles


$ cat .gitignore
$ git diff
$ git diff --staged
$ git rm <file>
$ git rm --cached <file>
$ git mv <file_from> <file_to>

deshaciendo cosas


$ git commit --amend

$ git reset 

$ git checkout <commit> <file>
$ git checkout <branch>

git revert <commit>

git clean 

deshaciendo cosas

reset vs revert

Git Tutorial: Revert vs Reset

no uses reset en un repositorio publico

ramas en Git

Git Tutorial: Branching and Merging

ramas en git (branch)

$ git branch <branch>
Git Tutorial: Create new branch     Git Tutorial: git branch

ramas en git (branch)

$ git checkout <branch>

Git Tutorial: Switch between multiple features in a single repo with git checkout.      Git Tutorial: Attached vs Detached Head

ramas en git (branch)

$ git merge 
$ git merge --no-ff 

fast-forward 3-way merge

Git Tutorial: Fast-forward merge       Git Tutorial: Three way merge

resolviendo conflictos

http://www.linuxhispano.net/tira/conflictos.png
$ git merge some_branch
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

trabajando con repositorios remotos


$ git remote
$ git remote add test http://dev.example.com/test.git 


$ git fetch <remote> <branch>
$ git branch -r
$ git merge origin/master

 git pull <remote> <branch>

git push <remote> <branch>




Gracias :)


https://github.com/rlaverde

@rafa_laverde

referencias y enlaces útiles

http://git-scm.com/book/

https://www.atlassian.com/git/tutorial

http://try.github.io

http://zrusin.blogspot.com/2007/09/git-cheat-sheet.html

http://www.vogella.com/articles/Git/article.html

http://marklodato.github.io/visual-git-guide/index-en.html

http://gitimmersion.com

http://www.youtube.com/GitHubGuides

http://sixrevisions.com/resources/git-tutorials-beginners/

referencias y enlaces útiles

https://help.github.com/articles/set-up-git

https://help.github.com/articles/generating-ssh-keys
Made with Slides.com