- Información general
- ¿Qué es git y para qué sirve?
- ¿Qué es github y para qué sirve?
- Comandos básicos de git
- git init
- git add
- git status
- git commit
- git push
- git remote
- git pull
- git clone
- Resumen del uso de git en un proyecto
- Introducción a branching
- git branch
- git checkout
- git merge
- Introducción a forking en GitHub
- Fuentes
Git es una herramienta de control de versiones diseñado por Linus Torvalds. Su propósito es llevar registro de los cambios en archivos de un proyecto, incluyendo el coordinar trabajo de varias personas en archivos compartidos en un repositorio. Busca hacer todo esto con eficiencia, confiabilidad y compatibilidad del mantenimiento de versiones de aplicaciones cuando tienen un gran número de archivos de código fuente.
GitHub es una plataforma de gestión y organización de proyectos basada en la nube que incorpora las funciones de control de versiones de Git. En la actualidad aloja más de 100 millones de repositorios, la mayoría de los cuales son proyectos de código abierto.
Para poder empezar a utilizar git en un proyecto se utiliza el comando git init.
$ git init
Esto crea un subdirectorio en el directorio del proyecto llamado .git
que contiene los archivos del repositorio necesarios.
Para poder agregar archivos para ser rastreados por git se utiliza el comando git add.
Si se desea agregar el archivo hello.c
el comando sería:
$ git add hello.c
Si se desea agregar todos los archivos que estan en el directorio el comando sería:
$ git add .
o
$ git add -A
Si se desea ignorar algún archivo se debe agregar a un archivo llamado .gitignore
. Todos los archivos o directorios cuyo nombre esté escrito en este archivo será ignorado por git.
Si se desea ver el estado de los archivos que git está rastreando se utiliza el comando git status:
$ git status
Una vez que ya se agregaron los cambios deseados para poder hacer un comit se utiliza el comando git commit:
$ git commit -m "comentario"
Una recomendación es que el comentario que se ponga en el commit sea algo significativo, lo cual ayude a comprender qué fue lo que se agregó en ese momento.
Para poder subir el o los últimos commits al repositorio se utiliza el comando git push:
$ git push
En caso de que sea el primer commit puede que sea necesario usar
$ git push -u origin master
Para poder usar un repositorio en internet se usa el comando git remote:
$ git remote add origin url_del_repositorio
Esto le dice a git que los commits que se hagan serán replicados en el repositorio que está almacenado en url_del_repositorio
.
Para obtener la versión actualizada del proyecto en la rama principal se usa el comando git pull:
$ git pull
Para poder copiar un repositorio existente se usa el comando git clone:
$ git clone url_del_repositorio
$ cd nombre_del_proyecto
Se hace el cd
para cambiar el directorio en el que uno está trabajando ya que el git clone
crea un directorio con el proyecto dentro del directorio en el que uno hizo el git clone
.
- Moverse al directorio del proyecto que se desea llevar el control de versiones y correr el comando
git init
. Esto se hace sólo una vez. - Crear un repositorio en github.com y copiar el url del repositorio.
- Correr el comando
git remote add origin url_del_repositorio_en_github
. Esto sólo se hace una vez. - Para poder agregar los cambios en el proyecto se ejecuta el comando
git add .
. - Para confirmar los cambios que se desean subir al repositorio remoto se corre el comando
git commit -m "comentario que se desea agregar"
. - Para subir los cambios se ejecuta el comando
git push
. Si es la primera vez que se ejecuta este comando se debe ejecutar de la formagit push -u origin master
.
Cada vez que se deseen subir cambios al repositorio remoto se repiten los pasos del 4 al 5.
Si uno quiere trabajar en alguna nueva opción de un proyecto o arreglar un error en el mismo y no se desea afectar la rama principal hasta que esté completo en lo que se trabajará se puede hacer branching. Cuando se hace branching uno crea una rama paralela a la rama principal, en la que uno puede trabajar y al completar las cosas combinar ambas ramas.
El trabajo de branching normalmente consiste en:
- Crear una nueva rama para poder trabajar sin hacer cambios directos en
master
. - Moverse a la rama en la que se trabajará.
- Hacer el trabajo necesario, haciendo commits y pushs.
- Una vez que se termino de trabajar en la rama uno puede regresar a
master
y hacer un merge con la rama en la que se trabajó. - Si ya no es necesaria, eliminar la rama en la que se trabajó.
El comando git branch sirve para unas cuantas cosas:
$ git branch
El comando que está arriba lista las ramas existentes en el proyecto.
$ git branch nueva_rama
El comando de arriba crea una nueva rama en el proyecto llamada nueva_rama
.
$ git branch -d otra_rama
Con el comando de arriba se elimina la rama llamada otra_rama
.
Si uno desea cambiarse de rama uno utiliza el comando git checkout:
$ git checkout nombre_de_la_rama
Uno también puede moverse a una rama nueva:
$ git checkout -b nueva_rama
El comando de arriba es lo mismo a que se haga:
$ git branch nueva_rama
$ git checkout nueva_rama
Una vez que uno ya está listo para incluir los cambios que uno hizo en una rama a otra uno utiliza el comando git merge:
$ git checkout master
$ git merge nueva_rama
En el comando anterior lo que se hizo fue regresar a la rama principal master
e incluir los cambios que se hicieron en nueva_rama
.
Si en algún momento usted quisiera contribuir a un proyecto de código abierto en GitHub uno debe hacer un fork del proyecto. Esto es crear una copia de proyecto en su perfil, en el cual puede trabajar y después hacer un pull request para que el dueño del proyecto original revise los cambios que usted ha hecho y ver si los une al proyecto principal.
Los pasos para esto son:
Cuando usted está en la página del proyecto al que desea contribuir debe presionar el botón que dice "fork". Esto creara una copia del repositorio en su perfíl de GitHub. Una vez que esté creada esta copia usted va a esa copia y utiliza git clone para tener una copia en su computadora.
$ git clone url_de_la_copia_del_repositorio_en_su_perfil
Cloning into 'nombre_del_proyecto'...
...
$ cd nombre_del_proyecto
Una vez dentro del directorio del proyecto se debe configurar un remoto que apunte hacia el proyecto original para que uno pueda sincronizar los ultimos cambios a la copia local. Para eso uno necesita el url del proyecto original, el cual lo pueden encontrar bajo el nombre de la copia que está en su perfil.
$ git remote add upstream url_del_proyecto_original
Esto significa que el proyecto tiene dos repositorios remotos:
orirgin
que apunta al fork que usted creo del proyecto al cual usted puede escribir y leer.upstream
que apunta al repositorio del proyecto original, del cual sólo podemos leer.
Es en este punto en el que usted puede hacer la contribución que deseaba hacer, como por ejemplo arreglar un error. Muchos proyectos tienen un archivo README
o INSTALL
para saber cómo hacer que su copia del proyecto funcione. También es posible que el proyecto tenga un archivo en el que expliquen algunas reglas para poder contribuir.
Una vez que el proyecto ya funciona en su máquina ya puede empezar a trabajar en el. Para evitar problemas lo mejor es trabajar con branches. Como ejemplo en el README
del proyecto que usted va a contribuir dice que las ramas deben tener el formato de "error/nombre_del_error_a_reparar"
si lo que usted va a hacer es reparar un error.
$ git checkout master
$ git pull upstream master && git push origin master
$ git checkout -b error/actualizacion_del_readme
Aquí uno se asegura de estar en la rama master y después se hace un pull a upstream para sincronizar la copia local al proyecto principal y se hace un push a origin para sincronizar esos cambios a su copia del proyecto. Por último usted crea la rama en la que trabajará y se mueve a ella.
Una vez que completó el trabajo que buscaba hacer debe hacer un push de la rama en la que trabajó a origin
su copia del proyecto en GitHub.
$ git push -u origin error/actualizacion_del_readme
Esto creará una nueva rama en su proyecto en GitHub.
Una vez que hizo el push debe ir a la página de su copia del proyecto en GitHub y va a ver que en la parte superior de la página estará la rama que usted creó con la opción de "Comparar y pull request". Presione ese botón.
Cuando lo presione lo llevará a una página en la que le puede poner nombre a su pull request y un comentario. Antes de presionar el botón de crear pull request asegurese que en la parte dónde dice "base repository" y "base" estén el proyecto al que usted está contribuyendo y la rama correcta y que dónde dice "head repository" y "compare" estén su copia y la rama que creó.
Una vez hecho esto ya sólo falta que los administradores del proyecto original acepten o no su pull request. Es posible que le pidan que arregle algún merge conflict o algo así para poder aceptarla en caso de que haya un error.