Gran Innovación Tecnologica o Gasto Inutil de Tiempo, dependiendo de como les funcione.
Git es una herramienta de control de versiones que se basa en el principio de un arbol de grafos. Esto permite que sea un control distribuido, sin depender de un sistema central (aunque a menudo este es el caso). Los cambios son a nivel del contenido de los archivos, lo que permite que operaciones como cambios de nombre o la adición de unas pocas lineas sean eficientes en memoria y ancho de banda.
XKCD 1597 - git
Utilizando Chocolatey como habiamos visto en la sesión pasada.
Alternativamente, aquí esta la descarga para Windows.
En la mayor parte de las distros ya viene preinstalado. Sino, se puede instalar siguiendo esta guia.
Github es un servicio de hosting de codigo. Ofrece la capacidad de crear repositorios imilitados como OpenSource, crear repositorios en estructuras predefinidas, guardar codigo en una boveda en el Artico, colaborar con más gente, etc.
Una gran cantidad de codigo OpenSource esta disponible en github.
Se puede crear una cuenta gratuita, asociada a un correo
Github acepta varias formas de verificar identidad. La más simple puede ser usar un token de identificación. El token se saca de Settings/Tokens.
Deberia ser una cadena como afb12ab124578ac121223asd1213as1212as12120
Para iniciar un repositorio de git, usamos git init dentro de la carpeta del repositorio.
git clone <direccion> <carpeta> permite clonar repositorios, desde un remoto local (aka. otra carpeta) o un remoto disponible en linea.
Para este taller haremos
Un commit es un snapshot del estado actual del repositorio, y usualmente representa un cambio funcional que estamos haciendo sobre el codigo.
Por ejemplo, añadir una nueva sección de procesamiento, nuevos graficos son un commit, o una nueva función.
Para crear un commit, necesitamos especificar que archivos vamos a añadir. Esto es porque usualmente modificamos más archivos de los que implican nuestro cambio funcional, especialmente si es más de uno a la vez.
Siguiendo el ejemplo, los archivos modificados para añadir nuevos graficos y crear una nueva funcion debiesen ir en commits separados.
# Añadiendo archivos especificos
git add arhivo1.txt archivo2.Rmd archivo3.csv
# Añadiendo un grupo de archivos con cierto nombre
git add figura* *.png
# Usualmente solo añadimos todos los cambios
git add .Teniendo esta lista de cambios, podemos crar un commit. Es recomendable darle una descripción detallada.
# Para commit simples usamos solo un titulo corto
git commit --message "Titulo del commit"
# Para cambios más complejos es recomendable escribir una descripción
git commit # Esto abrira un editor de textoTitulo del commit
Una breve descripción de los cambios hechos y cambios
por hacer; en texto plano. Git recomienda hacer lineas
cortas de maximo 72 caracteres, dado que nativamente no
es capaz de romper las lineas.
- Una lista de cambios
- Como este
- O este otro
TODO:
- Una lista de cosas por hacer
Es la sincronización desde un remoto, para bajar los cambios que otros colaboradores han hecho.
Al clonar desde un repositorio, como https:github.git, se crea automaticamente un remote origin con sus branches, como master.
En el caso de github, se requiere autorización previa e identificación para poder hacer push a un repo.
El archivo .gitignore es una lista de cosas que por defecto git ignorara para cambios. Lo usamos para evitar sincronizar scrips locales, información personal, pruebas, o datasets de gran tamaño que no es necesario mantener en un repositorio.
# Ignora los archivos comprimidos
**/*.gz
**/*.tgz
**/*.tar
**/*.zip
# Ignora archivos con un flag local de ignorar
**/ignora*
**/test*
# Ambiente y desarrollo de cuadernos
*.ipynb_checkpoints
*.RData
*.Rhistory
**/tmp
La sintaxis **/ significa cualquier subdirectorio.
.gitignore puede estar en cada directorio del proyecto, marcando archivos dentro de esos directorios; pero usualmente esta en el directorio raiz del proyecto, para así ser aplicado a todos los subdirectorios.
El archivo de configuración guarda información, preferencias y alias que podemos usar diariamente. Es recomendable personalizarlo a nuestra necesidad, para un workflow más eficiente con el programa.
Para acceder a -editar el archivo
[user]
email = <MAIL@MAIL.COM>
name = <NOMBRE>
username = <USERNAME>
[url "https://<TOKEN-BASICO>@github.com/"]
insteadOf = https://github.com/
[core]
editor = nano
[alias]
a = commit --all
m = commit --all --message
fk = commit --amend
l = log --oneline
ls = log --graph --decorate
s = status
ss = status --short
sv = status --verbose
pa = pull --autostash
pom = push origin master
r = remote
ru = remote get-url --all
rrm = remote remove
ge = config --global --edit
Podemos añadir configuraciones desde comandos sin entrar a editar
git config --global user.name "NOMBRE APELLIDO" configura el nombre que firmará gitgit config --global user.email "MAIL@MAIL" configura el mail que firmará gitCoronavirus! Pasando de las noticias y la vida diaria a su taller de bioinformatica
# Clonando un repositorio desde git
git clone https://github.com/DeepenData/talleres-programacion.git talleresAqui existen varios cuadernos con distintos parametros para ordenar una filogenia reducida de SARS-Cov2-19, con varios genomas ya alineados.
Modifiquen el chunk
Corran todo el cuadeno, esto generara una figura nombre_figura.jpg. Luego vamos a pushear solo la imagen.
# Subiendo el archivo
# solo la figura que queremos modificar
git add figuras/nombre_figura.png # En Linux/Mac
git add figuras\\nombre_figura.png # En Windows
# Git commit, para guardar el snapshoot
git commit --message "Crea figura nombre_figura"
# Git push
git push # asume que es origin mainPara descargar las figuras de los demas se puede hacer un pull desde el remoto
De momento omitimos comandos más complejos como merge, checkout, diff, blame, etc.
Git es un sistema diseñado para controlar cambios, como muchas personas trabajando en distintos componentes de un proyecto. No esta pensado para trabajar en tiempo real, a la Google Docs, y el usarlo así usualmente es una receta para llamar a merge conflicts y errores más esotericos.
Para colaboración en tiemo real pueden usar Live-Share, una extensión de VS Code que permite compartir un espacio y trabajar colaborativamente en tiempo real.
Los cambios se guardan en el espacio del host, y despues de esto es recomendable correr git add commit push pull para sincronizar todo con otros colaboradores y el historial de desarrollo.
Recitando comandos magicos de Git
git clone https://github.com/DeepenData/clases.git permite descargar el repo. Solo se hace al inicio.git remote add clases https://github.com/DeepenData/clases.git añade el repo de GitHub a la lista de remotes, para de ahi hacer los push. El formato git pull --rebase --autostash para bajar la ultima versión del repo. Util cada clase y cada vez que alguien modifica algo. --autostash archiva los cambios locales durante el pull. git commit -m "MENSAJE DEL COMMIT" crea un commit con cambios e idelamente un mensaje explicativo. Son snapshots para la historia.git push -u <remote> <branch> empuja esta versión al remoto. En github, requiere autorización previa.FONDECYT Postdoctoral Fellow, Universidad de Chile, deepen.data@gmail.com↩︎
Pregrado, Universidad de Chile↩︎