## Plan Partimos __dende cero__! ![Keep calm and lets go](img/keepcalm_letgo.jpg) [Photo: Randy Heinitz](https://www.flickr.com/photos/rheinitz/8578335823/)
## Ferramentas a usar A __consola__ GNU/Linux é a nosa aliada ![Consola GNU/Linux](img/console_allied.png) [Photo: pixabay (OpenClipartVectors)](https://pixabay.com/en/linux-tux-administrator-animal-154544/) Tamén usaremos algunha interfaz gráfica / web...
## Levando a charla Conceptos ≠ Teoría ⇒ Práctica ![Consola GNU/Linux](img/gohome_teacher.jpg) [Photo: pixabay (geralt)](https://pixabay.com/en/teacher-antiauthoritarian-teaching-379218/) Interactúa!
## A necesidade de versionar Os cambios existen. No dixital son moi habituais. ![Cambios](img/change_cycle.png) [Photo: pixabay (geralt)](https://pixabay.com/en/change-arrows-transformation-1076219/) - Marcha atrás nos cambios - Comparar con cambios anteriores - Saber quen fixo os cambios
## Socorro! Unha ferramenta - Version Control System (VCS) - Software Configuration Management (SCM) - Source Control Management (SCM, tamén?) ![Colaboración Android e Comunidade](img/android_community.png) [Photo: Android Documentation](https://source.android.com/source/code-lines.html)
## Evolución dos SCM (libres) - RCS - Revision Control System (por ficheiro) - CVS - Concurrent Versions System (multiusuario) - Subversion (eficiente en rede) ![Logo Subversion](img/subversion_logo.png) [Photo: Apache Software Fundation](http://subversion.apache.org/)
## E Linus Torvalds plantou Git ![Torvalds lanza Git](img/linux_git.png) [Photo: SlideShare.net (mikeflynn_)](http://www.slideshare.net://mikeflynn_/git-its-better-trust-me) - Hoxe é o máis usado, desbancando ao resto. - Ecosistema de ferramentas.
## Abrimos unha consola? ``` # sistemas Debian: sudo apt-get install git gitg # sistemas RPM: sudo yum install git gitg ``` ![Git en consola](img/git_console.png)
## Manual do sistema (_man pages_) - A fonte directa máis completa para entender cada orde ![Git en consola](img/man_pages.png) ``` git help ORDE_GIT ``` ``` man git-ORDE_GIT ```
## StackOverflow ![StackOverflow](img/stackoverflow.png) http://stackoverflow.com
## Git book ![StackOverflow](img/git_book.png) https://git-scm.com/book/es/v2
## Chuleta para imprimir ![Git Cheat Sheet](img/git_cheat_sheet.png) [Google Images "Git Cheatsheet"](http://zrusin.blogspot.nl/2007/09/git-cheat-sheet.html)
## Chuleta interactiva ![Git Cheat Sheet](img/git_cheat_sheet_ndp.png) [Cheatsheet NDP](http://ndpsoftware.com/git-cheatsheet.html) - Interactiva! - Substituto das páxinas 'man' - Traducida a varias linguas
## Configuración - Por repositorio - Global ao usuario (--global) ---- ### Nome e email do usuario ``` git config --global user.name 'Nome Apelido' git config --global user.email 'nomeapelido@correo.sample' ``` ### Configuración activa ``` git config --list ``` ![GitHub](img/git_config.png)
## Área de traballo - onde fedellamos cos ficheiros e directorios - partimos dun directorio __raíz de proxecto__ ---- ## Repositorio - historia con todos os __cambios xestionados por git__ - subdirectorio __.git__ na raíz do proxecto (non editar!) ![Área de traballo e repositorio git](img/working_area.png)
## Crear un repositorio ``` git init [DIRECTORIO] _ ``` ![Creando un repositorio dende 0](img/git_init.png) 1. Crea un novo directorio no teu disco duro para un novo proxecto e inicializa o repositorio Git. 2. Crea un ficheiro de texto _README.md_ co título do proxecto dentro. 3. Executa `git add README.md && git commit -m 'BigBang'`
## Copiar (clonar) un repositorio ``` git clone URL_REPO [DIRECTORIO] _ ``` ![Clonando un repositorio](img/git_clone.png) 1. Clona no teu disco duro o repositorio que está na URL **https://github.com/rafacouto/git-minicurso.git** 2. Extra: volve a facer o mesmo pero agora que o directorio sexa **/tmp/slides** e logo borra o subdirectorio **/tmp/slides/.git**
### Historial de cambios ``` git log --oneline --tags _ ``` ![Histórico de cambios](img/git_log.png) ---- - Filtros por data: --since=2016-03-12 --until=2016-03-31 - Outros filtros: --author=caligari --grep="regex"
### Etiquetas - Etiqueta: __referencia a un commit__ concreto cun nome 'sinxelo'. ![Etiqueta como referencia](img/tag.png) ---- ``` git tag v1.1-placidus 17de0f2c git tag git checkout v1.1-placidus git log --decorate _ ```
### Referencia HEAD - É unha referencia que sempre apunta ao último commit da póla (branch) actual. ![Referencia HEAD](img/head_ref.png) [Photo: Nulab Inc. (Backlog)](https://backlogtool.com/git-guide/en/stepup/stepup1_3.html) ---- #### Referencias relativas a HEAD - HEAD^ (un commit antes da actual HEAD) - HEAD^^ (dous commit antes da actual HEAD) - HEAD~n ('n' commit antes da actual HEAD)
### Moverse entre versións ``` git checkout _ ``` ![Cambiado de versión con checkout](img/git_checkout.png) [Photo: RyPress.com](http://rypress.com/tutorials/git/tips-and-tricks) ---- 1. Clonar o repositorio de firmware do Escornabot https://github.com/escornabot/arduino.git 2. Ir a versión marcada como _v1.1-placidus_
### Examinar cambios no área de traballo ``` git status _ ``` ![Estado do área de traballo](img/git_status.png)
### Creación dun paquete de cambios ``` git commit -m 'MENSAXE DE CAMBIOS' _ ``` ![Operaciones locales](img/local_operations.png) [Photo: Juri Strumpflohner](http://juristr.com/blog/2013/04/git-explained/)
### Preparando o commit ``` git add FILES git rm FILES git mv SRC DST _ ``` ![File lifecycle](img/file_status_lifecycle.png) [Photo: oxkhar (slides)](http://slides.oxkhar.com/git/#/) ``` git diff _ ```
### GitHub - O git na web e moito máis ![GitHub](img/github_logo.png) - Crear unha __conta Github__ - Receitas para __crear un repositorio__ en Github - Ficheiros README.md (formato de texto __markdown__)