Jul 06, 2015
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!