Libro Git
Libro Git
net/publication/344668228
CITATIONS READS
0 3
1 author:
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Jorge Domínguez Chávez on 15 October 2020.
Publicado por
Git como plataforma de apoyo docente
JORGE DOMÍNGUEZ CHÁVEZ
UNIVERSIDAD POLITÉCNICA TERRITORIAL DE ARAGUA
Venezuela, 2020
Copyright ® Jorge Domínguez Chávez.
ORCID: 0000-0002-5018-3242
http://creativecommonsvenezuela.org.ve
Reconocimiento:
Atribución: Permite a otros copiar, distribuir, exhibir y realizar su trabajo con Derechos de Autor y
trabajos derivados basados en ella – pero sólo si ellos dan créditos de la manera en que usted lo solicite.
Compartir igual: Permite que otros distribuyan trabajos derivados sólo bajo una licencia idéntica a la
que rige el trabajo original.
Adaptar: mezclar, transformar y crear a partir de este material.
ISBN 9789806366091
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i
Terminología . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii
1. Introducción iv
1.1. Introducción a git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
1.2. Los tres estados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi
1.3. Definición, clasificación y funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . vi
1.4. Clasificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii
1.4.1. Locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii
1.4.2. Centralizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii
1.4.3. Distribuidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii
3. GitHub 5
3.1. Creación y configuración de la cuenta . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2. Acceso SSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.3. Tu icono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.4. Tus direcciones de correo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.5. Autentificación de dos pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.6. Mantenimiento de un proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.6.1. Creación de un repositorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.6.2. Añadir colaboradores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.6.3. Gestión de los Pull Requests . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.6.4. Notificaciones por correo electrónico . . . . . . . . . . . . . . . . . . . . . . . 13
3.6.5. Colaboración en el Pull Request . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.6.6. Referencias de Pull Request . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.6.7. Pull Requests sobre Pull Requests . . . . . . . . . . . . . . . . . . . . . . . . 17
3.6.8. Menciones y notificaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.6.9. Página de notificaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.6.10. NOTIFICACIONES WEB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.6.11. NOTIFICACIONES POR CORREO . . . . . . . . . . . . . . . . . . . . . . . 20
3.6.12. Archivos especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.7. Administración del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.7.1. Cambiar la rama predeterminada . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.7.2. Rama predeterminada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.7.3. Transferencia de un proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.7.4. Transferir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.8. Gestión de una organización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.9. Conceptos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.10. Equipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.11. Auditorías . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4. Antecedentes 26
4.1. Académico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2. Tecnológico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3. La unión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.4. Git colaborativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.5. GitHub no es sólo para desarrolladores de software . . . . . . . . . . . . . . . . . . . 29
6. Ejercicios selectos 43
Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Índice de figuras
5.1. addcommit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2. addsshkey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.3. clone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.4. addmembers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.5. unprotectbranch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.6. allowpush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.7. colaboración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.8. upstream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Resumen
Los sistemas de la administración de la enseñanza (LMS) son de amplio uso tanto entre los profe-
sores como entre los estudiantes para asistir a las actividades no presenciales de la clase; si bien el
esfuerzo necesario para conformar las actividades relacionadas a un curso no es trivial, al brindar no
únicamente la capacidad de recoger la interacción, sino que generar automáticamente calificaciones,
resultan muy atractivos para los profesores.
El sistema de control distribuido de versiones Git se ha convertido en una herramienta esencial para
manejar proyectos de software. Uno de los motivos de la creciente popularidad de Git es el éxito de
GitHub, una plataforma Web de desarrollo colaborativo basada en Git.
GitHub ofrece toda la funcionalidad de Git e integra diversas herramientas de control de acceso,
colaboración, trazabilidad, gestión de tareas y control de proyectos.
Recientemente, profesores dentro y fuera del mundo académico relacionado con la Informática han
comenzado a usar GitHub en sus cursos. Esta contribución presenta una experiencia docente desa-
rrollada en unidades curriculares relacionadas con la ingeniería de software en la que GitHub se ha
utilizado como la herramienta académica básica para el desarrollo de la parte práctica.
La intención del autor con este texto es presentar la justificación para el elegir esta plataforma en
particular para muchas de las unidades curriculares en el Plan Nacional de Formación en Informá-
tica del Departamento de Informática de la Universidad Politécnica Territorial del estado Aragua;
si bien la UPT Aragua tiene una amplia experiencia de 18 años en e-learning, primero con A-tutor
y posteriormente con Moodle.
Este aporte se centra en motivar la utilización de Git, explicar su implementación, evaluar los be-
neficios y riesgos potenciales que conllevan a identificar nuevos retos.
i
Terminología
ii
Tronco (” trunk” ) La única línea de desarrollo que no es una rama (llamada
línea base, línea principal o máster).
Fusionar, integrar, mezclar (” Una fusión o integración es una operación donde se aplican
merge” ) dos tipos de cambios en uno o más archivos. Algunos esce-
narios son los siguientes:
Introducción
Los sistemas de control de versiones (SCV) son una herramienta esencial para manejar proyectos de
gestión de software y desde hace algunos años se han introducido en la enseñanza como herramienta
de apoyo docente. De hecho, cada vez se encuentran trabajos que analizan su uso en ese contexto.
Los SCV son herramientas informáticas de uso cotidiano en el desarrollo profesional de software des-
de hace años, y proporcionan funcionalidades claves para el desarrollo y culminación de proyectos
como es el control de cambios en el código, su reversibilidad y la posibilidad de trabajo colaborativo
en el desarrollo del código.
Además, los SCV facilitan tener en paralelo varias versiones o ramas del proyecto. Las ramas se
utilizan para desarrollar funcionalidades aisladas de los cambios en otras partes del proyecto que
posteriormente pueden integrarse en la rama principal.
Los SCV se clasifican en dos grandes familias: centralizados y distribuidos. Los SCV centralizados
son sistemas cliente-servidor donde existe un repositorio canónico en el servidor que contiene toda
la información de los cambios mientras que los clientes sólo tienen copias de trabajo; mientras que
en los CVS distribuidos cada usuario tiene su propio repositorio y puede intercambiar y mezclar
revisiones con los distintos repositorios.
Desde 2010, la tendencia es utilizar cada vez más SCV distribuidos, en particular Git.
Los SCV se están incorporando a la enseñanza por diferentes motivos: ayudan a desarrollar el traba-
jo en equipo [1], facilitan la retroalimentación de los desarrolladores y/o estudiantes [4], establecen
escenarios de desarrollo realistas [3] e, incluso, se utilizan como herramienta de supervisión [12].
Si bien su uso no está exento de retos. Aunque los estudiantes y desarrolladores pueden utilizarlo
como un sistema de entrega más, sin aprovechar en su completa funcionalidad [2], o usarlo de forma
ineficiente [5].
Desde la perspectiva académica existe el riesgo de un aumento de las tareas de gestión docente [6]
o que la curva de aprendizaje por parte de los estudiantes sea tan elevada que afecte al normal
desarrollo de un curso [7].
Esta contribución presenta la experiencia docente desarrollada en las diferentes unidades curriculares
en el grado de Ingeniería Informática gestionado por el Departamento de Informática de la Univer-
sidad Politécnica Territorial del estado Aragua. En la unidades curriculares como Arquitectura del
computador, Algorítmica y programación, así como en Paradigmas de programación se emplea para
entregar las tareas y para el seguimiento en el desarrollo de la parte práctica y de la veracidad y
autenticación de los proyectos finales.
iv
Adicionalmente, en este momento de pandemia y alejamiento social, donde la educación de ha visto
en la necesidad de implementar actividades académicas vía internet, en lugar de utilizar directamen-
te Git desde la línea de comandos, se viene utilizado la plataforma y las herramientas de escritorio
proporcionadas por GitHub [8] para afrontar los retos y riesgos mencionados.
GitHub es un servicio comercial de alojamiento en la Web de repositorios remotos Git y está con-
siderado como la plataforma de alojamiento de repositorios remotos más popular. A principios de
2014 el número de usuarios de GitHub se estimaba n más de 3,4 millones y el número de repositorios
en 16,7 millones [9].
En abril de 2015, el número de usuarios es más de 9,4 millones y el número de repositorios alcanza los
22,4 millones [8]. Nuestra contribución se centra en motivar esta experiencia, explicar cómo utilizar
esta herramienta en los cursos, así como evaluar sus beneficios, riesgos y retos.
1.4.1. Locales
Los cambios son guardados localmente y no se comparten. Esta arquitectura es la antecesora de las
dos siguientes.
1.4.2. Centralizados
Existe un repositorio centralizado de todo el código, del cual es responsable un único usuario (o
conjunto de ellos). Se facilitan las tareas administrativas a cambio de reducir flexibilidad, pues todas
las decisiones fuertes (como crear una nueva rama) necesitan la aprobación del responsable. Algunos
ejemplos son CVS y Subversion.
Figura 1.4: Sistema de control de versiones centralizado
1.4.3. Distribuidos
Cada usuario tiene su propio repositorio. Los distintos repositorios pueden intercambiar y mezclar
revisiones entre ellos si existe permiso para ello. Es frecuente el uso de un repositorio, que está
normalmente disponible, como punto de sincronización de los distintos repositorios locales. Ejemplos:
Git y Mercurial.
Ventajas de sistemas distribuidos
En este apartado se presentan las herramientas y funcionalidades de GitHub a ser utilizadas en las
diferentes unidades curriculares del PNFI en el Departamento de Informática de la UPT Aragua
distinguiendo entre las derivadas de Git y las exclusivas de GitHub.
Las herramientas y funcionalidades se presentan agrupadas bajo tres criterios: a) El primero atiende
a su uso por parte del estudiante en su aprendizaje, b) El segundo se fija en su papel como soporte
del curso y c) el tercero describe aspectos relacionados con tecnologías, licencias y precios.
Trabajo fuera de línea. Implícito por soportar Git pero restringido a los recursos gestiona-
dos en los repositorios por Git. No hay soporte fuera de línea a las herramientas de trabajo
colaborativo de GitHub.
Trabajo en grupo. El uso de Git y GitHub implementa diferentes flujos de trabajo en entornos
educativos [10]. Esto se ha organizado según se describe en la Figura 2.1.
1
Figura 2.1: Flujo de trabajo en grupo utilizando Git-Hub/Git
1. Primero, preparar los repositorios remotos compartidos de los grupos y los repositorios remo-
tos y locales de los estudiantes. GitHub actúa como la máquina remota donde se crean los
repositorios remotos compartidos.
2. Segundo, cada estudiante clona en GitHub el repositorio remoto compartido de su grupo para
crear su propio repositorio remoto.
3. Tercero, crear por parte de cada estudiante un clon local de su repositorio remoto utilizando
Git. Al repositorio local se le añade como remoto el repositorio remoto del grupo. El repositorio
remoto del estudiante se referencia localmente en Git como origin y el del grupo como upstream.
4. Una vez preparada la infraestructura, el flujo de trabajo esperado de cada estudiante ejecuta
los siguientes pasos:
integra los cambios del repositorio del grupo en su repositorio local (git pull –rebase ups-
tream), realiza los cambios pertinentes, envía dichos cambios a su repositorio individual
remoto (git push –force origin) y,
finalmente, solicita vía un pull request que los cambios de su repositorio remoto se integren
en el repositorio remoto del grupo. Dentro del grupo hay un estudiante con el rol de gestor
del repositorio remoto. Este estudiante decide si se integra o no el cambio en el repositorio
del grupo.
La única herramienta de GitHub considerada de aprendizaje no asociada con Git y de la cual se tiene
constancia de su uso por parte de los estudiantes son los micro foros de discusión. Los estudiantes
que han iniciado sesión en GitHub agregan vía Web comentarios a cualquier cambio y a los issues
asociados a un repositorio público.
También permite al propietario del repositorio (como, un profesor) moderar dichos comentarios. Esta
herramienta se utilizará principalmente en la interacción profesor-estudiante durante los seguimientos
y entregas de los proyectos.
Otras herramientas como el potente motor de búsqueda facetado que restringe la búsqueda de
usuarios a repositorios, rutas, lenguajes de programación, asuntos, y fechas de creación y mezcla,
puede haber sido utilizado por los estudiantes pero no existe forma de cuantificar su uso.
Integridad. Tal como se ha comentado en una sección anterior, Git incorpora una autenticación
criptográfica del historial de cambios de un repositorio. Esta característica implica que un
estudiante no puede modificar un cambio integrado en la historia del repositorio para añadir
o borrar un fichero o alterar su contenido. En consecuencia, el histórico de cambios es una
imagen fiel de la actividad del estudiante o del grupo.
Compartir material de prácticas. El material de prácticas del curso así como todo el código
que necesitan los estudiantes está almacenado en repositorios públicos. Se ha enfatizado a
los estudiantes que deben clonar el material de prácticas. De esta manera, ya sea por nuevo
material disponible o para corregir errores detectados, pueden aprovechar Git para incorporar
los cambios.
Transparencia. [11] señala que la disponibilidad en GitHub de pistas visibles como el volu-
men de actividad, la actividad a lo largo del tiempo, a relevancia del flujo de cambios, y la
información detallada son herramientas útiles para resolver problemas de coordinación y co-
municación.
Aplicada a la gestión del curso, la transparencia ha resuelto problemas de coordinación y
comunicación entre los profesores y los estudiantes, y entre los estudiantes entre sí.
Edición en línea de contenido. GitHub lo edita vía un editor Web. Según el tipo de extensión,
como .md, facilita su previsualización.
.
Capítulo 3
GitHub
5
Figura 3.1: Formulario para darse de alta en GitHub.
Lo siguiente que verá es la página de precios según planes, pero lo puede ignorar por el momento.
GitHub le enviará un correo para verificar la dirección suministrada. Confirmar su dirección es
importante.
GitHub proporciona toda su funcionalidad en cuentas gratuitas, puede tener tanto pro-
yectos públicos como privados ilimitados. La única limitación es que cada uno de sus
proyectos privados tenga sólo un máximo de tres colaboradores. Los planes de pago de
GitHub permiten tener algunas herramientas extra, pero esto es algo fuera del alcance
de este libro.
Si presiona el logo del gato con patas de pulpo en la parte superior izquierda de la pantalla llega a
su escritorio principal. Ahora está listo para usar GitHub.
Presione sobre .Add an SSH key", proporcione un nombre y pegue los contenidos del archivo
/.ssh/idr sa.pub (o donde haya definido su clave pública) en el área de texto y presione ” Add
key” .
Asegúrese de dar a su clave un nombre fácil de recordar. Puede añadir claves diferentes,
con nombres como Çlave Portátil.o Çuenta de trabajo", de modo que si tiene que revocar
alguna clave más tarde, resultará fácil saber cuál es.
3.3. Tu icono
También, puede reemplazar el icono (avatar) generado con la imagen de su elección. En primer lugar
seleccione la opción ” Profile” (arriba de la opción ” SSH keys” ) y presione ” Upload new picture” .
Elija una copia del logo de Git que tenga en el disco duro, tendrá la opción de recortarlo al subirlo.
Desde ahora, quien vea su perfil o sus contribuciones en los repositorios, verá su nuevo icono junto
a su nombre.
Si por casualidad tiene su icono en el popular servicio Gravatar (conocido por su uso en las cuentas
de Wordpress), éste será detectado y no tendrá que hacer este paso, si no lo desea.
3.4. Tus direcciones de correo
La forma en que GitHub identifica sus contribuciones a Git es mediante la dirección de correo
electrónico. Si tiene varias direcciones diferentes en sus contribuciones (commits) y quiere que GitHub
sepa que son de su cuenta, necesita añadirlas en el apartado Emails de la sección de administración.
En Añadiendo direcciones de correo verá los diferentes estados posibles. La dirección inicial se verifica
y utiliza como dirección principal, lo que significa que es donde va a recibir cualquier notificación.
La siguiente dirección se puede verificar y ponerla como dirección principal, si decide cambiarla.
La última dirección no está verificada, lo que significa que no puede usarla como principal. Pero si
GitHub ve un commit con esa dirección, la identificará asociándola a su usuario.
Todo lo que tiene que hacer aquí es darle un nombre al proyecto; el resto de campos es opcional.
Por ahora, presione en el botón ” Create Repository” y listo: se crea el repositorio en GitHub, con
el nombre <usuario>/<proyecto>.
Dado que no tiene todavía contenido, GitHub te muestra instrucciones para crear el repositorio Git,
o para conectarlo a un proyecto Git existente.
Ahora que el proyecto está alojado en GitHub, puede dar la URL a cualquiera con quien quieras com-
partirlo. Cada proyecto en GitHub es accesible mediante HTTP como https://github.com/<usuario>/<proyecto>,
y también con SSH con la dirección git@github.com:<usuario>/<proyecto>. Git puede obtener y
enviar cambios en ambas URL, ya que tienen control de acceso basado en las credenciales del usuario.
Suele ser preferible compartir la URL de tipo HTTP de los proyectos públicos, puesto
que así el usuario no necesitará una cuenta GitHub para clonar el proyecto. Si das la
dirección SSH, los usuarios necesitarán una cuenta GitHub y subir una clave SSH para
acceder. Además, la URL HTTP es exactamente la misma que usamos para ver la página
web del proyecto.
seleccione ” Collaborators” del menú del lado izquierdo. Simplemente, teclea el usuario en la caja y
presione en ” Add collaborator.” puede repetir esto las veces que necesites para dar acceso a otras
personas. Recuerda que si el proyecto está en un repositorio privado gratuito, solo podrás dar accesos
a tres colaboradores. Si necesita quitar un acceso, presione en la ” X” del lado derecho del usuario.
Figura 3.11: Colaboradores del repositorio.
Hay algunas cosas a destacar en este correo. En primer lugar, te dará un pequeño diffstat (es decir,
una lista de archivos cambiados y en qué medida). Además, trae un enlace al Pull Request y algunas
URL que puede usar desde la línea de comandos.
Si observas la línea que dice git pull <url>patch-1, es una forma simple de fusionar una rama remota
sin tener que añadirla localmente. Lo vimos esto rápidamente en Recuperando ramas remotas. Si lo
deseas, puede crear y cambiar a una rama y luego ejecutar el comando para fusionar los cambios del
Pull Request.
Las otras URL interesantes son las de .diff y .patch, que como su nombre lo indica, proporcionan
” diff unificados” y formatos de parche del Pull Request. Técnicamente, podrías fusionar con algo
como:
1 $ curl http :// github . com / tonychacon / fade / pull /1. patch | git am
Una vez que el código está como quiere y deseas fusionarlo, puede copiar el código y fusionarlo
localmente, mediante la sintaxis ya conocida de git pull <url><branch>, o bien añadiendo el fork
como nuevo remoto, bajándotelo y luego fusionándolo.
Si la fusión es trivial, también puede presione r el botón ” Merge” en GitHub. Esto realizará una
fusión ” sin avance rápido” , creando un commit de fusión incluso si era posible una fusión con avance
rápido. Esto significa que cada vez que pulses el botón Merge, se creará un commit de fusión. Como
verás en Botón Merge e instrucciones para fusionar manualmente un Pull Request., GitHub te da
toda esta información si presione s en el enlace de ayuda.
Figura 3.14: Botón Merge e instrucciones para fusionar manualmente un Pull Request.
Si decides que no quiere fusionar, también puede cerrar el Pull Request y la persona que lo creó será
notificada.
Aquí puede fácilmente especificar la fusión de tu nueva rama en otro Pull Request o en otrá bifur-
cación del proyecto.
También puede mencionar a un usuario que no esté en la lista desplegable, pero normalmente el
autocompletado lo hará más rápido.
Una vez que envías un comentario con mención a un usuario, el usuario citado recibirá una notifi-
cación. Es decir, es una forma de implicar más gente en una conversación. Esto es muy común en
los Pull Requests para invitar a terceros a que participen en la revisión de una incidencia o un Pull
Request.
Si alguien es mencionado en un Pull Request o incidencia, quedará además ” suscrito” y recibirá
desde este momento las notificaciones que genere su actividad. Del mismo modo, el usuario que crea
la incidencia o el Pull Request queda automáticamente ” suscrito” para recibir las notificaciones,
disponiendo todos de un botón ” Unsubscribe” para dejar de recibirlas.
Para cada tipo, puede elegir tener notificaciones de ” Email” o de ” Web” , y puede elegir tener una
de ellas, ambas o ninguna.
Si presione s en él, verás una lista de todos los elementos sobre los que se te notifica, agrupados por
proyecto. puede filtrar para un proyecto específico presione ndo en su nombre en el lado izquierdo.
También puede reconocer (marcar como leída) una notificación presione ndo en el icono de check en
una notificación, o reconocerlas todas presione ndo en el icono de check de todo el grupo. Hay tam-
bién un botón ” mute” para silenciarlas, que puede presione r para no recibir nuevas notificaciones
de ese elemento en el futuro.
Todas estas características son útiles para manejar un gran número de notificaciones. Muchos usua-
rios avanzados de GitHub suelen desactivar las notificaciones por correo y manejarlas todas mediante
esta pantalla.
3.6.11. NOTIFICACIONES POR CORREO
Las notificaciones por correo electrónico son la otra manera de gestionar notificaciones con GitHub.
Si las tiene activas, recibirás los correos de cada notificación. Vimos ya algún ejemplo en Comentarios
enviados en notificaciones de correo y Notificación por correo de nuevo Pull Request.. Los correos
también serán agrupados correctamente en conversaciones, con lo que estará bien que uses un cliente
de correo que maneje las conversaciones.
En las cabeceras de estos correos se incluyen también algunos metadatos, que serán útiles para crear
filtros y reglas adecuados.
Por ejemplo, si miramos las cabeceras de los correos enviados a Tony en el correo visto en Notificación
por correo de nuevo Pull Request., veremos que se envió la siguiente información:
1 To : tonychacon / fade < fade@noreply . github . com >
2 Message - ID : < tonychacon / fade / pull /1 @github . com >
3 Subject : [ fade ] Wait longer to see the dimming effect better (#1)
4 X - GitHub - Recipient : tonychacon
5 List - ID : tonychacon / fade < fade . tonychacon . github . com >
6 List - Archive : https :// github . com / tonychacon / fade
7 List - Post : < mailto : reply +i -4 XXX@reply . github . com >
8 List - Unsubscribe : < mailto : unsub +i - XXX@reply . github . com > ,...
9 X - GitHub - Recipient - Address : tchacon@example . com
Vemos en primer lugar que la información de la cabecera Message-Id nos da los datos que necesitamos
para identificar usuario, proyecto y demás en formato <usuario>/<proyecto>/<tipo>/<id>. Si se
tratase de una incidencia, la palabra ” pull” habría sido reemplazada por ” issues” .
Las cabeceras List-Post y List-Unsubscribe permiten a clientes de correo capaces de interpretarlas,
ayudarnos a solicitar dejar de recibir nuevas notificaciones de ese tema. Esto es similar a presione r
el botón ” mute” que vimos en la versión web, o en ” Unsubscribe” en la página de la incidencia o el
Pull Request.
También merece la pena señalar que si tiene activadas las notificaciones tanto en la web como por
correo, y marcas como leído el correo en la web también se marcará como leído, siempre que permitas
las imágenes en el cliente de correo.
README
En primer lugar, tiene el archivo README, que puede estar en varios formatos. Con el nom-
bre README, README.md, README.asciidoc y alguno más. Cuando GitHub detecta su
presencia en el proyecto, lo muestra en la página principal, con el renderizado que corresponda
a su formato.
En muchos casos este archivo se usa para mostrar información relevante a cualquiera que sea
nuevo en el proyecto o repositorio. Esto incluye normalmente cosas como:
Puesto que GitHub hace un renderizado del archivo, puede incluir imágenes o enlaces en él
para facilitar su comprensión.
CONTRIBUTING
El otro archivo que GitHub reconoce es CONTRIBUTING. Si tiene uno con ese nombre y
cualquier extensión, GitHub mostrará algo como Apertura de un Pull Request cuando existe
el archivo CONTRIBUTING. cuando se intente abrir un Pull Request.
La idea es que indique cosas a considerar a la hora de recibir un Pull Request. Los usuarios lo deben
leer a modo de guía sobre cómo abrir la petición.
3.7.4. Transferir
Esto es útil si abandona el proyecto y quiere que alguien continúe, o bien se ha vuelto muy grande
y prefieres que se gestione desde una organización.
Esta transferencia, supone un cambio de URL. Para evitar que nadie se pierda, genera una redirección
web en la URL antigua. Esta redirección funciona también con las operaciones de clonado o de copia
desde Git.
En primer lugar tiene que decidir el nombre de la organización y una dirección de correo que será el
punto principal de contacto del grupo. A continuación, invite a otros usuarios a que se unan como
co-propietarios de la cuenta.
Sigua estos pasos y será propietario de un grupo nuevo. A diferencia de las cuentas personales,
las organizaciones son gratuitas siempre que los repositorios sean de código abierto (y por tanto,
públicos).
Como propietario de la organización, cuando bifurca un repositorio podrá hacerlo a su elección en
el espacio de la organización. Cuando crea nuevos repositorios puede también elige el espacio donde
se crearán: la organización o cuenta personal. Automáticamente, además, quedá como vigilante
(watcher) de los repositorios creados en la organización.
Al igual que en ”Tu icono”, puede subir uno para personalizar la organización, que aparecerá entre
otros sitios en la página principal de la misma, que muestra los repositorios y puede ser visitada por
publico en general.
Veamos algunas cosas que son diferentes con una cuenta de organización.
3.10. Equipos
Las organizaciones se asocian con individuos mediante los equipos, que son agrupaciones de cuentas
de usuario y repositorios dentro de la organización, y los accesos que tienen esas personas sobre cada
repositorio.
Si su empresa tiene tres repositorios: frontend, backend y deployscripts’; y requiere que los desa-
rrolladores de web tengan acceso a frontend y tal vez a backend, y que las personas de operaciones
accedan a backend y deployscripts. Los equipos hacen fácil esta organización, sin tener que gestionar
a los colaboradores en cada repositorio individual.
La página de la organización muestra un panel simple con todos los repositorios, usuarios y equipos
asociados a ella.
Figura 3.24: Página de la organización.
Para gestionar sus equipos, presione ” Teams” en la barra del lado derecho en Página de la organiza-
ción. Esto le lleva a una página en la que añade los miembros y repositorios del equipo o gestiona los
ajustes y niveles de acceso del mismo. Cada equipo puede tener acceso de sólo lectura, de escritura o
administrativo al repositorio. Cambie el nivel presionando el botón ” Settings” en Página de equipos.
Cuando invita un usuario a un equipo, este usuario recibirá un correo con una invitación.
Además, hay menciones de equipo (como @acmecorp/frontend) que serven para que todos los miem-
bros del equipo sean suscritos con un único hilo. Esto es útil si involucra a un equipo en algo y no
tiene claro a quién en concreto preguntar.
Un usuario puede pertenecer a cuantos equipos requiera, por lo que no use únicamente para temas
de control de acceso a repositorios, sino que puede usarlos para formar equipos especializados y
dispares como ux, css, refactoring, legal, etc.
3.11. Auditorías
Las organizaciones pueden también dar a los propietarios acceso a la información sobre la misma;
incluso ir a la opción Audit Log y ver los eventos que han sucedido, quién hizo, por qué y dónde.
También puede filtrar por tipo de evento, por lugares o por personas concretas.
Capítulo 4
Antecedentes
4.1. Académico
Los temas aquí descritos se ubican dentro de la enseñanza de las materias de la carrera de Ingeniería
en Informática, impartida por el Departamento de Informática de la Universidad Politécnica Terri-
torial del estado Aragua. La Coordinación de los Laboratorios de Informática del Departamento de
Informática del UPT Aragua ofrece a sus docentes diversas herramientas de gestión de la enseñanza
(LMS); actualmente ofrece la plataforma Moodle.
El plan de estudios de la carrera indica, a grosso modo, que el estudiante obtendrá las bases para
administrar un sistema informático, así como para diseñar y desarrollar software y sistemas (admi-
nistrativo, web, operativo); así como administrar redes informáticas.
Dichos objetivos son formalistas y mínimos, por lo cual dentro de cualquiera de los cursos del PNFI
deben incluirse los siguientes objetivos adicionales:
El estudiante conocerá el desarrollo histórico de los sistemas informáticos, lo que le llevará a
comprender la razón de ser y el funcionamiento general de los diversos componentes de los
sistemas informáticos actuales.
El estudiante conocerá las principales herramientas que ofrecen los sistemas informáticos libres
para su desarrollo, supervisión y administración.
La experiencia que se aborda a continuación, pues, se enmarca en la intersección de varios de estos
objetivos: de los formales, el diseño y desarrollo de software administrativo, web y operativo; de los
adicionales, el conocer las herramientas que ofrecen los sistemas operativos libres para el desarrollo,
supervisión y administración de sistemas informáticos.
Cabe mencionar que, por razones que claramente exceden el ámbito del presente trabajo, el autor
es un firme impulsor del software libre en lo personal y en lo profesional; esto lleva a que, más allá
de únicamente influir las decisiones de software utilizado, y posiblemente contraviniendo tradiciones
26
del área ingenieril, considera las dimensiones éticas y sociales de los principios que transmite a los
estudiantes — incluso en la elección de herramientas y métodos de colaboración.
4.2. Tecnológico
El desarrollo de software, a cualquier escala, siempre ha requerido de la coordinación de esfuerzos
entre desarrolladores, y resulta natural que herramientas con éste fin han sido desarrolladas desde
muy temprano en la historia de la computación. El modelo de desarrollo que se seguía hasta la
década de 1960 era muy diferente, pero conforme se popularizó el uso interactivo de las computado-
ras mediante los sistemas de acceso compartido y las terminales interactivas, esta necesidad se hizo
patente.
Los grandes proyectos de software libre iniciados a principios de los noventa (particularmente, los
sistemas operativos Linux, FreeBSD, NetBSD y OpenBSD, y una gran cantidad de aplicaciones)
iniciaron su desarrollo empleando CVS como punto modal.
La década de los noventa fue testigo de un crecimiento vertiginoso tanto en los proyectos de software
libre como en la capacidad de los equipos de cómputo y la universalidad del acceso a red (puede
argumentarse que el primero se debió a la conjunción de los otros dos). El modelo de uso de CVS
resultó insuficiente; carecía de capacidad para representar acciones como la eliminación o el cambio
de nombre de un archivo e imponía un alto costo a trabajar con archivos que no fueran de texto
plano.
Entre el 2000 y 2004 se desarrolló Subversion; éste sistema seguía el mismo modelo e interacción de
CVS, corrigiendo estas y otras debilidades [13].
Subversion creció en pocos años y se convirtió en una de las principales herramientas de desarrollo
en el ámbito del software libre.
Sin embargo, los SCVs mencionados operan de forma centralizada. Con el crecimiento de algunos
proyectos a escalas de desarrollo inimaginables para el momento (8,000 desarrolladores en 20 años,
15 millones de líneas de código y más de 37,000 archivos [14], fueron necesarios algunos cambios. En
2002 Linus Torvalds tomó la controvertida decisión de dejar CVS por un SCV distribuido y gratuito,
pero no libre — Un sistema en que no existiera una copia maestra o servidor central, sino que cada
copia del proyecto guarde toda la historia y estado, con sincronización entre ramas relacionadas.
Dado que no había un SCV libre considerado modelo distribuido, Torvalds adoptó BitKeeper.
Si bien la adopción de BitKeeper fue difícil y un punto recurrente de fricción con los puristas de
la libertad del software es indudable que impulsó la velocidad en el desarrollo de Linux, que había
decrecido por varios años [15]. BitKeeper ofrecía una licencia gratuita (no libre) para los desarrolla-
dores de software libre, siempre y cuando no se utilice para competir con BitKeeper mismo.
Para 2005, se suscitó una discusión acerca de si la funcionalidad que Andrew Tridgell1 estaba agre-
gando a Linux consistía una violación de la licencia [17], lo cual llevó a que Torvalds iniciara el
desarrollo de un SCV distribuido, al que llamó Git2 .
En el mismo periodo de tiempo se desarrollaron varios SCVs distribuidos libres, como Monotone,
1
Andrew "Tridge"Tridgell es un programador australiano, residente en Canberra. Nació en Sídney, Andrew es
el autor inicial del servidor de ficheros Samba, y co-inventor del algoritmo rsync. Es conocido por sus análisis de
protocolos propietarios y algoritmos, para hacer implementaciones libres compatibles con estos.
2
En slang británico, Git denomina a una mala persona; bromeando, Torvalds dice, ”soy un bastardo egoísta, por
lo que denomino a todos mis proyectos en referencia a mí mismo. Primero Linux, y ahora Git”. [16]
Darcs, Mercurial o Bazaar. Además de otras alternativas propietarias, como Team Foundation Ser-
ver de Microsoft. Sin embargo, Git ha resultado preferido sobre de los demás, y puede verse como
”lingua franca”, no únicamente entre los desarrolladores de software libre, sino en el mundo de la
programación en general; ha concentrado una clara mayoría de proyectos entre los SCVs distribuidos,
y atraer a una gran cantidad de proyectos que tenían incluso más de veinte años de historia en los
SCVs centralizados [18].
De forma paralela, desde fines de los noventa, aparecieron las forjas, sitios Web dedicados al hospe-
daje de proyectos de software libre, los cuales ofrecen recursos administrados como un espacio Web,
seguidor de fallos, listas de correo — y un SCV.
Según la información disponible en el sitio SourceForge hospeda al día de hoy más de 500,000 pro-
yectos y tiene ”varios millones” de usuarios registrados. Sin embargo, el flujo de interacción en que
está basado es poco amigable, lo cual lo hace apto únicamente para usuarios que ya son profesionales
del desarrollo de software.3
En 2008, y ya viendo el rápido crecimiento en la adopción de Git para proyectos de todo tamaño,
nació GitHub: Una forja con un flujo de trabajo simplificado, y fuertemente centrado en el modelo
de desarrollo de Git. Apenas tres años más tarde se transformó en la forja con mayor actividad en
el mundo del software libre [19]. A la fecha del presente texto, según la información disponible en el
sitio Web, hospeda más de 68 millones de proyectos.
Si bien GitHub se ha vuelto nodal para el desarrollo de cantidad de proyectos libres, causa una cierta
disonancia congnitiva que GitHub mismo no es libre: El software con el cual opera el sitio Web, y
que integra las diferentes herramientas que lo componen, es un desarrollo propietario.
Hay otros servicios, como GitLab, que ofrece un modelo de colaboración y una semántica perfec-
tamente mapeable con GitHub. Resultaría más coherente con los principios personales de uso y
promoción del software libre que se mencionaron al cierre de la sección anterior, el desarrollar la
experiencia que se presenta en GitLab o alguna plataforma similar; la decisión de hacerlo en GitHub
no fue tomada a la ligera, y se centra en la importancia que dicho sitio tiene para el desarrollo de
software en general. Hoy, prácticamente todos los proyectos libres de desarrollo están alojados en
GitHub (bien sea que provea su espacio principal de desarrollo o sea elegido como un almacenamiento
de respaldo o conveniencia).
4.3. La unión
El uso de un SCV como repositorio para la entrega de trabajos en clase no es una idea novedosa ni
es la primera vez que se documenta. Hay dos trabajos que apuntan en el mismo sentido que éste; la
principal diferencia tanto en el método como en los resultados, radica en la década que ha pasado
desde su publicación Reid [20] y Milentijevic [21]. Ambos documentan experiencias centradas en el
uso de un SCV centralizado.
El trabajo de Reid implementa un repositorio por estudiante, empleando CVS. Esto impone un lími-
te que resulta determinante: la parte fundamental de los SCV es la colaboración. Si cada estudiante
tiene un repositorio personal, realizar trabajos en equipo presenta la disyuntiva de si multiplicar los
commits (requerir que cada uno de los participantes deposite el mismo trabajo en su depósito perso-
3
Aunque la cantidad de proyectos hospedados en SourceForge es muy grande, incluso en sus años de mayor actividad
resultaba tan poco atractivo al uso casual que se ganó el mote de SourceForget, ”fuentes olvidadas”, por la gran cantidad
de proyectos inactivos hospedados.
nal) o indicar de alguna manera al docente que un sólo proyecto ampara a varios estudiantes. Reid
incluso menciona como uno de los puntos de tensión para el uso educativo de CVS a la ”necesidad
de prevenir que un estudiante vea el repositorio del otro”.
Milentijevic relata una experiencia sobre una base tecnológica que puede sustentarse ya sea en Sub-
version o en CVS, con un módulo que presente al conjunto de repositorios sobre una interfaz Web.
La separación en múltiples repositorios se efectúa a nivel proyecto: según avance la materia, cada
proyecto se presentará a los estudiantes, quienes tendrán que obtener un nuevo repositorio; el ciclo
de vida se separa en actividades de inicialización, realización de la tarea, y evaluación de la tarea;
la primera de estas etapas es la que más actividades demanda, lo cual habla del trabajo burocrático
adicional requerido para éste. Esto permite la flexibilidad de tareas con equipos de diferentes con-
formaciones, incluso dando la tarea de supervisor a uno de los estudiantes.
GitHub tiene con un sitio comunitario4 orientado al contacto entre docentes y estudiantes para dis-
cutir la tecnología en la educación. La opción está estructurada en la creación de organizaciones y su
operación dentro de salones GitHub; el flujo de trabajo que presenta es específico a esa configuración,
y no refleja la colaboración sobre un flujo de trabajo en el espacio profesional.
La mera existencia de la comunidad GitHub para la educación es suficiente para estar seguros de
que hay muchas otras experiencias en este sentido.
31
Este es mi primer archivo para control de versiones.
git status Muestre las diferencias entre el Working dir, la Staging Area y el repo.
1 $ git status
2 On branch master
3
4 No commits yet
5
6 Untracked files :
7 ( use " git add < file >... " to include in what will be committed )
8
9 README . md
10
11 nothing added to commit but untracked files present ( use " git add "
to track )
Vea los cambios con git status para corroborar cómo ha pasado a la Staging area y está listo
para pasarlo al repositorio.
1 $ git status
2 On branch master
3
4 No commits yet
5
6 Changes to be committed :
7 ( use " git rm -- cached < file >... " to unstage )
8
9 new file : README . md
Versión compacta.
Más información sobre la presentación de logs en: https://stackoverflow.com/questions/1441010/the-
shortest-possible-output-from-git-log-containing-author-and-date
1 $ git log
2 commit 1 f 8 6 6 9 2 3 1 a d c 3 8 0 d 9 6 2 6 1 f 9 1 4 9 5 0 1 8 b a 2 7 9 1 b 0 b 3 ( HEAD -> master )
3 Author : Jorge Dominguez Chavez < archivo@upta . edu . ve >
4 Date : Tue Nov 27 17:39:47 2018 +0000
5
6 README . md creado
7
8 $ git log -- oneline
9 1 f86692 ( HEAD -> master ) README . md creado
10 Versi ó n normal
11 Versi ó n compacta
Ejercicio Añada una línea nueva al archivo README.md con el texto que aparece a continua-
ción.
1 # Aprende lat í n
2
3 Lorem ipsum dolor sit amet , consectetur adipiscing elit , sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua .
Si el repositorio clonado es suyo podrá propagar los cambios del repositorio local al remoto.
En cambio, si no es suyo sólo podrá subir cambios al repositorio remoto si está autorizado a
ello.
Merge requests y Pull requests
Una forma de colaboración consiste en crear una copia del proyecto remoto. Esta
operación se conoce como Fork. Al hacer un fork crea un repositorio remoto de
nuestra propiedad, el cual es copia del repositorio original.
Para solicitar que nuestros cambios sean considerados para pasar al proyecto original
realice un Merge request en GitLab (Pull request en GitHub). Esto inicia un proceso
de revisión que finaliza con la aceptación, rechazo (o ignorando) de los cambios por
parte del propietario del repositorio remoto original.
Ejemplo Cree repo prueba en GitLab.
Clone repo remoto en la carpeta del usuario que esté usando git clone URL con el protocolo
SSH.
Actualmente, hay un detalle sobre la identificación del certificado que usa gitlabdoc.ual.es al
clonar con el protocolo mediante HTTPS. Si recibe este mensaje de error:
1 server certificate verification failed . CAfile : / etc / ssl / certs / ca -
certificates . crt CRLfile : none
puede salir del paso desactivando la verificación del certificado con este comando:
1 $ git config -- global http . sslverify false
Entrar al directorio del nuevo proyecto y Cree archivo README.md con el texto que aparece
a continuación
1 # Git
2
3 Git is a free and open source distributed version control system
designed to handle everything from small to very large projects
with speed and efficiency .
Commit inicial
git push Envie los cambios del repositorio local a un repo remoto
1 git push remoto ramaLocal
A continuación, especifique las ramas donde estarán autorizados a subir cambios (Desproteger ra-
mas).
En GitLab, en las propiedades del proyecto seleccione Settings \rightarrow Protected Branches
Por último, seleccione la rama e indique los desarrolladores que pueden realizar push
5.6. Recomendaciones
Estos son los principales comandos Git a utilizar al hora de trabajar en su repositorio. No obstante, se
presentan una serie de recomendaciones y trucos para gestionar su repositorio sin pierdas el trabajo
realizado:
Añada el archivo .gitignore al crear su repositorio local para no ensuciar el repositorio con
archivos innecesarios.
Ejecute commits con regularidad en su repositorio local (siempre y cuando el código esté limpio
de fallos).
Sólo integre su repositorio local con el remoto (haciedo un push) cuando el código esté realmente
listo para compartir y libre de errores.
Ejercicios selectos
A.- Ejercicio: Haz un fork del repositorio de DECIDE para trabajar en el. En esta clase, vamos a
introducir una nueva característica dentro del código de Decide. Concretamente, se pide que
modifiquemos el booth para que muestre exclusivamente voting.name a mayor tamaño de le-
tras. Para esto, crearemos una nueva rama con nombre improveBooth.
En la nueva rama creada vamos a realizar las modificaciones necesarias dentro del fichero
decide/decide/booth/templates/booth/booth.html y añade esa información en el readme.md
Haz un commit de estos cambios.
Corrige el último commit para que el nombre de la web sea Decide-10-11 en lugar de Decide
Subimos esta rama al repositorio en Github.
Haz un merge de la rama improveBooth en master Asegúrate que tu compañero ha clonado
el repositorio según el Ejercicio (b) antes de seguir y da permiso de escritura a tu compañero.
Sube los cambios de la rama master al repositorio de Github. Consulta como ha quedado el log
del repositorio y añádelo al README Vuelve a subir los cambios del README al repositorio.
43
Conclusiones
La plataforma GitHub (u otra similar) aplicada a la docencia no debe ser considerada como un
mero servicio de alojamiento de repositorios de Git en la Web con funcionalidades extra. En la
experiencia docente descrita en este trabajo hemos comenzado a vislumbrar su potencial papel como
herramienta de aprendizaje y de gestión de la enseñanza. Es necesario profundizar en el análisis
de esta plataforma como herramienta docente para dimensionar adecuadamente su papel. Futuras
investigaciones deben abordar aspectos cuantitativos y cualitativos relacionados, por ejemplo, con la
satisfacción de alumnos y profesores, los resultados académicos, y la evolución de la carga docente.
En cualquier caso, la aparición de plataformas como GitHub plantea nuevos retos a la docencia como,
por ejemplo, su integración con las plataformas educativas existentes, el desarrollo de herramientas
de apoyo orientadas a la gestión educativa, la gestión de nuevos retos relacionados con la propiedad
intelectual y la ética profesional, y el desarrollo de buenas prácticas para un correcto aprovechamiento
de esta nueva generación de herramientas de docencia.
44
Bibliografía
[1] Andrew Meneely y Laurie Williams., On preparing students for distributed software
development with a synchronous, collaborative development platform. En 40th ACM technical
symposium on Computer science education, página 529, New York, New York, USA, Marzo
2009. ACM Request Permissions, ISBN 9781605581835..
[2] Michael Cochez, Ville Isomöttönen, Ville Tirronen y Jonne Itkonen., How Do
Computer Science Students Use Distributed Version Control Systems? En Vadim Ermolayev,
HeinrichCayr, Mykola Nikitchenko, Aleksander Spivakovsky y Grygoriy Zholtkevych (editores):
Metadata and Semantic Research, páginas 210–228. Springer International Publishing, 2013,
ISBN 978-3-319-03997-8
[3] Ken T N Hartness., Eclipse and CVS for group projects. Journal of Computing Sciences in
Colleges, 21(4):217–222, Abril 2006
[4] Oren Laadan, Jason Nieh y Nicolas Viennot., Teaching operating systems using virtual
appliances and distributed version control. En the 41st ACM technical symposium, página 480,
New York, New York, USA, 2010. ACM Press, ISBN 9781450300063
[5] Ville Isomöttönen y Michael Cochez., Challenges and Confusions in Learning Version
Control with Git. En Information and Communication Technologies in Education, Research,
and Industrial Applications, páginas 178–193. Springer International Publishing, Junio 2014,
ISBN 978-3-319-13205-1.
[6] Karen L Reid y Gregory V Wilson., Learning by doing: introducing version control as
a way to manage student assignments. SIGCSE, páginas 272–276, 2005.
[7] Ivan Milentijevic, Vladimir Ciric y Oliver Vojinovic., Version control in project-
based learning. Computers & Education, 50(4):1331–1338, Mayo 2008
[8] GitHub. Press, 2015., https://github.com/about/press.
[9] Marisa Whitaker. GitHub co-founder Chris Wanstrath shares his story, Abril
2014., http://magazine.uc.edu/content/magazine/favorites/webonly/wanstrath.html.
[10] Zhiguang Xu., Using Git to Manage Capstone Software Projects . En 7th International
Multi-Conference on Computing in the Global Information Technology, 2012.
[11] Laura Dabbish, Colleen Stuart, Jason Tsay y Jim Herbsleb., Social coding in Git-
Hub. En ACM 2012 conference on Computer Supported Cooperative Work, páginas 1277–1286,
New York, New York, USA, 2012. ACM Press, ISBN 9781450310864.
45
[12] Paul Sawers., GitHub Wants Schools to Collaborate Around code, Febrero 2014.
http://thenextweb.com/insider/2014/02/11/github-wants-schools-collaborate-code/.
[13] Collins-Sussman, B., Fitzpatrick, B., & Pilato, M. (2004)., Version control with sub-
version. O’Reilly Media, Inc.
[14] Brockmeier, K. (2012)., Counting Contributions: Who Wrote Linux 3.2? Linux.com, News
for the Open Source Professional. https://www.linux.com/learn/counting-contributions-who-
wrote-linux-32
[15] Henson, V., & Garzik, J. (2002)., Bitkeeper for kernel developers. In Ottawa Linux Sym-
posium (p. 197).
[16] McMillan, R. (2005)., After controversy, Torvalds begins work on “git”. IDG News Service.
https://www.pcworld.idg.com.au/article/129776/after_controversy_torvalds_begins_work_git_/
[17] Barr, J. (2005)., Bitkeeper and Linux: The end of the road? Linux.com, News for the Open
Source Professional. Recuperado de https://www.linux.com/news/bitkeeper-and-linux-end-road
[18] de Alwis, B., Sillito, J. (2009., Why are software projects moving from centralized to decen-
tralized version control systems?. IEn Proceedings of the 2009 ICSE Workshop on cooperative
and human aspects on software engineering (pp. 36-39). IEEE Computer Society.
[19] Finley, K. (2011), GitHub has surpassed Sourceforge and Google Code in popularity. ReadW-
rite.com. http://readwrite.com/2011/06/02/github-has-passed-sourceforge/
[20] Reid, K. L., & Wilson, G. V. (2005)., Learning by doing: introducing version control as
a way to manage student assignments. ACM SIGCSE Bulletin (Vol. 37, No. 1, pp.272-276).
ACM.
[21] Milentijevic, I., Ciric, V., & Vojinovic, O. (2008)., Version control in project-based
learning. Computers & Education, 50(4), 1331-1338.
Acerca del autor
Graduado en Física, Facultad de Ciencias, Universidad
Nacional Autónoma de México (UNAM), Doctor en
Ciencias de la Computación, Instituto de Investiga-
ciones en Matemáticas Aplicadas y Sistemas (IIMAS)
UNAM. Especialista en Economía Matemática, Centro
de Investigación y Docencia Económica, CIDE, México.
Cursante del Doctorado en Minería de Datos, Modelos
y Sistemas Expertos por la Universidad de Illinois en
Urbana-Champaings (USA).
Ha sido profesor en la Facultad de Química y en la Facultad
de Ingeniería, UNAM. Fue profesor en el Departamento de
Ciencias Básicas, Universidad de Las Américas en Cholula,
(UDLAP), Puebla, México y, durante seis años, profesor
visitante en la Universidade Federal de Rio Grande do
Sul (Brasil), profesor y jefe de sistemas postgrados de
agronomía y veterinaria, Universidad Central de Venezuela
(UCV), actualmente es profesor del Departamento de
informática y del Departamento de Postgrado, Universidad
Politécnica Territorial de Aragua (UPT Aragua), Venezue-
la.
Expositor y conferencista a nivel nacional e internacional.
Es asesor en mejora de procesos, gestión de proyectos,
desarrollo de software corporativo en los sectores de View publication stats