¿Qué es Git?
Git es un sistema de control de versiones distribuido. Git fue diseñado y desarrollado por Linus Torvalds para el desarrollo del kernel de Linux. Git proporciona soporte para el desarrollo distribuido no lineal, lo que permite que múltiples colaboradores trabajen en un proyecto simultáneamente. Git es el sistema de gestión de código fuente y control de versiones distribuido más popular. Este tutorial lo guiará a través de los conceptos básicos para comenzar a utilizar Git, desde la instalación del software hasta el uso de comandos básicos en repositorios locales y remotos (repos).
Configura Git
Después de instalar Git, configúrelo por primera vez con git config
, una herramienta integrada que obtiene y establece variables de configuración. Estas variables de configuración se encuentran en tres lugares diferentes en un sistema GNU / Linux:
/etc/gitconfig
– almacena la información de configuración para todos los usuarios del sistema y sus respectivos repositorios.~/.gitconfig
– almacena archivos de configuración específicos del usuario en el sistema..git/config
– este es el archivo de configuración de su repositorio de trabajo actual.
Para un sistema Windows, el archivo .gitconfig
esta localizado en el directorio $HOME
del perfil del usuario. La ruta completa es C:\Document and Settings\$USER
oC:\Users\$USER
git config --list
Si su nombre y correo electrónico no aparecen en la salida, use los siguientes comandos para configurarlos manualmente, reemplazando examplename
y user@example.com
:
git config --global user.name examplename
git config --global user.email user@example.com
Configure su editor de texto predeterminado, reemplazando el editor-name
con el nombre de editor que desee:
git config --global core.editor editor-name
El output de git config --list
debe mostrar eco la información que ingresó:
$ git config --list
user.name=exampleuser
user.email=user@email.com
core.editor=editor-name
Usa Git con un repositorio local
Un repositorio, o repo, es una colección de archivos, carpetas y el historial de sus cambios. Los cambios se rastrean a través de commits, que son como snapshots de un archivo en varios puntos del historial del archivo. Estas commits no son automáticas, debe realizar manualmente un commit después de cada serie de cambios de archivo. Los commits le permiten referirse o volver a un lugar en la línea de tiempo del archivo si hay bugs o errores en su código.
Si tiene un proyecto nuevo o existente y desea comenzar a usar Git para realizar un seguimiento de sus cambios, ejecute git init
desde el directorio del proyecto existente:
git init
git init
crea un nuevo subdirectorio .git
en el directorio actual. Aquí es donde Git almacena tus configuraciones. El comando git add
le dice a Git que agregue un archivo al repositorio y rastree los cambios de ese archivo:
git add filename
Una vez que haya agregado el archivo, realice un commit y deje un mensaje en el mismo commit. Los mensajes del commit sirven como un recordatorio de los cambios realizados en un archivo:
git commit -m "Este es el primer commit del proyecto y este mensaje sirve para documentar lo que se hizo en otras versiones"
Nota
Es una buena práctica proporcionar mensajes de commit / confirmación claros y descriptivos para cada etapa de commit, ya que esto ayuda a los colaboradores a comprender lo que abarca una confirmación.
Puede haber archivos o carpetas en el directorio de su proyecto que no desea incluir en su repositorio Git. Puedes incluir estos archivos en un archivo .gitignore
, y Git los ignorará. Un archivo .gitignore
de muestra podría tener el siguiente aspecto:
- .gitignore
-
1 2 3
.DS_Store *.zip __doNotInclude__/
Comandos básicos de Git
Esta tabla enumera los comandos básicos, una descripción y un ejemplo del comando en uso:
Command | Description | Example |
---|---|---|
git add |
Agrega un archivo al repositorio. | git add filename |
git rm |
Remueve un archivo del repositorio. | git rm filename |
git mv |
Mueva o cambie el nombre de un archivo, directorio o symlink | git mv file_from file_to |
git branch |
Listar todas las ramas locales y remotas. | git branch branchname |
git commit |
Commit todos los objetos en escena. Opcionalmente, puede agregar un mensaje con la marca -m. | git commit -m "updates" |
git pull |
Descarga todos los cambios de el repositorio remoto y mezclalos / merge en un archivo especifico del repo. | git pull repo refspec |
git push |
Publicar los cambios al repositorio remoto. | git push repo |
Ramas / Branches
Las ramas / branches se utilizan para editar archivos sin alterar las partes de trabajo de un proyecto. La rama principal se denomina normalmente master
y generalmente se reserva para código de trabajo limpio. Al realizar cambios en su código, es habitual crear una nueva rama / branch y asignarle un nombre después de que se solucione el problema o se implemente la función. Debido a que Git realiza un seguimiento de los cambios en los archivos, puede saltar de una rama a otra sin sobrescribir o interferir con otras ramas en el repositorio.
Las opciones básicas usadas con el comando git branch
son:
Option | Description |
---|---|
-r | Lista de las ramas remotas |
-a | Mostrar tanto ramas locales como remotas |
-m | Renombras una rama antigua |
-d | Borrar una rama |
-r -d | Borrar una rama remota |
Ejemplo de uso
Considere una aplicación con una sola rama master
. El autor de la aplicación quiere desarrollar una nueva función de búsqueda. Agregarían una nueva rama de características:
git branch new-search-feature
Luego, cambiarían a esa rama usando el comando checkout
:
git checkout new-search-feature
Ahora pueden desarrollar y confirmar sus cambios de forma segura en esta rama de características sin alterar el código de trabajo de la rama maestra (master
). En cualquier momento podrían volver a la rama master
:
git checkout master
Un atajo para crear una rama y cambiar a esa rama es usar el indicador -b
con el comando checkout
:
git checkout -b new-search-feature
Una vez que se finaliza la nueva función de búsqueda, el autor de la aplicación puede combinar la rama new-search-feature
en la rama principal:
git checkout master
git merge new-search-feature
Ahora la rama master
tiene al nueva caracteristica de búsqueda.
Usa Git con un repositorio remoto
GitHub, GitLab, y Bitbucket ofrecen formas de almacenar los repositorios de Git de forma remota y facilitar la colaboración. Muchos de estos servicios también incluyen una serie de otras características que son vitales para el desarrollo de contenido, incluidas las pull requests, los procesos de integración continua / entrega continua (CI / CD), wikis y webhooks. Si prefieres usar una solución auto hospedada, GitLab and Gogs ofrecen versiones locales y gratuitas de su software que se pueden administrar fácilmente en un servidor.
Esta sección proporciona información básica sobre la navegación de repositorios remotos de Git.
Para copiar todos los archivos de un repositorio remoto a su sistema local, use git clone
seguido de la URL del repositorio remoto:
git clone https://github.com/linode/docs.git
Por lo general, puede encontrar la URL de un repositorio remoto haciendo clic en los botones Clonar o Descargar de la interfaz de usuario de un repositorio remoto.
Para verificar el estado de los archivos dentro de la rama actual de su repositorio, use status
:
git status
La salida del comando de status
le indicará si se ha modificado algún archivo rastreado.
Use remote
para ver que servidores remotos estan configurados:
git remote
El comando remote
mostrará los nombres cortos de sus repositorios remotos. Si su repositorio fue clonado, verá un repositorio llamado origin
. El origen del nombre predeterminado proviene del repositorio clonado. Para ver más información sobre los repositorios remotos, use el comando:
git remote -v
Comandos de repositorio remoto de Git
A continuación se muestran algunos comandos básicos para trabajar con repositorios remotos:
COMANDO | DESCRIPCION |
---|---|
git remote add [remote-name] [url] |
Agrega un nuevo repositorio remoto |
git fetch [repository [refspec]] |
Reúna todos los datos de un proyecto remoto que aún no tiene. |
git pull |
|
git push [remote-name] [branch-name] |
Mueva sus datos desde su sucursal a su servidor. |
git remote show [remote-name] |
Muestra información sobre el remote que especificaste. |
git remote rename [old-name] [new-name] |
Renombra un remoto |
git remote rm [name] |
Remuve el remoto que especificaste. |
Ejemplos de uso.
Continuando con el ejemplo presentado en la sección anterior, digamos que alguien quiere agregar una funcionalidad a una aplicación en un repositorio remoto. El primer paso sería dar fork a ese repositorio. Esta función, como la clonación, suele estar disponible en la interfaz de usuario del software de repositorio remoto. Forking crea un repositorio remoto, que es una copia del repositorio bifurcado, en la propia cuenta del usuario. Desde su usuario, el usuario clonaría la bifurcación localmente utilizando el comando de clonación descrito anteriormente.
git clone https://github.com/username/Spoon-Knife.git
Una vez que se clona el repositorio, el usuario creará una rama para la nueva función utilizando el comando branch
o checkout -b
git checkout -b new-special-feature
Una vez realizada la rama, el usuario realizará las actualizaciones o cambios necesarios en el código base y los confirmará.
git commit -m "Una nueva caracteristica agregada"
Con la confirmación por etapas, el usuario enviaría sus cambios a su fork del repositorio remoto:
git push origin new-special-feature
El resultado del comando push es que ahora existe la nueva rama de características en el fork del usuario. Para contribuir con esos cambios al repositorio inicial, conocido como el repositorio anterior, el usuario ahora debe enviar una Pull Request (PR). Un PR es una característica que la mayoría del software de repositorio remoto tiene que le permite al usuario contribuir de manera segura un commit, o una serie de compromisos, a un repositorio ascendente. Esto se logra al navegar a través de la interfaz de usuario a la página de Pull Requests, seleccionando la rama master del repositorio ascendente como destino y seleccionando la rama de la característica del repositorio de origen como la fuente. Se creará una solicitud de extracción y el código se revisará antes de fusionarse en la rama maestra del repositorio ascendente.
Si bien la creación de PR es un estándar saludable dentro de la comunidad de desarrollo, no es la única forma de contribuir a un repositorio remoto. Puede simplemente enviar sus confirmaciones directamente al repositorio anterior:
git push my-repo new-special-feature
La desventaja de este enfoque es que no hay ninguna opción para mantener los compromisos presionados para su revisión. Sin embargo, si usted es el único contribuyente a un proyecto, obviamente no habrá nadie para revisar sus cambios, por lo que no es necesario crear una bifurcación y contribuir con relaciones públicas.
Si está colaborando con otro desarrollador, es necesario poder recuperar su trabajo. Para hacerlo, ejecute el comando pull
:
git checkout new-special-feature
git pull
Git tomará el nuevo código de la rama del repositorio remoto elegido y lo combinará con su rama local.