Conectando Overleaf con Github
Martín Macías / 2018-03-09
Me encontré con esta página que habla sobre cómo interactuar entre R Notebooks y Overleaf. Me pareció interesante y recordé que hace algún tiempo quise conectar Overleaf y Github para mis trabajos de la universidad pero que lo había olvidado.
Aquí mencionó la forma en que me funcionó, inspirado en un post de Daniel Graziotin.
Suponga que tiene un artículo en Overleaf en:
https://www.overleaf.com/2029559gkypzx
Overleaf le proporciona un repositorio en git relacionado con su artículo en:
https://git.overleaf.com/2029559gkypzx
Cree un repositorio en Github (público o privado, trabajará igual para ambos). Supongamos que su repo en Github se llama paper
y que la dirección del repo en Github es:
https://github.com/mamaciasq/paper.git
Primero, clone el repositorio de su paper en Overleaf
$ git clone https://git.overleaf.com/2029559gkypzx paper
Cloning into 'paper'...
remote: Counting objects: 13, done
remote: Finding sources: 100% (13/13)
remote: Getting sizes: 100% (8/8)
remote: Compressing objects: 100% (103172/103172)
remote: Total 13 (delta 1), reused 4 (delta 1)
Unpacking objects: 100% (13/13), done.
Checking connectivity... done.
Ahora el repositorio de Overleaf se convierte en el origin
. Puede renombrarlo para recordar que este es efectivamente el de Overleaf, haciendo:
$ git remote rename origin overleaf
Cada vez que quiera sincronizar localmente los cambios hechos en Overleaf, haga pull
desde el repo de Overleaf:
$ git pull overleaf master
remote: Counting objects: 5, done
remote: Finding sources: 100% (3/3)
remote: Getting sizes: 100% (4/4)
remote: Compressing objects: 100% (3018/3018)
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://git.overleaf.com/2029559gkypzx
* branch master -> FETCH_HEAD
25386da..2e1ed55 master -> overleaf/master
Updating 25386da..2e1ed55
Fast-forward
main.tex | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Cada vez que quiera sincronizar los cambios locales a Overleaf, haga un commit (línea 1) y súbalos al repositorio de Overleaf (línea 5)
$ git commit -a -m "Added ref to Smith et al. 2015"
[master 09d880e] Added ref to Smith et al. 2015
1 file changed, 2 insertions(+), 2 deletions(-)
$ git push overleaf master
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 326 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1)
remote: Updating references: 100% (1/1)
To https://git.overleaf.com/2029559gkypzx
2e1ed55..09d880e master -> master
Hasta aquí, todo bien. Los mismos comandos se habrían utilizado al emplear un repositorio en Github. ¿Qué tal tenerlos a ambos? Se puede agregar un repositorio Github (ojalá con el mismo nombre paper
, para mejor recordación) con el siguiente comando:
$ git remote add github https://github.com/mamaciasq/paper.git
Bien. Ahora podemos hacer pull desde Overleaf y hacer push a Github. Es necesario hacer un primer push del código.
$ git push github
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (19/19), 97.82 KiB | 0 bytes/s, done.
Total 19 (delta 4), reused 0 (delta 0)
To https://github.com/mamaciasq/paper.git
* [new branch] master -> master
A partir de ahora, un flujo podría ser
git pull overleaf master
y
git push overleaf master
Por supuesto, puede hacer pull desde Overleaf, hacer algunos cambios, hacer commit y volver a hacer push a Overleaf, y luego a Github. O bien, podría hacer pull desde Github, hacer algunos cambios, hacer commit y volver a hacer push a Github y a Overleaf. Aún así, hay alguna redundancia de la que puede deshacerse. ¿Qué tal si hace push a ambos repositorios? Cree un hito llamado both
:
$ git remote add both https://git.overleaf.com/2029559gkypzx
$ git remote set-url --add --push both https://git.overleaf.com/2029559gkypzx
$ git remote set-url --add --push both https://github.com/mamaciasq/paper.git
La primera línea crea una nueva URL del repo remoto denominado both
. Lo que hace es apuntar al servidor de git de Overleaf (de nuevo). Sin embargo, el segundo comando agrega una nueva URL para hacer push a cambios al hito both
, el cual apunta al servidor de Github. A partir de ahora, puede hacer push
a ambos repositorios al mismo tiempo (línea 4).
$ git commit -a -m "Added a test word in the first line of introduction"
[master af9546d] Added a test word in the first line of introduction
1 file changed, 1 insertion(+), 1 deletion(-)
$git push both
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 941 bytes | 0 bytes/s, done.
Total 5 (delta 4), reused 0 (delta 0)
To https://github.com/mamaciasq/paper.git
67c8294..022a8f5 master -> master
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 941 bytes | 0 bytes/s, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4)
remote: Updating references: 100% (1/1)
To https://git.overleaf.com/2029559gkypzx
67c8294..022a8f5 master -> master
El ejemplo anterior es un cambio local enviado a Overleaf y Github. Finalmente, para enviar un cambio desde Overleaf al local y Github, se requerirán los siguientes comandos:
$ git pull overleaf master
remote: Counting objects: 1, done
remote: Finding sources: 100% (1/1)
remote: Total 1 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (1/1), done.
From https://git.overleaf.com/2029559gkypzx
* branch master -> FETCH_HEAD
6cc6b05..409e750 master -> overleaf/master
Updating 6cc6b05..409e750
Fast-forward
main.tex | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
$ git push github
Counting objects: 8, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 650 bytes | 0 bytes/s, done.
Total 6 (delta 2), reused 0 (delta 0)
To https://github.com/dgraziotin/paper.git
af9546d..409e750 master -> master
Pueda que parezca bastante técnico lo anteriormente descrito y sí, lo es. La idea es que ya se tenga familiaridad con Git, Github, \(\LaTeX\) y con todo su entorno.
Hay otro asunto importante que hay que considerar y es el trabajo en grupo. Si está trabajando con un grupo de trabajo en el mismo documento en \(\LaTeX\), puede volverse bastante más complejo. Para eso, vale la pena visitar un post útil sobre otros aspectos técnicos y otro sobre cómo usar git con equipos de trabajo. Por favor, léalos.