Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Recopilacion
GLUO Ismael Aguilar Octubre 2020
Tabla de contenido
¿Por qué quiero usar un gestor de versiones?..................................................................2
GitHub............................................................................................................................3
Contenidos...........................................................................................................................................................3
¿Qué es GitHub?...................................................................................................................................................4
Elementos principales en GitHub.........................................................................................................................4
Code.................................................................................................................................................................4
Issues...............................................................................................................................................................5
Fork..................................................................................................................................................................6
Pull Requests....................................................................................................................................................7
Projects............................................................................................................................................................8
Wiki..................................................................................................................................................................9
Graphs............................................................................................................................................................10
GitHub Pages.................................................................................................................................................10
Crear una cuenta de GitHub...............................................................................................................................11
Crear un repositorio en GitHub..........................................................................................................................14
Tutoriales de GitHub..........................................................................................................................................16
Usando Git....................................................................................................................17
Contenidos.........................................................................................................................................................17
Instalar Git..........................................................................................................................................................17
Creando un repo (local)......................................................................................................................................17
Crear un repositorio: git init..........................................................................................................................17
Añadir archivos al repositorio: git add / git commit......................................................................................19
Crear un repositorio remoto...............................................................................................................................22
Crear un repositorio en GitHub.....................................................................................................................22
Añadir la dirección del repositorio remoto a nuestro repositorio local (git remote add)............................22
Crear un repositorio local a partir del repositorio remoto (git clone)..........................................................24
Crear un repositorio remoto...............................................................................................................................25
Crear un repositorio en GitHub.....................................................................................................................25
Añadir la dirección del repositorio remoto a nuestro repositorio local (git remote add)............................25
Crear un repositorio local a partir del repositorio remoto (git clone)..........................................................26
Subir y bajar cambios a un repositorio remoto..................................................................................................28
Subir cambios al repositorio remoto: git push..............................................................................................28
Bajar cambios del repositorio remoto: git pull..............................................................................................29
Bajar cambios y fusionarlos manualmente: git fetch y git merge.................................................................31
Trabajando con ramas.......................................................................................................................................32
¿Por qué usar ramas?....................................................................................................................................32
Creando ramas: git branch............................................................................................................................33
Cambiando de rama: git checkout.................................................................................................................33
Subiendo ramas al repositorio remoto.........................................................................................................35
Fusionando ramas: git merge........................................................................................................................40
Borrando ramas.............................................................................................................................................41
Usando etiquetas...............................................................................................................................................42
¿Por qué usar etiquetas?...............................................................................................................................43
Creando una etiqueta ligera (lightweight)....................................................................................................43
Creando una etiqueta anotada (annotated).................................................................................................43
Etiquetando un commit pasado....................................................................................................................43
Borrando etiquetas........................................................................................................................................43
Subiendo etiquetas al repositorio remoto....................................................................................................44
¿Y si uso Windows?.......................................................................................................44
GitHub Desktop..................................................................................................................................................44
Configurando GitHub Desktop...........................................................................................................................45
Clonar repositorios de GitHub............................................................................................................................47
Añadir archivos al repositorio (git add & git commit).......................................................................................48
Eliminar archivos del repositorio (git rm & git commit)....................................................................................49
Subir y bajar cambios desde el repositorio remoto (git push & git pull)............................................................50
Explora y experimenta.......................................................................................................................................51
En lugar de tener en nuestros ordenadores varios archivos distintos por cada versión, lo
cual puede llevar a confusión y errores, Git se encarga de gestionar las distintas
versiones, almacenándolas y pudiendo revertir los archivos a cualquier versión anterior
de los mismos. Así evitamos tener varios archivos
llamados archivo.txt, archivo_v2.txt , archivo_definitivo.txt, archivo_definitivo
_v2.txt y no saber qué cambios hicimos en cada uno de ellos.
Como Git mantiene información de los cambios efectuados en cada versión, también es
más fácil saber qué versión fue la última que funcionaba o en cuál se introdujo cierto
bug. Esto supone una ventaja no sólo para nosotros como desarrolladores, sino también
para los usuarios, que pueden bajarse una versión estable del software mientras nosotros
seguimos añadiendo mejoras.
Este manual te enseñará como usar los comandos básicos de Git de forma que puedas
beneficiarte de todas estas ventajas en tus proyectos.
GitHub
Esta sección se centra en explicar qué es GitHub, cómo funciona y cómo crearse una
cuenta para usarlo.
Contenidos
¿Qué es GitHub?
Elementos principales en GitHub
Crear una cuenta de GitHub
Crear un repositorio en GitHub
Tutoriales de GitHub
¿Qué es GitHub?
GitHub es un lugar donde los desarrolladores suben sus proyectos y comprarten su
código. Cada proyecto se encuentra almacenado en un repositorio, que usa Git para el
control de las distintas versiones del proyecto.
GitHub nos permite tanto compartir nuestro proyecto con el resto del mundo, como
desarrollar un proyecto de forma colaborativa con otras personas. Para ello, además del
espacio de almacenamiento para nuestro proyecto, nos ofrece otras herramientas como
un gestor de bugs y la posibilidad de crear una wiki, un tablón de Kanban muy similar al
de Trello e incluso alojar nuestra propia página web estática para el proyecto de forma
gratuita.
Code
Code es la página principal de un repositorio en GitHub, la cual incluye la descripción
del proyecto, unas etiquetas para clasificar la temática del proyecto y una vista de
seguidores, estrellas, commits, branches, releases, etc del repositorio.
Esta página también presenta un explorador de archivos desde el que podemos ver los
archivos incluidos en el proyecto, y navegar por ellos. En la parte inferior de la página
podemos encontrar una visualización del archivo README.md, que suele contener
información útil sobre el repositorio.
Issues
GitHub tiene integrado un gestor de bugs en forma de Issues. Cada Issue representa un
problema o mejora del proyecto. Dentro de cada Issue se pueden poner comentarios en
los que informar de los progresos o debatir la mejor forma de solucionarla.
Para poner una nueva Issue, podemos hacer click en "New Issue", tras lo cual nos
aparece el siguiente formulario para rellenar. Desde él podemos añadir un título, una
descripción, asignar la Issue a una persona concreta (o varias) y etiquetar la Issue.
Fork
GitHub tiene un sistema de permisos que controla qué usuarios pueden subir código a
cada repositorio. Si deseamos hacer alguna modificación al software de una tercera
persona, pero no tenemos autorización para publicar en su repositorio, podemos hacer un
Fork de dicho repositorio. Un Fork no es más que una copia del repositorio, que pasa a
ser propiedad del usuario que hizo el Fork. De esta forma, ese usuario ya podría realizar
modificaciones sobre el código del repositorio en su copia, sin necesidad de tener
autorización para subir cambios.
Pull Requests
Si has hecho un Fork de un proyecto y has añadido modificaciones útiles para los
usuarios del repositorio original, puede ser interesante integrar esos cambios en ese
repositorio. Para ello, podemos hacer una petición al autor en forma de Pull Request,
mediante el botón "New Pull Request" de la pestaña "Code".
La primera pantalla que nos saldrá una vez pulsado el botón nos permitirá comparar
ramas del repositorio original con ramas de nuestro repositorio, para ver los cambios
realizados. Una vez comprobado, podemos usar el botón "Create Pull Request" para
proceder a crear una Pull Request.
En la siguiente pantalla nos aparecerá un formulario muy similar al de una nueva Issue,
en el que podremos explicar qué cambios hemos hecho y por qué. El mantenedor del
repositorio original podrá entonces revisar nuestros cambios y, si así lo decide,
integrarlos en el repositorio principal.
En proyectos grandes el uso de Forks y Pull Requests entre miembros del mismo equipo
ayuda a mejorar la coordinación y a reducir errores.
Projects
Un Project de GitHub es una forma de organizar tareas e Issues relacionadas entre sí.
Está inspirada en el método Kanban y tiene un aspecto muy similar al de los tablones
de Trello. A cada Project le podremos añadir tarjetas que pueden corresponder o no con
Issues del proyecto y moverlas entre las distintas columnas del tablón.
Wiki
GitHub nos permite también tener documentación asociada a un proyecto en una wiki
alojada en GitHub. Esta wiki se puede editar online, y está basada en Gollum.La wiki se
almacena en un repositorio independiente que podemos clonar y editar también
localmente.
Graphs
La pestaña Graph nos permite ver distintas visualizaciones de datos relacionadas con
nuestro repositorio, como cuántas líneas de código/commits ha aportado cada
contribuidor o cuál es la franja horaria en la que se suelen hacer más commits. Uno de
los gráficos más útiles es el de Network, que muestra de forma gráfica los commits y
branches de nuestro proyecto, así como su estado.
GitHub Pages
GitHub permite alojar una página web estática asociada a un repositorio, que puede
actuar como documentación o como web del proyecto. También nos permite tener una
web estática asociada a nuestro usuario, que podemos usar como web personal.
Una forma muy sencilla de generar esta página web es usar Jekyll para generar una web
estática a partir de archivos markdown.
2. Esa opción nos llevará a un formulario en el que introducir nuestros datos similar
a
este:
3. Por último, nos pedirá (de forma opcional) que aportemos algo de información
sobre nuestra experiencia previa e
intereses.
4. Una vez completado el proceso, GitHub nos ofrecerá leer la guía o comenzar un
proyecto:
Crear un repositorio en GitHub
Desde nuestra página principal, simplemente hacemos click en "Create new repository":
Contenidos
Instalar Git
Creando un repo (local)
Crear un repositorio remoto
Subir y bajar cambios a un repositorio remoto
Trabajando con ramas
Usando etiquetas
Instalar Git
Si trabajas en un entorno GNU/Linux con gestión de paquetes, esto es tan sencillo como
abrir una terminal y escribir:
$ sudo apt-get install git
Para otros entornos (Windows/Mac) encontrarás ayuda en este enlace: Instalando Git
Esta guía se centrará en el uso de git en GNU/Linux, aunque los comandos y las acciones
son muy similares en otros entornos (Windows/Mac) y sólo requieren pequeñas
modificaciones.
Una vez tengamos seleccionados todos los archivos que deseamos incluir en el
repositorio, hacemos un commit con el comando 'git commit'. Un commit guardará en
estado actual de los archivos que hemos marcado, y les asignará un mensaje que indica
los cambios realizados, así como un autor y un identificador.
$ git commit -m "Commit inicial"
Usando el flag '-m' podremos especificar el mensaje que indica los cambios. Si no
usamos el flag '-m', nos aparecerá una pantalla donde escribir el mensaje.
Todo los cambios que hemos hecho hasta ahora han sido únicamente en el repositorio de
nuestro ordenador. En el próximo apartado aprenderemos a subir estos cambios a un
repositorio online, y a descargar los posibles cambios que otros usuarios hayan hecho en
nuestro repositorio.
Añadir la dirección del repositorio remoto a nuestro repositorio local (git remote add)
La primera opción para trabajar con nuestro repositorio remoto es añadir la dirección del
repositorio remoto que acabamos de crear a nuestro repositorio local. Esta es la opción
más lógica si ya disponemos de un repositorio local creado y con algunos contenidos,
como el que se creó en el apartado 02.
Estando dentro del repositorio que creamos en el apartado 02, ejecutaremos el siguiente
comando:
$ git remote add origin <url de nuestro repo>
En el caso del repositorio que yo he creado, el comando quedaría de la siguiente forma:
$ git remote add origin https://github.com/UC3Music-e/test-repository.git
Si deseamos usar https como protocolo para subir y bajar código, o:
$ git remote add origin git@github.com:UC3Music-e/test-repository.git
Si preferimos usar ssh. Para usar ssh deberemos configurar ssh previamente, generando y
añadiendo nuestras claves a github.
Si nos fijamos en la última captura del apartado anterior, la url de nuestro repositorio
aparece en el segundo apartado de las sugerencias que github nos ha hecho para crear el
repositorio local.
Como podemos ver en la imagen, el nombre del directorio donde está almacenado el
repositorio es irrelevante, y aunque no coincide el local con el remoto (test_repo vs test-
repository), git no ha devuelto ningún mensaje de error y la operación se ha llevado a
cabo correctamente.
Añadir la dirección del repositorio remoto a nuestro repositorio local (git remote add)
La primera opción para trabajar con nuestro repositorio remoto es añadir la dirección del
repositorio remoto que acabamos de crear a nuestro repositorio local. Esta es la opción
más lógica si ya disponemos de un repositorio local creado y con algunos contenidos,
como el que se creó en el apartado 02.
Estando dentro del repositorio que creamos en el apartado 02, ejecutaremos el siguiente
comando:
$ git remote add origin <url de nuestro repo>
En el caso del repositorio que yo he creado, el comando quedaría de la siguiente forma:
$ git remote add origin https://github.com/UC3Music-e/test-repository.git
Si deseamos usar https como protocolo para subir y bajar código, o:
$ git remote add origin git@github.com:UC3Music-e/test-repository.git
Si preferimos usar ssh. Para usar ssh deberemos configurar ssh previamente, generando y
añadiendo nuestras claves a github.
Si nos fijamos en la última captura del apartado anterior, la url de nuestro repositorio
aparece en el segundo apartado de las sugerencias que github nos ha hecho para crear el
repositorio local.
Como podemos ver en la imagen, el nombre del directorio donde está almacenado el
repositorio es irrelevante, y aunque no coincide el local con el remoto (test_repo vs test-
repository), git no ha devuelto ningún mensaje de error y la operación se ha llevado a
cabo correctamente.
La forma más sencilla de actualizar el repositorio local es mediante el comando git pull:
$ git pull
Si existen cambios, éstos se descargarán y se fusionarán con nuestros cambios locales
automáticamente. Es posible, no obstante, que git nos muestre un error como el
siguiente:
Este error ocurre porque una rama local de nuestro repositorio no tiene asignada una
rama del repositorio remoto. Podremos especificar a qué rama remota corresponde la
rama local con el siguiente comando:
$ git branch --set-upstream-to=origin/master master
Este comando será explicado con más detalle en la próxima sección, dedicada a las
ramas. Una vez resuelto el problema, al hacer pull nos debería aparecer una pantalla
similar a ésta:
Usando el comando git log, podremos ver los cambios que se han efectuado, junto con
sus mensajes de commit:
git log
Esto permite también que si, por ejemplo, encontrásemos un bug en la rama master
mientras trabajamos en nuestra otra rama, podríamos crear una rama para solucionar el
bug. Una vez resuelto, esta rama se podría integrar con master y con la otra rama que
habíamos creado.
Por ello, cada vez que añadimos una feature nueva a nuestro código, es conveniente
crear una rama nueva en el repositorio en la que trabajar.
Podemos también crear la rama y cambiar de ella en un solo comando, usando la opción
"-b":
$ git checkout -b <nombre_rama>
En nuestro caso:
$ git checkout -b test
Subiendo ramas al repositorio remoto
Las ramas que hemos creado hasta ahora sólo existen en nuestro repositorio local, si
queremos que se actualicen en el repositorio remoto, tendremos que subirlas con git
push:
$ git push origin <rama>
Para ello, crearemos un nuevo archivo y lo añadiremos al repositorio local en la rama
que acabamos de crear. Crearemos un archivo llamado prueba.txt con los siguientes
contenidos:"Probando las ramas de git!":
Y lo añadiremos al repositorio local en la rama test:
$ git add prueba.txt
$ git commit -m 'Añadido archivo de prueba en rama test'
Una vez añadidos los cambios, podremos subirlos al repositorio remoto en una nueva
rama:
$ git push origin test
Veremos que git nos informa de que sea ha creado una nueva rama en el repositorio
remoto, que se llama igual que la rama local, test:
Si vamos al repositorio en GitHub, veremos que ha aparecido una nueva rama en la
portada del repositorio:
Y que también aparece en el apartado branches:
Por último, en el apartado network, tenemos una vista gráfica de la nueva rama creada,
en la que se ve que los cambios de la rama test no han afectado a la rama master:
Borrando ramas
Una vez hemos fusionado los cambios de nuestra rama test con la rama master podremos
seguir trabajando en ella o, si ya no nos es útil, borrarla. Las ramas creadas se pueden
borrar con el comando git branch, usando la opción "-d":
$ git branch -d <rama_a_borrar>
En nuestro caso:
$ git branch -d test
Este cambio no afectará al repositorio remotor, que seguirá teniendo la rama test. Si
queremos borrar el repositorio remoto, usaremos el comando git push:
$ git push origin :<rama_a_borrar>
Este comando se basa en que una misma rama se puede llamar de forma distinta en el
repositorio local que en el remoto, de forma que si quisiéramos subir los cambios de esa
rama, tendríamos que especificar ambos nombres:
$ git push origin <rama_local>:<rama_remota>
Si en lugar de especificar un nombre, dejamos ese término en blanco, Git eliminará la
rama remota. En nuestro caso, el comando sería:
$ git push origin :test
Y el resultado sería:
Visitando el repositorio en github podremos comprobar que la rama ya no existe:
Usando etiquetas
En este apartado aprenderemos qué son las etiquetas de git y cómo usarlas.
En git existen dos tipos de etiqueta: ligera (lightweight) y anotada (annotated). Una
etiqueta ligera es un puntero a un commit, de forma parecida a una rama, pero fija en ese
commit. Sería como asignar un nombre lógico a un commit. Las etiquetas anotadas
tienen la misma función, pero se almacenan como objetos de git, con checksum, nombre
del autor, fecha y mensaje de etiquetado. Debido a todos estos datos extra se suele
recomendar usar etiquetas anotadas, aunque si quieres una etiqueta rápida puedes usar
una etiqueta ligera.
¿Y si uso Windows?
Aunque esta guía se centra principalmente en el uso de Git desde la consola de
comandos en un sistema GNU/Linux, también existen otras alternativas para usar Git
desde Windows.
GitHub Desktop
GitHub posee una aplicación llamada GitHub Desktop que nos permite gestionar
repositorios de Git de forma gráfica desde Windows.
En el menú desplegable podremos ver los repositorios que tenemos en nuestra cuenta de
GitHub. Seleccionaremos el que deseemos clonar y el programa nos preguntará en qué
carpeta local queremos que se almacenen los archivos del repositorio.
Una vez seleccionada la carpeta, nos mostrará una pantalla de carga mientras GitHub
Desktop descarga nuestro repositorio.
Una vez están seleccionados los archivos, podremos escribir un mensaje de commit y
una descripción, igual que haríamos con un comando git commit desde la terminal.
Pulsando el botón "Commit to master" crearía el commit en la rama
master.
Subir y bajar cambios desde el repositorio remoto (git push & git pull)
Para subir y bajar cambios desde el repositorio remoto, GitHub Desktop dispone de un
botón "sync" en la parte superior
derecha.
Al hacer click veremos como el botón para a poner "syncing", lo cual nos indica que está
sincronizando datos con el repositorio
remoto.
Explora y experimenta
En esta sección hemos cubierto los comandos básicos de Git realizados desde GitHub
Desktop, pero la aplicación permite llevar a cabo muchas más acciones. Explora y
experimenta con la interfaz para descubrilas, o usa la guía online de GitHub Desktop .
Colaborando con proyectos en GitHub
Esta sección explica cómo colaborar con proyectos alojados en GitHub usando las
principales herramientas que nos proporciona GitHub: los forks y los pull requests.
Contenidos:
Forkeando un repositorio
El primer paso para colaborar con un proyecto en GitHub es hacer un fork. Un fork es
una copia de un repositorio de GitHub independiente del repositorio original. Nosotros
somos los dueños de ese fork, por lo que podemos hacer todos los cambios que
queramos, aunque no tengamos permisos de escritura en el repositorio original.
Una vez completado el fork, nos aparecerá en nuestra cuenta el repositorio "forkeado":
Clonando el repositorio en nuestro PC
Una vez creado, podemos hacer una copia del repositorio en nuestro PC para editarlo.
Para ello, abrimos una terminal e introducimos los siguientes comandos:
$ git clone <url_del_repo>
En mi caso:
$ git clone git@github.com:David-Estevez/test-repository.git
Forkeando un repositorio
Una vez hemos creado nuestro fork y hemos añadido los cambios oportunos, el siguiente paso es
proponer al dueño del repositorio original que los incluya en su proyecto. Para ello existen en GitHub
los pull request.
GitHub nos mostrará una página similar a la que nos muestra al crear una issue. Es esta página
podremos resumir y explicar los cambios realizados para que al autor del repositorio original le
resulte más sencillo saber qué cambios hemos hecho y con qué fin. También podremos pedir a
usuarios concretos de GitHub que revisen los cambios para darles el visto bueno. Normalmente estos
usuarios serán las personas encargadas de mantener el proyecto.
Una vez rellenado el formulario, hacemos click en "Create pull request". Ya sólo queda esperar a
que nos acepten los cambios (o nos pidan una revisión).
GitHub nos llevará a una página en la que podremos comparar los cambios entre las
diversas ramas y, seleccionando la opción "compare across forks" también entre los
forks del repositorio. A continuación, seleccionaremos como "base fork" la
rama master del repositorio original, y como "head fork" la rama `master de nuestro
fork.
GitHub nos mostrará una página similar a la que nos muestra al crear una issue. Es esta
página podremos resumir y explicar los cambios realizados para que al autor del
repositorio original le resulte más sencillo saber qué cambios hemos hecho y con qué fin.
También podremos pedir a usuarios concretos de GitHub que revisen los cambios para
darles el visto bueno. Normalmente estos usuarios serán las personas encargadas de
mantener el proyecto.
Una vez rellenado el formulario, hacemos click en "Create pull request". Ya sólo
queda esperar a que nos acepten los cambios (o nos pidan una revisión).
Mensajes de commit
Los mensajes de commit son una herramienta muy útil para el desarrollo de software, ya
que nos permiten encontrar cambios concretos en la historia de nuestro repositorio. No
obstante, muchas veces no les prestamos toda la atención que se merecen, y escribrimos
mensajes de commit que son de muy poca ayuda para nuestros compañeros y para
nuestros yo del futuro. Esta sección aporta buenas prácticas a seguir para aprovechar los
mensajes de commit al máximo.
Usa el mensaje de commit para aportar contexto y explicar el por qué detras de un cambio.
La principal utilidad de un mensaje de commit no es explicar cuáles son los cambios que
realizará ese commit, ya que se pueden consultar en el diff del commit. La principal
utilidad del mensaje de commit es explicar el por qué detras de esos cambios.
Por tanto, cuando el por qué de un cambio no quede suficientemente claro con el asunto
y el diff del commit, usaremos el cuerpo del mensaje de commit para aportar un contexto
y un por qué a dichos cambios. Esto es especialmente importante si existen soluciones
alternativas a la implementada en el commit, ya que así los futuros mantenedores del
código pueden saber por qué se elegió esa solución frente a otras alternativas.
Pro Git: un manual de git completo en inglés, del cual existe una traducción
parcial en español .
Tutoriales de GitHub : esta sección de este manual ofrece links a distintas guías y
tutoriales dentro de GitHub.
Atlassian Git Tutorials : una completa serie de tutoriales sobre Git.
Comparing Workflows: guía sobre los distintos flujos de trabajo posibles con Git.
Open Source Guides : guías para desarrollar o contribuir a proyectos Open
Source.
Tutorial GitHub y Freecad : una serie de videotutoriales hechos por el maestro
Obijuan en los que aprender a usar GitHub a través de objetos creados en
Freecad.
Guía online de GitHub Desktop .
How to Write a Git Commit Message : artículo con buenas prácticas para escribir
mensajes de commit. La sección sobre mensajes de commit del capítulo Buenas
prácticas al trabajar con Git de este manual se basa en este artículo.
WhatTheCommit : Mensajes de commit aleatorios.
Bibliografía
https://david-estevez.gitbooks.io/the-git-the-bad-and-the-ugly/content/es/