Gitygithub PDF
Gitygithub PDF
This is a Leanpub book. Leanpub empowers authors and publishers with the Lean
Publishing process. Lean Publishing is the act of publishing an in-progress ebook
using lightweight tools and many iterations to get reader feedback, pivot until you
have the right book and build traction once you do.
Sobre el autor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i
6. Versiones y ramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.1 Etiquetado de versiones . . . . . . . . . . . . . . . . . . . . . . . 43
6.2 Ramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.3 Comandos utilizados en este capítulo . . . . . . . . . . . . . . . 55
Invitación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
GitHub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Fichero .gitignore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Markdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Emojis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Sobre el autor
Luis José Sánchez González es Ingeniero Técnico en Informática de Gestión
por la Universidad de Málaga (España) y funcionario de carrera de la Junta de
Andalucía desde 1998. En su trabajo de profesor de Informática combina sus dos
pasiones: la enseñanza y la programación.
En el momento de publicar este libro, es profesor del I.E.S. Campanillas (Málaga) e
imparte clases en el Ciclo Superior de Desarrollo de Aplicaciones Web.
Puedes ponerte en contacto con el autor mediante la dirección de correo electróni-
co [email protected] o mediante LinkedIn (https://es.linkedin.com/pub/luis-
josé-sánchez/86/b08/34).
Sobre este libro
“Git y GitHub - Miniguía de Supervivencia” es un manual que enseña lo imprescin-
dible (y un poquito más) para manejar estas dos herramientas que son básicas en el
quehacer diario de cualquier programador.
Esta miniguía ilustra cómo mantener el código mínimamente organizado mediante
comandos de Git y cómo, además, hacer visible ese código de cara a la comunidad
de programadores en el vasto universo de GitHub.
Normalmente pido a mis alumnos que tengan disponible en GitHub su trabajo:
ejemplos de prueba, ejercicios de clase, proyectos, etc. Además, les insto a que
actualicen sus repositorios¹ con frecuencia para ver así cómo va evolucionando su
trabajo en el tiempo. En este libro pretendo dar los conceptos básicos para llevar a
cabo estas tareas.
Si nunca antes has oído hablar de Git ni de GitHub no te preocupes, empezamos de
cero. Cuando adquieras soltura manejando estas herramientas ya no querrás vivir
sin ellas.
¹Veremos más adelante qué son los repositorios y cómo crearlos y mantenerlos. De momento, te los puedes imaginar
como lugares en internet donde guardamos nuestro código o cualquier otro tipo de contenido. Normalmente un repositorio
contiene un proyecto de cierta entidad o bien agrupa pequeños proyectos que tienen alguna relación entre sí. Un ejemplo de
repositorio es https://github.com/LuisJoseSanchez/aprende-java-con-ejercicios que contiene todos los ejemplos y soluciones a
los ejercicios de mi libro Aprende Java con Ejercicios.
El libro original
Este libro es completamente gratuito y lo puedes descargar desde la página https:
//leanpub.com/gitygithub.
Si has descargado o copiado el libro de otra fuente, puede que no tengas la última
versión corregida y actualizada. Te aconsejo encarecidamente que descargues el libro
desde la página indicada.
1. Instalación y configuración
de Git
1.1 ¿Qué es Git?
Git es una herramienta de control de versiones. Permite controlar el proceso de crea-
ción de software¹ llevando un registro exhaustivo de todos los cambios realizados.
Ofrece la posibilidad de crear versiones, de ramificar un proyecto en diferentes flujos
e incluso de volver hacia atrás deshaciendo los últimos cambios realizados.
Git es un programa libre y gratuito que se distribuye mediante la licencia GNU (GPL
2.0)²
Para instalar Git en otras plataformas, puedes consultar los binarios disponibles en
https://git-scm.com/downloads.
Una vez instalado Git, se utiliza mediante comandos en una ventana de terminal.
Podemos comprobar que el programa se ha instalado correctamente comprobando el
número de versión.
¹En realidad se puede extender el uso de Git a proyectos no solo de software sino también de documentos (hay muchos
libros escritos con Git), presentaciones y, en general, a casi cualquier tipo de contenido.
²Los términos de la licencia están descritos en https://opensource.org/licenses/GPL-2.0
Instalación y configuración de Git 2
git --version
git version 2.7.4
¡Atención!
Aunque existen interfaces gráficos para Git, no te dejes engatusar por
sugerentes botones y colorines; eso es de blandengues. Los hombres y
mujeres duros de pelar, los auténticos programadores, usan Git mediante
comandos en una ventana de terminal.
Para realizar ciertas acciones se nos pedirá una contraseña. Puede resultar tedioso
tener que introducirla constantemente. Git permite “cachear” la contraseña de modo
que solo hará falta introducirla una vez al principio de la sesión.
Instalación de Git
git --version
En el primer paso se nos piden los datos personales para la nueva cuenta (figura 2.2.2).
El nombre de usuario solo puede contener letras y números. Están prohibidos los
espacios, aunque se pueden usar los guiones como separadores. Una buena práctica
consiste en usar el nombre completo sin espacios en formato capitalizado; por
ejemplo, AlanBritoDelgado es un buen nombre de usuario.
La dirección de correo electrónico debe tener un formato correcto y la contraseña
debe tener un mínimo de siete caracteres y contener al menos un número.
Figura 2.2.3: Creación de cuenta en GitHub. Paso 2: Elección del plan (gratuito o de pago).
En el segundo paso debes elegir el plan (figura 2.2.3). De forma gratuita se puede
crear un número ilimitado de repositorios públicos.
Para tener la posibilidad de crear repositorios privados, es necesario contratar un
plan de pago. Los repositorios privados son accesibles (y por lo tanto visibles) para el
que los crea pero son invisibles para el resto de la comunidad. Este tipo de repositorio
tiene sentido cuando el software que se va a almacenar en el repositorio tiene fines
comerciales.
Una vez creada la cuenta es posible cambiar de plan.
GitHub - Creación de una cuenta y configuración básica 7
De esta manera accedes a tu página de perfil. Ahora haz clic en el botón Edit profile.
Cambia el horroroso avatar que te asigna GitHub por una foto en la que se te
reconozca¹. No pongas una foto de una orla ni una en la que aparezcas con traje
y corbata. Recuerda que GitHub es una herramienta para programadores, no para
agentes de bolsa ni corredores de seguros. Está bien poner una foto con camiseta (si
¹La imagen usada para el perfil de prueba de “Alan Brito” es de dominio público y está obtenida de Pixabay (https:
//pixabay.com).
GitHub - Creación de una cuenta y configuración básica 9
es una camiseta “friki” mejor todavía). Ni se te ocurra poner una foto de tu mascota,
de tu novio/a o de tu coche. Hay muchos perfiles de buenos programadores en GitHub
estropeados por una mala foto.
Escribe tu nombre completo (nombre y apellidos), con los correspondientes espacios,
mayúsculas y tildes si procede.
Anota en el campo Bio cualquier curso que hayas hecho o estés haciendo relacionado
con la programación o con la informática en general, en orden de importancia. Por
ejemplo, si estás estudiando un grado universitario o un ciclo formativo, éste es el
lugar idóneo para escribirlo.
Si tienes una web personal o un blog con contenidos relacionados con la progra-
mación o con algo que tenga que ver con la informática, escribe la dirección en el
campo URL. Si no tienes nada de eso, escribe en este campo la dirección de tu perfil
de LinkedIn. En caso de no tener cuenta en LinkedIn, te recomiendo encarecidamente
que te des de alta; es una red social profesional muy práctica para hacer contactos a
nivel corporativo y también es muy útil en la búsqueda de empleo.
GitHub - Creación de una cuenta y configuración básica 10
Por último, si quieres decirle al mundo que estás disponible para que te contraten,
marca la casilla Available for hire. Hay aplicaciones que sondean los perfiles de
GitHub en busca de candidatos para puestos de programación y miran si esta casilla
está marcada. Recuerda que tu cuenta de GitHub es tu mejor carta de presentación
como programador.
3. Primeros pasos con Git y
GitHub
3.1 Clonado de repositorios (de GitHub a
nuestra máquina)
Clonar significa hacer una copia exacta; por tanto, clonar un repositorio es hacer una
copia idéntica de un proyecto que existe en GitHub y llevártela a tu máquina.
Estarás pensando ¿qué diferencia hay entre clonar un repositorio y simplemente bajar
los archivos? En principio no hay diferencia, pero si el repositorio de GitHub cambia
porque se añaden, se borran o se modifican ficheros, entonces tendrás en tu máquina
una versión desactualizada, ya no será un clon de lo que hay en GitHub. Sin embargo,
cuando se ha clonado un repositorio con Git, la actualización es algo trivial como
veremos en el siguiente apartado.
Para clonar un repositorio tan solo nos hace falta saber su dirección exacta en GitHub.
Unas veces se nos proporcionará ese dato y, en otras ocasiones, deberemos buscar la
dirección desde el mismo GitHub.
Veamos un caso práctico. Todos los ejemplos y soluciones a los ejercicios de mi libro
Aprende Java con Ejercicios están en GitHub, en un repositorio cuya dirección es
https://github.com/LuisJoseSanchez/aprende-java-con-ejercicios.git. Para
clonar este repositorio tan solo tendrás que hacer lo siguiente.
Nos situamos dentro de la carpeta donde queremos clonar el repositorio, por ejemplo
en la carpeta Programacion que está dentro de Documentos:
cd Documentos/Programacion/
Clonamos el repositorio:
Primeros pasos con Git y GitHub 12
Clonar en «aprende-java-con-ejercicios»...
remote: Counting objects: 2852, done.
remote: Total 2852 (delta 0), reused 0 (delta 0), pack-reused 2852
Receiving objects: 100% (2852/2852), 3.92 MiB | 1.17 MiB/s, done.
Resolving deltas: 100% (1690/1690), done.
Comprobando la conectividad… hecho.
tree
.
└── aprende-java-con-ejercicios
├── ejemplos
│ ├── 01_Hola_mundo_Salida_de_datos_por_pantalla
│ │ ├── Colores.java
│ │ └── HolaMundo.java
│ ├── 02_Variables
│ │ ├── Asignaciones.java
│ │ ├── ...
. . .
. . .
. . .
¹Para instalar el comando tree, teclea sudo apt install tree en una ventana de terminal.
Primeros pasos con Git y GitHub 13
Una vez seleccionada la categoría, aparecen los repositorios que contiene. Para
ilustrar este caso práctico, he elegido el repositorio donde se almacena el código
fuente del fantástico editor Brackets.
Desde dentro del repositorio tenemos acceso a gran cantidad de información. Lo
más importante es, lógicamente, el código; podemos ver todos y cada uno de los
ficheros que componen la aplicación y meternos dentro de ellos para ver cómo está
programada. También se ven otros datos como la cantidad de personas que colabora
en el proyecto, el número de versiones que se han liberado, las incidencias pendientes
de resolver y un largo etcétera.
Lo que nos interesa a nosotros es la dirección exacta del repositorio para poder
clonarlo. Haz click en Clone or download.
Primeros pasos con Git y GitHub 15
Teclea git clone y pega la dirección del repositorio que tienes en el portapapeles.
Clonar en «brackets»...
remote: Counting objects: 119156, done.
remote: Compressing objects: 100% (99/99), done.
remote: Total 119156 (delta 55), reused 0 (delta 0), pack-reused 119046
Receiving objects: 100% (119156/119156), 83.78 MiB | 3.87 MiB/s, done.
Resolving deltas: 100% (80989/80989), done.
Comprobando la conectividad… hecho.
Ya tienes una copia exacta del proyecto en tu máquina. Puedes trastear y cambiar lo
que quieras sin miedo a que afecte al repositorio remoto que se encuentra en GitHub.
cd Documentos/Programacion/brackets
git pull
Ahora los ficheros y carpetas que hay en el repositorio que está en nuestro ordenador
son exactamente iguales que los que hay en el repositorio de GitHub. Recuerda que la
actualización hay que realizarla siempre con git pull de forma manual. Los archivos
Primeros pasos con Git y GitHub 18
cd ..
cd aprende-java-con-ejercicios
git pull
Already up-to-date.
Haz click en el signo + que hay junto a tu avatar. Selecciona New repository en el
menú desplegable.
Escribe el nombre del repositorio en el campo Repository name. Debe ser un nombre
lo más claro y conciso posible. No se permiten espacios en blanco ni caracteres
especiales en este campo. Las palabras pueden estar separadas por guiones. Como
ejemplo práctico, el repositorio de prueba que vamos a crear contendrá un programa
en lenguaje Java que muestra “Hola mundo” por pantalla, así que un nombre perfecto
Primeros pasos con Git y GitHub 20
Una vez creado el repositorio, aparece una vista general desde la que se puede ver el
contenido del mismo y mucha otra información que iremos analizando más adelante.
El repositorio recién creado está en GitHub, para trabajar sobre él lo vamos a
clonar en nuestro ordenador. Lo haremos exactamente igual que cuando clonamos
repositorios que no eran nuestros. Haz click en el botón Clone or download y, a
continuación, haz click sobre el icono del portapapeles.
Primeros pasos con Git y GitHub 21
Sitúate dentro del directorio Programacion, donde estamos haciendo las pruebas.
cd
cd Documentos/Programacion
Clonar en «hola-mundo-en-java»...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
Comprobando la conectividad… hecho.
¡Enhorabuena! Si has llegado hasta aquí siguiendo todos los pasos, has creado tu
primer repositorio en GitHub y lo has clonado en tu ordenador.
Primeros pasos con Git y GitHub 22
Cambio de directorio
cd
cd Documentos/Programacion/
cd Documentos/Programacion/brackets
cd aprende-java-con-ejercicios
Clonación de repositorios
tree
git pull
4. Flujo de trabajo con Git
4.1 Punto de partida
Si has seguido todos los pasos indicados en los capítulos anteriores, has debido crear
en GitHub un repositorio con el nombre hola-mundo-en-java y lo has clonado en tu
máquina. De momento solo contiene el fichero README.md.
Sitúate dentro del repositorio hola-mundo-en-java¹.
cd ~/Documentos/Programacion/hola-mundo-en-java
ls
README.md
cat README.md
# hola-mundo-en-java
Programa "hola mundo" en Java
En realidad, dentro del repositorio hay algo más que un fichero. En todos los
repositorios existe una carpeta oculta que contiene muchas otras carpetas y ficheros
con información sobre el proyecto. Para ver tanto los archivos y directorios visibles
como los ocultos se utiliza el comando ls -a.
¹El símbolo de la virgulilla (∼) se obtiene mediante la combinación de teclas Alt derecho + ñ.
Flujo de trabajo con Git 24
ls -a
. .. .git README.md
Para ver todo el contenido de la carpeta .git en forma de árbol, puedes utilizar tree
como hemos visto anteriormente.
tree .git
.git
├── branches
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
(...)
└── tags
19 directories, 23 files
add
touch HolaMundo.java
gedit HolaMundo.java
Escribe un programa en Java que muestre por pantalla la frase “Hola mundo”, como
se muestra en la figura y guarda los cambios.
git status
En la rama master
Su rama está actualizada con «origin/master».
Archivos sin seguimiento:
(use «git add <archivo>...» para incluir en lo que se ha de confirmar)
HolaMundo.java
²Para aprender a programar en Java, te recomiendo el libro Aprende Java con Ejercicios.
Flujo de trabajo con Git 26
Básicamente, lo que nos está diciendo git status es que hemos añadido el archivo
HolaMundo.java a nuestro repositorio pero no lo estamos teniendo en cuenta de cara
a futuras actualizaciones. Además nos está dando una pista muy importante sobre el
siguiente paso: utilizar el comando git add seguido del nombre del archivo.
Para que el fichero HolaMundo.java sea añadido al índice de archivos a tener en
cuenta, podemos teclear git add HolaMundo.java. Ahora bien, lo normal es añadir,
modificar y borrar con frecuencia muchos ficheros de un repositorio; hacer git add
para cada uno de ellos puede resultar tedioso y, lo peor, se nos puede olvidar alguno.
En la práctica, lo más cómodo es utilizar git add . --all (fíjate que hay un punto
detrás de add), de esta manera Git chequea todos los archivos que se han añadido al
directorio y todas las modificaciones que se han realizado.
Si después de teclear git add . --all no se muestra ningún mensaje, todo va bien.
commit
git status
En la rama master
Su rama está actualizada con «origin/master».
Cambios para hacer commit:
(use «git reset HEAD <archivo>...» para sacar del stage)
Esto nos está diciendo que en el siguiente commit habrá un nuevo archivo: HolaMun-
do.java. ¿Qué quiere decir eso de commit? En inglés, to commit significa cometer,
por tanto, el sustantivo commit significa “cometida” o “acomentida”, es decir, algo
que se ha cometido/hecho/realizado. En un contexto informático, la palabra commit
no se suele traducir y hace referencia simplemente a los cambios que se han realizado.
Llevemos a cabo nuestro primer commit.
push
El último paso consiste en “empujar” todos los cambios realizados en local y llevarlos
al repositorio que está en GitHub. Para ello se utiliza el comando git push.
git push
Username for 'https://github.com': AlanBritoDelgado
Password for 'https://[email protected]':
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 423 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/AlanBritoDelgado/hola-mundo-en-java.git
28ccf85..107985c master -> master
git push
Username for 'https://github.com': AlanBritoDelgado
Password for 'https://[email protected]':
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 469 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/AlanBritoDelgado/hola-mundo-en-java.git
107985c..c439564 master -> master
Cambio de directorio
cd ~/Documentos/Programacion/hola-mundo-en-java
Contenido de un directorio
ls
ls -a
Contenido de un fichero
cat README.md
tree
touch HolaMundo.java
Flujo de trabajo con Git 32
Edición de un fichero
gedit HolaMundo.java
Estado de un repositorio
git status
git push
5. Ficheros README.md,
.gitignore y HEAD
5.1 El fichero README.md
El objeto de este fichero es el de proporcionar información sobre el repositorio.
Como mínimo debería incluir el título (no tiene por qué coincidir exactamente con
el nombre que aparece en la URL) y una descripción.
En muchas ocasiones, el fichero README.md contiene información sobre configura-
ción, instalación y uso de la aplicación contenida en el repositorio.
Como ejemplo práctico utilizaremos el archivo README.md del repositorio hola-
mundo-en-java.
Demasiado escueto ¿no te parece? Es bueno hacer las cosas sencillas, pero hasta cierto
límite. Estaría bien ofrecer alguna información adicional. Ten en cuenta que el fichero
README.md es lo primero en lo que se fija un usuario una vez que “aterriza” en el
repositorio.
Edita el fichero README.md que está dentro del directorio hola-mundo-en-java de tu
ordenador y escribe el texto que se muestra en la figura figura 5.1.3.
más sencillo.
Observa que la primera línea está precedida por un carácter de almohadilla (#). Eso
significa que esta línea - “Hola mundo” en Java - es una cabecera principal que indica
el título del documento completo, o bien, el título de un capítulo. No existe una
cabecera más grande, sería el equivalente a la etiqueta h1 de HTML. En el caso que
nos ocupa, indica claramente el título del repositorio.
Además del título principal tenemos tres apartados que son “Descripción”, “Compila-
ción y ejecución del programa” y “Aprendizaje de Java”. Se indica que son apartados
mediante la doble almohadilla (##). Sería equivalente a la etiqueta h2 de HTML.
Se podrían especificar subapartados con tres almohadillas (###) e incluso subapar-
tados dentro de ellos con cuatro almohadillas (####) que serían equivalentes a las
etiquetas h3 y h4 respectivamente.
Todo lo que se coloque entre asteriscos (un asterisco delante y otro detrás) se mostrará
en cursiva. La palabra “JDK” se muestra en cursiva.
Cualquier trozo de texto que vaya entre dobles asteriscos (dos asteriscos delante
y otros dos detrás) se muestra en negrita. En este caso, “compilar” y “ejecutarlo”
aparecen en negrita.
Tres comillas invertidas colocadas antes y después de un texto indican que se trata de
código fuente o comandos. Detrás de las primeras comillas se indica el lenguaje de
programación: java, javascript, php, etc. En caso de comandos de consola, se escribe
la palabra “console”.
En markdown también se pueden insertar hiperenlaces. El texto que debe aparecer
se indica entre corchetes y la URL se especifica justo detrás y entre paréntesis.
Una manera de añadirle un poco de sal y pimienta a un fichero README.md consiste en
insertar algún que otro emoticono. Igual que con el condimento, conviene no abusar.
Emoji Cheat Sheet es una página que contiene los emoticonos disponibles que puedes
insertar en tus documentos en formato markdown.
Actualiza el archivo README.md en GitHub como en el capítulo anterior.
Ficheros README.md, .gitignore y HEAD 36
gedit .gitignore
Vamos a hacer que Git deje fuera del seguimiento las copias de seguridad (archivos
con la extensión .bak) y las clases compiladas de Java (archivos con la extensión
.class).
cp HolaMundo.java HolaMundo.java.bak
javac HolaMundo.java
ls -a
. .. .git .gitignore HolaMundo.class HolaMundo.java HolaMundo.java.bak\
README.md
Comprueba que se ha subido el nuevo fichero .gitignore a GitHub y que los archivos
HolaMundo.java.bak y HolaMundo.class no se han subido.
cat .git/logs/HEAD
0000000000000000000000000000000000000000 28ccf8597660c46c1501b833db62f2b5520\
4ff7c Alan Brito Delgado <[email protected]> 1472139870 +020\
0 clone: from https://github.com/AlanBritoDelgado/hola-mundo-en-java.git
28ccf8597660c46c1501b833db62f2b55204ff7c 107985caafbce0891ef61678767ed2b8cd9\
528ec Alan Brito Delgado <[email protected]> 1472200764 +020\
0 commit: Añadido el fichero HolaMundo.java
107985caafbce0891ef61678767ed2b8cd9528ec c439564ff162572573d29dfdfd6feac6ede\
39f56 Alan Brito Delgado <[email protected]> 1472293710 +020\
0 commit: comentarios añadidos al código
c439564ff162572573d29dfdfd6feac6ede39f56 095a9a4837907e4e08302d56b9bddb2f020\
a1a09 Alan Brito Delgado <[email protected]> 1472309400 +020\
0 commit: Información interesante en README.md
095a9a4837907e4e08302d56b9bddb2f020a1a09 62757c25174a06e538a6d7f055b72d541c8\
a9fec Alan Brito Delgado <[email protected]> 1472447469 +020\
0 commit: Añadido el fichero .gitignore
Como puedes apreciar, todo lo que has ido haciendo desde el momento en que
clonaste el repositorio ha sido registrado.
Mediante git log se puede obtener también la información almacenada en este
fichero.
git log
commit 62757c25174a06e538a6d7f055b72d541c8a9fec
Author: Alan Brito Delgado <[email protected]>
Date: Mon Aug 29 07:11:09 2016 +0200
commit 095a9a4837907e4e08302d56b9bddb2f020a1a09
Author: Alan Brito Delgado <[email protected]>
Date: Sat Aug 27 16:50:00 2016 +0200
commit c439564ff162572573d29dfdfd6feac6ede39f56
Author: Alan Brito Delgado <[email protected]>
Ficheros README.md, .gitignore y HEAD 40
commit 107985caafbce0891ef61678767ed2b8cd9528ec
Author: Alan Brito Delgado <[email protected]>
Date: Fri Aug 26 10:39:24 2016 +0200
commit 28ccf8597660c46c1501b833db62f2b55204ff7c
Author: Alan Brito Delgado <[email protected]>
Date: Thu Aug 25 09:14:25 2016 +0200
Initial commit
git push
Edición de un fichero
gedit .gitignore
Copia de un fichero
cp HolaMundo.java HolaMundo.java.bak
Ficheros README.md, .gitignore y HEAD 42
javac HolaMundo.java
Cambio de directorio
ls -a
Registro de cambios
git log
La opción -a indica que la etiqueta que estamos creando es de tipo “anotación” y hace
que se guarde más información que si creamos una etiqueta “ligera” (sin la opción
-a)¹.
Muestra todas las versiones que tienes hasta el momento (con la opción -n se
muestran también las descripciones).
git tag -n
v1.0 Versión 1.0 - "Hola mundo" clásico
v1.1 Versión 1.1 - Saludo ampliado
Como era de esperar, comprobamos que tenemos dos versiones de nuestro programa.
La primera versión (v1.0) muestra una línea por pantalla y la segunda (v1.1) muestra
dos líneas.
Actualiza el repositorio en GitHub.
Versiones y ramas 45
Busquemos ahora las etiquetas. Haz click en el botón Branch: master (figura
6.1.3) y, a continuación haz click en la pestaña Tags ¿Qué nos encontramos? Un
descorazonador Nothing to show, a pesar de que el repositorio está correctamente
actualizado no hay ni rastro de las estiquetas ¡Que no cunda el pánico! vamos a ver
lo que ha sucedido.
Versiones y ramas 46
Por defecto, el comando git push no actualiza las etiquetas en el repositorio remoto,
es necesario indicarlo de forma explícita con la opción --tags.
Busquemos de nuevo las etiquetas. Haz click en el botón Branch: master (figura
6.1.4) y luego en Tags. Ahora sí podemos ver nuestras etiquetas v1.0 y v1.1 y, lo que
es todavía mejor, podemos cambiar de una versión a otra. Haz clic en v1.0.
Versiones y ramas 47
6.2 Ramas
Una rama es un flujo en el cual se van haciendo cambios en el código (modificando,
borrando o añadiendo archivos). Por defecto, cuando se crea un repositorio, el flujo
principal se llama rama master o rama principal.
Cuando se crea una rama adicional, ese flujo se bifurca, es decir, se puede optar por
seguir por la rama principal o seguir por la nueva rama. Es posible saltar de una rama
a otra y continuar avanzando por cualquiera de ellas.
Dado el caso, la rama creada se puede fusionar con la rama master y volveríamos a
tener una única rama como al principio.
Vamos a realizar un ejemplo práctico. Crearemos una rama experimental en la que
haremos pruebas con el fichero HolaMundo.java. Intentaremos mostrar los mensajes
por pantalla en colores. Si lo conseguimos, fusionaremos la rama experimental con
la rama master.
Para crear una rama se utiliza el comando git branch y para saltar de una rama a
otra git checkout. Se pueden realizar las dos acciones de una vez con git checkout
-b.
git status
En la rama experimentocolores
nothing to commit, working directory clean
Compila el programa.
javac HolaMundo.java
Las dos líneas siguen saliendo en blanco ¿por qué? muy fácil, hemos definido los
colores pero no los hemos aplicado al pintar las líneas.
Edita el archivo HolaMundo.java y aplica los colores a los mensajes que queremos
mostrar.
¡Bravo! Ahora sí ha salido lo que queríamos. La primera línea aparece escrita en color
naranja y la segunda en azul.
Veamos cómo se muestran las ramas en GitHub.
Hay un mensaje destacado avisando que se ha hecho una actualización en una rama.
Versiones y ramas 52
Si haces click en Branch: master y luego en la pestaña Branches verás que aparecen
las dos ramas: master y experimentocolores.
Seleccionando master se puede ver cómo está HolaMundo.java en la rama principal.
git push
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/AlanBritoDelgado/hola-mundo-en-java.git
87a2d1a..9e85b66 master -> master
Veamos cómo ha quedado el repositorio en GitHub. Observa que sigues teniendo dos
ramas.
Etiquetado de versiones
git tag -n
git push
Versiones y ramas 56
git status
javac HolaMundo.java
Versiones y ramas 57
Fusión de ramas
Con un ejemplo práctico se verá todo mucho más claro. Utilizaremos como base una
historia. Alan escribirá el principio de un cuento. A Elena le parece muy interesante
Desarrollo colaborativo (fork y pull request) 59
y hace su aportación trabajando sobre una copia. Finalmente, Elena le pide permiso
a Alan para que su interesante contribución sea incorporada a la historia original.
Veamos todo el proceso paso a paso.
Alan crea el repositorio las-aventuras-de-paco-el-pulpogato haciendo click en el
botón New repository.
Una vez creado el repositorio, Alan lo clona en local. Para ello, primero hace click en
el botón Clone or download y luego en el botón con el icono del portapapeles para
copiar la dirección del repositorio al portapapeles.
Para clonar el repositorio en local, recuerda que se utiliza el comando git clone
seguido de la dirección del repositorio que se quiere copiar. En este caso, la dirección
está en el portapapeles.
cd las-aventuras-de-paco-el-pulpogato/
gedit README.md
Desarrollo colaborativo (fork y pull request) 61
Elena hace click en el botón Fork¹ y comienza el proceso de copia, que puede durar
unos segundos.
Una vez que Elena tiene una copia de la historia, tiene que clonarla en su ordenador
para trabajar con ella. Ya hemos visto varias veces en este manual cómo se hace esto.
Elena hace click en el botón Clone or download y luego en el botón con el icono del
portapapeles para copiar la dirección del repositorio al portapapeles.
¹Al pasar el ratón por encima del botón Fork aparece el mensaje Fork your own copy of AlanBritoDelgado/las-aventuras-
de-paco-el-pulpogato to your account que quiere decir en español “Bifurca/ramifica tu propia copia de AlanBritoDelgado/las-
aventuras-de-paco-el-pulpogato en tu propia cuenta”.
Desarrollo colaborativo (fork y pull request) 64
A continuación, Elena ejecuta el comando git clone desde una ventana de terminal.
Ahora Elena edita el archivo README.md para añadir unas líneas a la historia original.
Desarrollo colaborativo (fork y pull request) 65
cd las-aventuras-de-paco-el-pulpogato/
gedit README.md
Como se puede ver en la figura 7.11, aparece el contenido del fichero README.md.
Hay dos iconos, uno de un lápiz que permite acceder al área de edición, y otro de
una papelera que da la posibilidad de borrar el archivo. Cuando se pasa el ratón por
encima del icono del lápiz aparece el mensaje Edit this file que significa en español
“Editar este fichero”. Elena hace click en el icono de edición.
Figura 7.12: Edición on-line del fichero README.md (la franja gris indica por dónde se ha recortado
la imagen).
Como se puede ver en la figura 7.12 Elena añade algo de texto hasta completar su
Desarrollo colaborativo (fork y pull request) 68
Antes de hacer el pull request no vendría mal actualizar el repositorio local. Elena
ha realizado los últimos cambios on-line, directamente desde su cuenta de GitHub;
por tanto el repositorio de su máquina no está actualizado. Para actualizar en local,
simplemente hay que ejecutar el comando git pull.
Desarrollo colaborativo (fork y pull request) 69
git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/ElenaKozina/las-aventuras-de-paco-el-pulpogato
f9d8b00..775dc8b master -> origin/master
Updating f9d8b00..775dc8b
Fast-forward
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
¡Atención!
Cuando se realizan cambios en los archivos de un repositorio directamente
desde la cuenta de GitHub (on-line), es necesario ejecutar el comando git
pull para actualizar el repositorio local.
Elena hace click en el botón Create pull request (ver figura 7.13). A continuación
aparece una página (figura 7.14) en la que pueden introducir comentarios sobre los
cambios que ha realizado en el proyecto. Elena escribe el título “Nuevo capítulo” y la
descripción “He escrito un nuevo capítulo de Las Aventuras de Paco El Pulpogato”.
Desarrollo colaborativo (fork y pull request) 70
Elena hace click en el botón Create pull request y (por fin) se envía el pull request
a Alan.
Vemos en la figura 7.15 que después de hacer el pull request, se marca como Open
(abierto) y permanecerá así mientras no sea autorizado por Alan.
Veamos ahora las cosas desde el punto de vista de Alan (figura 7.16).
Desarrollo colaborativo (fork y pull request) 71
Cuando Alan entra en su cuenta de GitHub ¡pega un salto de alegría!² Hay una
pestaña que reza Pull requests 1. Eso significa que alguien ha realizado cambios
en una copia de su historia y quiere que esos cambios sean aceptados por el dueño
del repositorio, que es él mismo.
Alan hace click en la pestaña Pull requests y observa (figura 7.17) que la usuaria
ElenaKozina ha hecho un fork con el título “Nuevo capítulo”.
Aparece una nueva página (figura 7.18) con toda la información sobre el fork
realizado por Elena: comentarios sobre el fork, commits realizados, ficheros que han
cambiado (en este caso únicamente el archivo README.md), etc.
Alan hace click en la pestaña Commits.
Desarrollo colaborativo (fork y pull request) 73
En la pestaña Commits aparecen los dos commits que ha hecho Elena, para echar
un vistazo, puede hacer click en el último, que es “Actualización de README.md”.
Alan puede comprobar cómo quedaría finalmente la historia con los cambios que
ha realizado Elena pulsando en el botón View (saltaría al repositorio de Elena). Ya
vimos anteriormente cómo quedaba el texto (figura 7.10).
Alan regresa otra vez a su repositorio y se vuelve a la pestaña Pull requests.
Una vez dentro del fork de Elena, Alan acepta los cambios haciendo click en el botón
Desarrollo colaborativo (fork y pull request) 74
Figura 7.23: Texto final (la línea gris indica por dónde se ha cortado la imagen).
Desarrollo colaborativo (fork y pull request) 77
Clonación de repositorios
Cambio de directorio
cd las-aventuras-de-paco-el-pulpogato/
Edición de un fichero
gedit README.md
git push
git pull
Invitación
Si te gusta escribir y tienes imaginación, te invito a que participes en la elaboración
de la historia “Las Aventuras de Paco El Pulpogato”.
El repositorio en cuestión está en https://github.com/LuisJoseSanchez/las-aventuras-
de-paco-el-pulpogato
En el Capítulo 7 se explica en detalle el desarrollo colaborativo con Git y GitHub.
¡Espero tus pull requests!
Referencias
Git
• Git Pro
• Git Inmersion
GitHub
• GitHub Help
Fichero .gitignore
• Ejemplo de .gitignore
Markdown
• Mastering Markdown
Emojis
• Emoji Cheat Sheet
Java
• Aprende Java con Ejercicios
• Ejemplos y soluciones a los ejercicios de “Aprende Java con Ejercicios”