latex y git: ¿cómo controlar archivos de latex eficientemente?
DESCRIPTION
En el desarrollo en documentos de LaTeX (tesis, libros, artículos, etc.), el manejo eficiente de los cambios es una tarea vital. Es una tarea aún más importante si se necesita compartir esos archivos con terceros. Git es un sistema controlador de versiones que fue concebido para solucionar estos problemas. Esta charla es una introducción al sistema Git en archivos LaTeX. Este permite opciones interesantes como la edición en paralelo de archivos y la facilidad para compartir documentos. -- Coloquios Escuela Matemática UCR.TRANSCRIPT
LATEX y Git¾Cómo controlar documentos en LATEX e�cientemente?
Maikol Solís
LATEX
LATEX es un excelente sistema para crear textosmatemáticos.
Si no sabe como usarlo, pregunte, busque y aprenda porquelo va a necesitar tarde o temprano.
Maikol Solís LATEX y Git 2 / 51
Sección 1
¾Qué es Git?
Maikol Solís LATEX y Git 3 / 51
Historia
Git fue creado por Linus Torvals en 2005.
La idea era poder controlar los cambios en el kernel Linux.
Las características del nuevo sistema eran:I Velocidad.I Diseño simple.I Desarrollo no lineal (trabajos en paralelo).I Fácil colaboración.I entre otros.
Maikol Solís LATEX y Git 4 / 51
¾Quién usa Git?
y muchísimos proyectos más...
Maikol Solís LATEX y Git 5 / 51
Instalación
Linux: Ubuntu, Debian, OpenSuse, Fedora, ...
MacOS: brew install git.
Windows:
Es posible pero desconozco como funciona.
Maikol Solís LATEX y Git 6 / 51
Instalación
Linux: Ubuntu, Debian, OpenSuse, Fedora, ...
MacOS: brew install git.
Windows:
Es posible pero desconozco como funciona.
Maikol Solís LATEX y Git 6 / 51
Instalación
Linux: Ubuntu, Debian, OpenSuse, Fedora, ...
MacOS: brew install git.
Windows:
Es posible pero desconozco como funciona.
Maikol Solís LATEX y Git 6 / 51
Instalación
Linux: Ubuntu, Debian, OpenSuse, Fedora, ...
MacOS: brew install git.
Windows: Es posible pero desconozco como funciona.
Maikol Solís LATEX y Git 6 / 51
Sección 2
Nombres anticipados
Maikol Solís LATEX y Git 7 / 51
El problema
Se empieza un proyecto nuevo (artículo, tesis de maestría, lista de
ejercicios, reporte de proyecto, etc).
¾Cómo guardamos los cambios importantes?
Una forma es ir haciendo copias de seguridad.
proyecto.tex
proyecto.2013_08_01.tex
proyecto.2013_08_03.tex
...
Esto podría funcionar bien...
Maikol Solís LATEX y Git 8 / 51
El problema
Se empieza un proyecto nuevo (artículo, tesis de maestría, lista de
ejercicios, reporte de proyecto, etc).
¾Cómo guardamos los cambios importantes?
Una forma es ir haciendo copias de seguridad.
proyecto.tex
proyecto.2013_08_01.tex
proyecto.2013_08_03.tex
...
Esto podría funcionar bien...
Maikol Solís LATEX y Git 8 / 51
El problema
Se empieza un proyecto nuevo (artículo, tesis de maestría, lista de
ejercicios, reporte de proyecto, etc).
¾Cómo guardamos los cambios importantes?
Una forma es ir haciendo copias de seguridad.
proyecto.tex
proyecto.2013_08_01.tex
proyecto.2013_08_03.tex
...
Esto podría funcionar bien...
Maikol Solís LATEX y Git 8 / 51
El problema
¾O tal vez no?
Se empieza un proyecto nuevo (artículo, tesis de maestría, lista de
ejercicios, reporte de proyecto, etc).
¾Cómo guardamos los cambios importantes?
Una forma es ir haciendo copias de seguridad.
proyecto.tex
proyecto.2013_08_01.tex
proyecto.2013_08_03.tex
...
Esto podría funcionar bien...
Maikol Solís LATEX y Git 8 / 51
�Final� (¾?)
Maikol Solís LATEX y Git 9 / 51
Antes: Mi tesis de Maestría
Maikol Solís LATEX y Git 10 / 51
Entonces, ¾Cómo funciona Git?
Conserva una única versión de cada archivo.
Evita la repetición de archivos con diferentes nombres.
Toma una �foto� de los cambios periódicamente.
Los cambios se guardan con el comando �git commit�.
Esas �fotos� quedan en una bitácora de cambios.
Este registro es una memoria de largo plazo.
Maikol Solís LATEX y Git 11 / 51
Entonces, ¾Cómo funciona Git?
Conserva una única versión de cada archivo.
Evita la repetición de archivos con diferentes nombres.
Toma una �foto� de los cambios periódicamente.
Los cambios se guardan con el comando �git commit�.
Esas �fotos� quedan en una bitácora de cambios.
Este registro es una memoria de largo plazo.
Maikol Solís LATEX y Git 11 / 51
Entonces, ¾Cómo funciona Git?
Conserva una única versión de cada archivo.
Evita la repetición de archivos con diferentes nombres.
Toma una �foto� de los cambios periódicamente.
Los cambios se guardan con el comando �git commit�.
Esas �fotos� quedan en una bitácora de cambios.
Este registro es una memoria de largo plazo.
Maikol Solís LATEX y Git 11 / 51
Entonces, ¾Cómo funciona Git?
Archivoproyecto.tex
Registro de cambios
Author: Fulano <[email protected]>
Date: Sat Mar 15 16:40:33 2008 -0700
agregué un nuevo teorema
Author: Sutano <[email protected]>
Date: Sat Mar 15 10:31:28 2008 -0700
primera modficación
Maikol Solís LATEX y Git 12 / 51
Después: Artículo controlado
Maikol Solís LATEX y Git 13 / 51
Sección 3
¾Cómo empiezo?
Maikol Solís LATEX y Git 14 / 51
El inicio � git init
Lo primero es crear un directorio compatible con Git.
$ cd /directorio/del/proyecto
$ git init
Initialized empty Git repository
in /directorio/del/proyecto/.git/
Recuerde
git init Inicializa cualquier directorio como un directorio Git.
½Perfecto! Ya podemos empezar a trabajar.
Maikol Solís LATEX y Git 15 / 51
El inicio � git init
Lo primero es crear un directorio compatible con Git.
$ cd /directorio/del/proyecto
$ git init
Initialized empty Git repository
in /directorio/del/proyecto/.git/
Recuerde
git init Inicializa cualquier directorio como un directorio Git.
½Perfecto! Ya podemos empezar a trabajar.
Maikol Solís LATEX y Git 15 / 51
El inicio � git init
Lo primero es crear un directorio compatible con Git.
$ cd /directorio/del/proyecto
$ git init
Initialized empty Git repository
in /directorio/del/proyecto/.git/
Recuerde
git init Inicializa cualquier directorio como un directorio Git.
½Perfecto! Ya podemos empezar a trabajar.
Maikol Solís LATEX y Git 15 / 51
Aclaración: Dos formas de usar git.
Interfaz grá�ca: Git-Cola, SmartGit, etc.
Maikol Solís LATEX y Git 16 / 51
Aclaración: Dos formas de usar git.
Consola.
Maikol Solís LATEX y Git 16 / 51
Estado de las cosas � git status
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will
#be committed)
#
# proyecto.tex
nothing added to commit but untracked files present
(use "git add" to track)
$ git status -s
?? proyecto.tex
Maikol Solís LATEX y Git 17 / 51
Estado de las cosas � git status
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will
#be committed)
#
# proyecto.tex
nothing added to commit but untracked files present
(use "git add" to track)
$ git status -s
?? proyecto.tex
Maikol Solís LATEX y Git 17 / 51
Estado de las cosas � git status
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will
#be committed)
#
# proyecto.tex
nothing added to commit but untracked files present
(use "git add" to track)
$ git status -s
?? proyecto.tex
Maikol Solís LATEX y Git 17 / 51
Agregando archivos � git add
Se tienen que de�nir cuales archivos quiero controlar.
Estos archivos se agregan a una zona temporal (staging).
$ git add proyecto.tex
$ git status -s
A proyecto.tex
Maikol Solís LATEX y Git 18 / 51
Agregando archivos � git add
Se tienen que de�nir cuales archivos quiero controlar.
Estos archivos se agregan a una zona temporal (staging).
$ git add proyecto.tex
$ git status -s
A proyecto.tex
Maikol Solís LATEX y Git 18 / 51
Manos a la obra
Comencemos a escribir nuestro documento...
\documentclass{article}
\title{Mi nuevo proyecto}
\author{Profesor X}
\begin{document}
\maketitle
Este será un gran proyecto.
\end{document}
Lo primero que notamos es
$ git status -s
AM proyecto.tex
Maikol Solís LATEX y Git 19 / 51
Manos a la obra
Comencemos a escribir nuestro documento...
\documentclass{article}
\title{Mi nuevo proyecto}
\author{Profesor X}
\begin{document}
\maketitle
Este será un gran proyecto.
\end{document}
Lo primero que notamos es
$ git status -s
AM proyecto.tex
Maikol Solís LATEX y Git 19 / 51
Viendo las diferencias � git diff
$ git diff
diff --git a/proyecto.tex b/proyecto.tex
index e69de29..82e2f40 100644
--- a/proyecto.tex
+++ b/proyecto.tex
@@ -0,0 +1,7 @@
+\documentclass{article}
+\title{Mi nuevo proyecto}
+\author{Profesor X}
+\begin{document}
+\maketitle
+Este será un gran proyecto.
+\end{document}
+ Línea agregada.
- Línea eliminada.
Maikol Solís LATEX y Git 20 / 51
Viendo las diferencias � git diff
$ git diff
diff --git a/proyecto.tex b/proyecto.tex
index e69de29..82e2f40 100644
--- a/proyecto.tex
+++ b/proyecto.tex
@@ -0,0 +1,7 @@
+\documentclass{article}
+\title{Mi nuevo proyecto}
+\author{Profesor X}
+\begin{document}
+\maketitle
+Este será un gran proyecto.
+\end{document}
+ Línea agregada.
- Línea eliminada.
Maikol Solís LATEX y Git 20 / 51
Viendo las diferencias � git diff
$ git diff
diff --git a/proyecto.tex b/proyecto.tex
index e69de29..82e2f40 100644
--- a/proyecto.tex
+++ b/proyecto.tex
@@ -0,0 +1,7 @@
+\documentclass{article}
+\title{Mi nuevo proyecto}
+\author{Profesor X}
+\begin{document}
+\maketitle
+Este será un gran proyecto.
+\end{document}
+ Línea agregada.
- Línea eliminada.
Maikol Solís LATEX y Git 20 / 51
Guardando los cambios � git commit
$ git commit proyecto.tex
Iniciando mi nuevo proyecto �-> Mensaje opcional de los cambios.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Explicit paths specified without -i nor -o; assuming �only paths...
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: proyecto.tex
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# proyecto.aux
# proyecto.log
# proyecto.pdf
Maikol Solís LATEX y Git 21 / 51
Guardando los cambios � git commit
$ git commit proyecto.texIniciando mi nuevo proyecto �-> Mensaje opcional de los cambios.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Explicit paths specified without -i nor -o; assuming �only paths...
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: proyecto.tex
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# proyecto.aux
# proyecto.log
# proyecto.pdf
Maikol Solís LATEX y Git 21 / 51
Enjuage y repita
Se modi�ca los archivos en la computadora.
git add Agrega eso archivos a una zona temporal
git status Muestra el estado de los archivos modi�cados.
git di� Muestra las diferencias entre lo que está en la zona temporal y
lo que está en el directorio de trabajo.
git commit Guarda todos los cambios de la zona temporal al registro
de cambios.
Maikol Solís LATEX y Git 22 / 51
Enjuage y repita
Se modi�ca los archivos en la computadora.
git add Agrega eso archivos a una zona temporal
git status Muestra el estado de los archivos modi�cados.
git di� Muestra las diferencias entre lo que está en la zona temporal y
lo que está en el directorio de trabajo.
git commit Guarda todos los cambios de la zona temporal al registro
de cambios.
Maikol Solís LATEX y Git 22 / 51
Enjuage y repita
Se modi�ca los archivos en la computadora.
git add Agrega eso archivos a una zona temporal
git status Muestra el estado de los archivos modi�cados.
git di� Muestra las diferencias entre lo que está en la zona temporal y
lo que está en el directorio de trabajo.
git commit Guarda todos los cambios de la zona temporal al registro
de cambios.
Maikol Solís LATEX y Git 22 / 51
Enjuage y repita
Se modi�ca los archivos en la computadora.
git add Agrega eso archivos a una zona temporal
git status Muestra el estado de los archivos modi�cados.
git di� Muestra las diferencias entre lo que está en la zona temporal y
lo que está en el directorio de trabajo.
git commit Guarda todos los cambios de la zona temporal al registro
de cambios.
Maikol Solís LATEX y Git 22 / 51
Enjuage y repita
Se modi�ca los archivos en la computadora.
git add Agrega eso archivos a una zona temporal
git status Muestra el estado de los archivos modi�cados.
git di� Muestra las diferencias entre lo que está en la zona temporal y
lo que está en el directorio de trabajo.
git commit Guarda todos los cambios de la zona temporal al registro
de cambios.
Maikol Solís LATEX y Git 22 / 51
Vamos por partes � hunks
Hagamos algunos cambios a nuestro documento.
\documentclass[spanish]{article}
%% Paquetes
\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{amssymb}
%% Tipos de teorema
\theoremstyle{plain}
\newtheorem{teorema}{Teorema}
%% Titulo
\title{Mi nuevo proyecto}
%% Autor
\author{Profesor X}
%% Inicio
\begin{document}
\maketitle
Este ser\'a un gran proyecto.
\begin{teorema}
Para todo $\theta\in\mathbb{R}$, $\sin^2\theta+\cos^2\theta=1$.
\end{teorema}
\end{document}
Maikol Solís LATEX y Git 23 / 51
Vamos por partes � hunks
diff �git a/proyecto.tex b/proyecto.tex
index 9ba2543..1b8308b 100644
�- a/proyecto.tex
+++ b/proyecto.tex
@@ -1,5 +1,10 @@
\documentclass[spanish]{article}
+%% Paquetes
+\usepackage{amsthm}
+\usepackage{amsmath}
+\usepackage{amssymb}
+
%% Tipos de teorema
\theoremstyle{plain}
\newtheorem{teorema}{Teorema}
@@ -16,4 +21,8 @@
Este ser\'a un gran proyecto.
+\begin{teorema}
+ Para todo $\theta\in\mathbb{R}$,
+ $\sin^2\theta+\cos^2\theta=1$.
+\end{teorema}
+
Tarea
git commit -p Para guardar los cambios selectivamente.
Maikol Solís LATEX y Git 24 / 51
Vamos por partes � hunks
diff �git a/proyecto.tex b/proyecto.tex
index 9ba2543..1b8308b 100644
�- a/proyecto.tex
+++ b/proyecto.tex
@@ -1,5 +1,10 @@
\documentclass[spanish]{article}
+%% Paquetes
+\usepackage{amsthm}
+\usepackage{amsmath}
+\usepackage{amssymb}
+
%% Tipos de teorema
\theoremstyle{plain}
\newtheorem{teorema}{Teorema}
@@ -16,4 +21,8 @@
Este ser\'a un gran proyecto.
+\begin{teorema}
+ Para todo $\theta\in\mathbb{R}$,
+ $\sin^2\theta+\cos^2\theta=1$.
+\end{teorema}
+
Tarea
git commit -p Para guardar los cambios selectivamente.
Maikol Solís LATEX y Git 24 / 51
Recordando � git log
$ git log
commit 0f82ed2d76d1cfebf1c3bc606fbb7dc4bbf7983d
Author: Maikol Solís <[email protected]>
Date: Fri Jul 26 10:39:26 2013 +0200
Nuevo teorema sobre trigonometría.
commit 902deb5716fe1a609ecb5ea76a61ec8938ebb382
Author: Maikol Solís <[email protected]>
Date: Fri Jul 26 10:38:41 2013 +0200
Agregando los paquetes básicos de matemática
Maikol Solís LATEX y Git 25 / 51
Recordando � git log
$ git log
commit 0f82ed2d76d1cfebf1c3bc606fbb7dc4bbf7983d
Author: Maikol Solís <[email protected]>
Date: Fri Jul 26 10:39:26 2013 +0200
Nuevo teorema sobre trigonometría.
commit 902deb5716fe1a609ecb5ea76a61ec8938ebb382
Author: Maikol Solís <[email protected]>
Date: Fri Jul 26 10:38:41 2013 +0200
Agregando los paquetes básicos de matemática
Maikol Solís LATEX y Git 25 / 51
Recordando � git log
$ git log
commit 0f82ed2d76d1cfebf1c3bc606fbb7dc4bbf7983d
Author: Maikol Solís <[email protected]>
Date: Fri Jul 26 10:39:26 2013 +0200
Nuevo teorema sobre trigonometría.
commit 902deb5716fe1a609ecb5ea76a61ec8938ebb382
Author: Maikol Solís <[email protected]>
Date: Fri Jul 26 10:38:41 2013 +0200
Agregando los paquetes básicos de matemática
Maikol Solís LATEX y Git 25 / 51
Recordando � git log
$ git log
commit 0f82ed2d76d1cfebf1c3bc606fbb7dc4bbf7983d
Author: Maikol Solís <[email protected]>
Date: Fri Jul 26 10:39:26 2013 +0200
Nuevo teorema sobre trigonometría.
commit 902deb5716fe1a609ecb5ea76a61ec8938ebb382
Author: Maikol Solís <[email protected]>
Date: Fri Jul 26 10:38:41 2013 +0200
Agregando los paquetes básicos de matemática
Maikol Solís LATEX y Git 25 / 51
Recordando � git log
$ git log
commit 0f82ed2d76d1cfebf1c3bc606fbb7dc4bbf7983d
Author: Maikol Solís <[email protected]>
Date: Fri Jul 26 10:39:26 2013 +0200
Nuevo teorema sobre trigonometría.
commit 902deb5716fe1a609ecb5ea76a61ec8938ebb382
Author: Maikol Solís <[email protected]>
Date: Fri Jul 26 10:38:41 2013 +0200
Agregando los paquetes básicos de matemática
Maikol Solís LATEX y Git 25 / 51
Recordando � git log
$ git log
commit 0f82ed2d76d1cfebf1c3bc606fbb7dc4bbf7983d
Author: Maikol Solís <[email protected]>
Date: Fri Jul 26 10:39:26 2013 +0200
Nuevo teorema sobre trigonometría.
commit 902deb5716fe1a609ecb5ea76a61ec8938ebb382
Author: Maikol Solís <[email protected]>
Date: Fri Jul 26 10:38:41 2013 +0200
Agregando los paquetes básicos de matemática
Maikol Solís LATEX y Git 25 / 51
Sección 4
No se ande por las ramas
Maikol Solís LATEX y Git 26 / 51
Trabajando en paralelo
¾Han notado algo raro en el mensaje de git status?
# On branch master
Rami�car nuestro trabajo en diferentes proyectos o tareas
Borradores.
Nuevos elementos (ejemplos, ejercicios, simulaciones, etc.)
Ideas locas.
git branch nombre-rama copia la última versión de la rama actual a una
nueva rama llamada nombre-rama.
Maikol Solís LATEX y Git 27 / 51
Trabajando en paralelo
¾Han notado algo raro en el mensaje de git status?
# On branch master
Rami�car nuestro trabajo en diferentes proyectos o tareas
Borradores.
Nuevos elementos (ejemplos, ejercicios, simulaciones, etc.)
Ideas locas.
git branch nombre-rama copia la última versión de la rama actual a una
nueva rama llamada nombre-rama.
Maikol Solís LATEX y Git 27 / 51
Trabajando en paralelo
¾Han notado algo raro en el mensaje de git status?
# On branch master
Rami�car nuestro trabajo en diferentes proyectos o tareas
Borradores.
Nuevos elementos (ejemplos, ejercicios, simulaciones, etc.)
Ideas locas.
git branch nombre-rama copia la última versión de la rama actual a una
nueva rama llamada nombre-rama.
Maikol Solís LATEX y Git 27 / 51
Creando ramas � git branch
Para los que hacen tesis
Una rama llamada �tutor� les va a salvar la vida.
$ git branch tutor
$ git branch nuevo-teorema
$ git branch
* master
nuevo-teorema
tutor
Maikol Solís LATEX y Git 28 / 51
Creando ramas � git branch
Para los que hacen tesis
Una rama llamada �tutor� les va a salvar la vida.
$ git branch tutor
$ git branch nuevo-teorema
$ git branch
* master
nuevo-teorema
tutor
Maikol Solís LATEX y Git 28 / 51
Creando ramas � git branch
Para los que hacen tesis
Una rama llamada �tutor� les va a salvar la vida.
$ git branch tutor
$ git branch nuevo-teorema
$ git branch
* master
nuevo-teorema
tutor
Maikol Solís LATEX y Git 28 / 51
Creando ramas � git branch
Para los que hacen tesis
Una rama llamada �tutor� les va a salvar la vida.
$ git branch tutor
$ git branch nuevo-teorema
$ git branch
* master
nuevo-teorema
tutor
Maikol Solís LATEX y Git 28 / 51
De rama en rama � git checkout
$ git checkout tutor
Switched to branch 'tutor'
$ git branch
master
nuevo-teorema
* tutor
Todos los archivos serán modi�cados en la rama tutor.
Si cambiamos a otra rama (master por ejemplo), todos los cambios se
revertirán hasta el último estado de la otra rama.
½Ahora si ya podemos trabajar en paralelo!
Maikol Solís LATEX y Git 29 / 51
De rama en rama � git checkout
$ git checkout tutor
Switched to branch 'tutor'
$ git branch
master
nuevo-teorema
* tutor
Todos los archivos serán modi�cados en la rama tutor.
Si cambiamos a otra rama (master por ejemplo), todos los cambios se
revertirán hasta el último estado de la otra rama.
½Ahora si ya podemos trabajar en paralelo!
Maikol Solís LATEX y Git 29 / 51
De rama en rama � git checkout
$ git checkout tutor
Switched to branch 'tutor'
$ git branch
master
nuevo-teorema
* tutor
Todos los archivos serán modi�cados en la rama tutor.
Si cambiamos a otra rama (master por ejemplo), todos los cambios se
revertirán hasta el último estado de la otra rama.
½Ahora si ya podemos trabajar en paralelo!
Maikol Solís LATEX y Git 29 / 51
De rama en rama � git checkout
$ git checkout tutor
Switched to branch 'tutor'
$ git branch
master
nuevo-teorema
* tutor
Todos los archivos serán modi�cados en la rama tutor.
Si cambiamos a otra rama (master por ejemplo), todos los cambios se
revertirán hasta el último estado de la otra rama.
½Ahora si ya podemos trabajar en paralelo!
Maikol Solís LATEX y Git 29 / 51
Modi�camos el archivo en la rama tutor. Veamos el resultado:
$ git diff
...
\begin{document}
\maketitle
-Este será un gran proyecto.
+Mi tutor quiere que cambie la introducción.
\begin{teorema}
Para todo $\theta\in\mathbbR$,
$\sin^2\theta+\cos^2\theta=1$.
Maikol Solís LATEX y Git 30 / 51
Modi�camos el archivo en la rama tutor. Veamos el resultado:
$ git diff
...
\begin{document}
\maketitle
-Este será un gran proyecto.
+Mi tutor quiere que cambie la introducción.
\begin{teorema}
Para todo $\theta\in\mathbbR$,
$\sin^2\theta+\cos^2\theta=1$.
Maikol Solís LATEX y Git 30 / 51
Ejecutamos git checkout nuevo-teorema y modi�camos otra vez el
archivo.
$ git diff
...
\begin{teorema}
- Para todo $\theta\in\mathbb{R}$,
- $\sin^2\theta+\cos^2\theta=1$.
+ Para todo $x\in\mathbb{R}$,
+$e^{ix} = \cos x + i\sin x$ donde $i$
+es la unidad imaginaria.
\end{teorema}
\end{document}
Maikol Solís LATEX y Git 31 / 51
Ejecutamos git checkout nuevo-teorema y modi�camos otra vez el
archivo.
$ git diff
...
\begin{teorema}
- Para todo $\theta\in\mathbb{R}$,
- $\sin^2\theta+\cos^2\theta=1$.
+ Para todo $x\in\mathbb{R}$,
+$e^{ix} = \cos x + i\sin x$ donde $i$
+es la unidad imaginaria.
\end{teorema}
\end{document}
Maikol Solís LATEX y Git 31 / 51
Ayuda visual � gitk
$ gitk
Maikol Solís LATEX y Git 32 / 51
Juntando todo � git merge
Queremos incluir los cambios de las ramas nuevo-teorema y tutor
en nuestro documento principal.
1 $ git checkout master
Cambiamos a la rama donde queremos los cambios.
2 $ git merge nuevo-teorema
Fusionamos los cambios de la rama nuevo-teorema.
3 $ git merge tutor
Hacemos lo mismo con la rama tutor.
Maikol Solís LATEX y Git 33 / 51
Juntando todo � git merge
¾Qué hacemos?
1 $ git checkout master
Cambiamos a la rama donde queremos los cambios.
2 $ git merge nuevo-teorema
Fusionamos los cambios de la rama nuevo-teorema.
3 $ git merge tutor
Hacemos lo mismo con la rama tutor.
Maikol Solís LATEX y Git 33 / 51
Juntando todo � git merge
¾Qué hacemos?
1 $ git checkout master
Cambiamos a la rama donde queremos los cambios.
2 $ git merge nuevo-teorema
Fusionamos los cambios de la rama nuevo-teorema.
3 $ git merge tutor
Hacemos lo mismo con la rama tutor.
Maikol Solís LATEX y Git 33 / 51
Juntando todo � git merge
¾Qué hacemos?
1 $ git checkout master
Cambiamos a la rama donde queremos los cambios.
2 $ git merge nuevo-teorema
Fusionamos los cambios de la rama nuevo-teorema.
3 $ git merge tutor
Hacemos lo mismo con la rama tutor.
Maikol Solís LATEX y Git 33 / 51
¾Lo hice bien?
Maikol Solís LATEX y Git 34 / 51
Resumiendo
git branch Enlista, crea y maneja diferentes ramas de trabajo
git checkout Cambia a una nueva rama de trabajo.
git merge Fusiona una rama de trabajo dentro la rama actual.
Maikol Solís LATEX y Git 35 / 51
Resumiendo
git branch Enlista, crea y maneja diferentes ramas de trabajo
git checkout Cambia a una nueva rama de trabajo.
git merge Fusiona una rama de trabajo dentro la rama actual.
Maikol Solís LATEX y Git 35 / 51
Resumiendo
git branch Enlista, crea y maneja diferentes ramas de trabajo
git checkout Cambia a una nueva rama de trabajo.
git merge Fusiona una rama de trabajo dentro la rama actual.
Maikol Solís LATEX y Git 35 / 51
Sección 5
½Pasame el .tex!
Maikol Solís LATEX y Git 36 / 51
½Pasame el .tex!
Colaborar con archivos siempre ha sido complicado.I La forma tradicional es usar llave usb, email, etc.I Ahora se puede usar Dropbox, Gdrive, etc.
¾Pero cómo sabemos quién cambió qué?
A veces tenemos muchas versiones del mismo archivo.
proyecto_definitivo.tex
proyecto_definitivo_cambios_Paco.tex
proyecto_definitivo_cambios_Elena.tex
proyecto_definitivo_Final.tex
...
¾Cuál enviamos?
Maikol Solís LATEX y Git 37 / 51
½Pasame el .tex!
Colaborar con archivos siempre ha sido complicado.I La forma tradicional es usar llave usb, email, etc.I Ahora se puede usar Dropbox, Gdrive, etc.
¾Pero cómo sabemos quién cambió qué?
A veces tenemos muchas versiones del mismo archivo.
proyecto_definitivo.tex
proyecto_definitivo_cambios_Paco.tex
proyecto_definitivo_cambios_Elena.tex
proyecto_definitivo_Final.tex
...
¾Cuál enviamos?
Maikol Solís LATEX y Git 37 / 51
½Pasame el .tex!
Colaborar con archivos siempre ha sido complicado.I La forma tradicional es usar llave usb, email, etc.I Ahora se puede usar Dropbox, Gdrive, etc.
¾Pero cómo sabemos quién cambió qué?
A veces tenemos muchas versiones del mismo archivo.
proyecto_definitivo.tex
proyecto_definitivo_cambios_Paco.tex
proyecto_definitivo_cambios_Elena.tex
proyecto_definitivo_Final.tex
...
¾Cuál enviamos?
Maikol Solís LATEX y Git 37 / 51
En las nubes � git remote
Git puede sincronizar nuestros documentos en la nube.
¾Cómo?
$ git remote add mirepo www.servidorgit.com/proyecto.git
# Para enviar todo el repositorio por primera vez
$ git push -u mirepo �all
www.servidorgit.com/proyecto.git
* [new branch] master -> master
* [new branch] nuevo-teorema -> nuevo-teorema
* [new branch] tutor -> tutor
Branch master set up to track remote branch master from origin.
Branch nuevo-teorema set up to track remote branch nuevo-teorema from origin.
Branch tutor set up to track remote branch tutor from origin.
Maikol Solís LATEX y Git 38 / 51
En las nubes � git remoteGit puede sincronizar nuestros documentos en la nube.
Para eso hay muchos sitios especializados
www.github.com
www.bitbucket.org
etc.
¾Cómo?
$ git remote add mirepo www.servidorgit.com/proyecto.git
# Para enviar todo el repositorio por primera vez
$ git push -u mirepo �all
www.servidorgit.com/proyecto.git
* [new branch] master -> master
* [new branch] nuevo-teorema -> nuevo-teorema
* [new branch] tutor -> tutor
Branch master set up to track remote branch master from origin.
Branch nuevo-teorema set up to track remote branch nuevo-teorema from origin.
Branch tutor set up to track remote branch tutor from origin.
Maikol Solís LATEX y Git 38 / 51
En las nubes � git remote
¾Cómo?
$ git remote add mirepo www.servidorgit.com/proyecto.git
# Para enviar todo el repositorio por primera vez
$ git push -u mirepo �all
www.servidorgit.com/proyecto.git
* [new branch] master -> master
* [new branch] nuevo-teorema -> nuevo-teorema
* [new branch] tutor -> tutor
Branch master set up to track remote branch master from origin.
Branch nuevo-teorema set up to track remote branch nuevo-teorema from origin.
Branch tutor set up to track remote branch tutor from origin.
Maikol Solís LATEX y Git 38 / 51
En las nubes � git remote
¾Cómo?
$ git remote add mirepo www.servidorgit.com/proyecto.git
# Para enviar todo el repositorio por primera vez
$ git push -u mirepo �all
www.servidorgit.com/proyecto.git
* [new branch] master -> master
* [new branch] nuevo-teorema -> nuevo-teorema
* [new branch] tutor -> tutor
Branch master set up to track remote branch master from origin.
Branch nuevo-teorema set up to track remote branch nuevo-teorema from origin.
Branch tutor set up to track remote branch tutor from origin.
Maikol Solís LATEX y Git 38 / 51
En las nubes � git remote
¾Cómo?
$ git remote add mirepo www.servidorgit.com/proyecto.git
# Para enviar todo el repositorio por primera vez
$ git push -u mirepo �all
www.servidorgit.com/proyecto.git
* [new branch] master -> master
* [new branch] nuevo-teorema -> nuevo-teorema
* [new branch] tutor -> tutor
Branch master set up to track remote branch master from origin.
Branch nuevo-teorema set up to track remote branch nuevo-teorema from origin.
Branch tutor set up to track remote branch tutor from origin.
Maikol Solís LATEX y Git 38 / 51
En las nubes � git remote
¾Cómo?
$ git remote add mirepo www.servidorgit.com/proyecto.git
# Para enviar todo el repositorio por primera vez
$ git push -u mirepo �all
www.servidorgit.com/proyecto.git
* [new branch] master -> master
* [new branch] nuevo-teorema -> nuevo-teorema
* [new branch] tutor -> tutor
Branch master set up to track remote branch master from origin.
Branch nuevo-teorema set up to track remote branch nuevo-teorema from origin.
Branch tutor set up to track remote branch tutor from origin.
Maikol Solís LATEX y Git 38 / 51
En las nubes � git remote
¾Cómo?
$ git remote add mirepo www.servidorgit.com/proyecto.git
# Para enviar todo el repositorio por primera vez
$ git push -u mirepo �all
www.servidorgit.com/proyecto.git
* [new branch] master -> master
* [new branch] nuevo-teorema -> nuevo-teorema
* [new branch] tutor -> tutor
Branch master set up to track remote branch master from origin.
Branch nuevo-teorema set up to track remote branch nuevo-teorema from origin.
Branch tutor set up to track remote branch tutor from origin.
Maikol Solís LATEX y Git 38 / 51
En las nubes � git remote
¾Cómo?
$ git remote add mirepo www.servidorgit.com/proyecto.git
# Para enviar todo el repositorio por primera vez
$ git push -u mirepo �all
www.servidorgit.com/proyecto.git
* [new branch] master -> master
* [new branch] nuevo-teorema -> nuevo-teorema
* [new branch] tutor -> tutor
Branch master set up to track remote branch master from origin.
Branch nuevo-teorema set up to track remote branch nuevo-teorema from origin.
Branch tutor set up to track remote branch tutor from origin.
Maikol Solís LATEX y Git 38 / 51
El ataque de los clones � git clone
Marcos Ramírez quiere copiar localmente mi repositorio en su computadora
$ git clone www.servidorgit.com/proyecto.git
Cloning into 'proyecto'...
remote: Counting objects: 21, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 21 (delta 6), reused 0 (delta 0)
Unpacking objects: 100 % (21/21), done.
Maikol Solís LATEX y Git 39 / 51
El ataque de los clones � git clone
Marcos Ramírez quiere copiar localmente mi repositorio en su computadora
$ git clone www.servidorgit.com/proyecto.git
Cloning into 'proyecto'...
remote: Counting objects: 21, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 21 (delta 6), reused 0 (delta 0)
Unpacking objects: 100 % (21/21), done.
Maikol Solís LATEX y Git 39 / 51
El ataque de los clones � git clone
Marcos Ramírez quiere copiar localmente mi repositorio en su computadora
$ git clone www.servidorgit.com/proyecto.git
Cloning into 'proyecto'...
remote: Counting objects: 21, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 21 (delta 6), reused 0 (delta 0)
Unpacking objects: 100 % (21/21), done.
Maikol Solís LATEX y Git 39 / 51
Rastreando cambios � Tracking branches
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/nuevo-teorema
remotes/origin/tutor
Tracking branch
Crea una rama local ligada a la rama remota
$ git branch tutorMarcosRamirez remotes/origin/tutor
Maikol Solís LATEX y Git 40 / 51
Rastreando cambios � Tracking branches
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/nuevo-teorema
remotes/origin/tutor
Tracking branch
Crea una rama local ligada a la rama remota
$ git branch tutorMarcosRamirez remotes/origin/tutor
Maikol Solís LATEX y Git 40 / 51
½Empuje! ½Empuje! � git push
Marcos Ramirez modi�ca la introducción en la rama tutor
$ git checkout tutorMarcosRamirez
$ git diff
...
-Mi tutor quiere que cambie la introducción.
+El problema que veremos a continuación es muy
+interesante. Vamos a analizarlo profundamente.
...
Maikol Solís LATEX y Git 41 / 51
½Empuje! ½Empuje! � git push
$ git checkout tutorMarcosRamirez
$ git diff
Luego él envía todos esos cambios al servidor remoto:
$ git push
To www.servidorgit.com/proyecto.git
f1afe8e..b0e7428 tutorMarcosRamirez -> tutor
Maikol Solís LATEX y Git 41 / 51
½Jale! ½Jale! � git pull
Quiero recuperar los cambios que hizo Marcos Ramírez en mi computadora.
$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From www.servidorgit.com/proyecto.git
f1afe8e..b0e7428 tutor -> origin/tutor
Updating f1afe8e..b0e7428
Fast-forward
proyecto.tex | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Maikol Solís LATEX y Git 42 / 51
½Jale! ½Jale! � git pull
Quiero recuperar los cambios que hizo Marcos Ramírez en mi computadora.
$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From www.servidorgit.com/proyecto.git
f1afe8e..b0e7428 tutor -> origin/tutor
Updating f1afe8e..b0e7428
Fast-forward
proyecto.tex | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Maikol Solís LATEX y Git 42 / 51
Todos ayudan
commit b0e742872d4207b27621b02401f2b601c1a1a067
Author: Marcos Ramírez <[email protected]>
Date: Fri Aug 2 13:09:37 2013 -0600
Introducción por Marcos Ramírez
commit f1afe8ed5a928b82aeeb4d511d4b2a39fc01c235
Author: Maikol Solís <[email protected]>
Date: Sat Jul 27 17:33:46 2013 +0200
Un cambio en la introducción
Maikol Solís LATEX y Git 43 / 51
Idea
Servidor propio � Escuela de Matemática
$ git remote add mirepo www.servidorgit.com/proyecto.git
Maikol Solís LATEX y Git 45 / 51
Servidor propio � Escuela de Matemática
$ git remote add mirepo www.emate.ucr.ac.cr/git/proyecto.git
$ git remote add mirepo git.emate.ucr.ac.cr/proyecto.git
Documentos de cursos:
I Cartas al estudiante.I Listas de ejercicios.I Libros de texto.
Proyectos para grupos de investigación.
Artículos.
...
Maikol Solís LATEX y Git 45 / 51
Resumiendo
git remote Enlista, agrega y borra repositorios remotos.
git clone Copia un repositorio git remoto a su computadora para
trabajar localmente.
git pull Carga los cambios desde un repositorio remoto y trata de
fusionar esos cambios en la rama actual. Otra opción es git fetch.
git push Envía todos los cambios hacia los repositorios remotos.
Maikol Solís LATEX y Git 46 / 51
Resumiendo
git remote Enlista, agrega y borra repositorios remotos.
git clone Copia un repositorio git remoto a su computadora para
trabajar localmente.
git pull Carga los cambios desde un repositorio remoto y trata de
fusionar esos cambios en la rama actual. Otra opción es git fetch.
git push Envía todos los cambios hacia los repositorios remotos.
Maikol Solís LATEX y Git 46 / 51
Resumiendo
git remote Enlista, agrega y borra repositorios remotos.
git clone Copia un repositorio git remoto a su computadora para
trabajar localmente.
git pull Carga los cambios desde un repositorio remoto y trata de
fusionar esos cambios en la rama actual. Otra opción es git fetch.
git push Envía todos los cambios hacia los repositorios remotos.
Maikol Solís LATEX y Git 46 / 51
Resumiendo
git remote Enlista, agrega y borra repositorios remotos.
git clone Copia un repositorio git remoto a su computadora para
trabajar localmente.
git pull Carga los cambios desde un repositorio remoto y trata de
fusionar esos cambios en la rama actual. Otra opción es git fetch.
git push Envía todos los cambios hacia los repositorios remotos.
Maikol Solís LATEX y Git 46 / 51
Sección 6
¾Y qué falta?
Maikol Solís LATEX y Git 47 / 51
TODO...
Revertir versiones.
Recuperar archivos. Git nunca borra, solo rastrea cambios.
Reescribir la historia de cambios.
Creación de roles de trabajo. Administrador, usuarios (lectura o
escritura).
y un gran etcétera.
Maikol Solís LATEX y Git 48 / 51
Sección 7
¾Y la ayuda?
Maikol Solís LATEX y Git 49 / 51
$ git comando --help
$ git help comando
Sitio o�cial. www.git-scm.com
Tutoriales. www.atlassian.com/git/tutorial
Internet. Google es su amigo.
Maikol Solís LATEX y Git 50 / 51
¾Qué pasa después de leer ladocumentación de Git?
½Muchas gracias por su atención!