Guía git

← Registro de usuarios - Django Configurar SSH para github →
Tabla de contenido 📄

Configuración inicial

Para comenzar a personalizar aspectos básicos y avanzados de Git debemos saber del funcionamiento y cómo modificar su configuración predeterminada. Una herramienta inherente de Git llamada git config permite establecer y obtener variables de configuración que controlan aspectos del funcionamiento y la apariencia de Git. Estas variables se pueden almacenar en tres lugares diferentes:

[path]/etc/gitconfig
Contiene los valores aplicados a cada usuario en el sistema y todos sus repositorios (si pasa la opción --system a git config, lee y escribe desde este archivo de configuración específicamente. Debido a que se trata de un archivo de configuración del sistema, se necesitaría información administrativa o privilegios de superusuario para realizar cambios.
~/.gitconfig
~/.config/git/config
Contiene valores específicos personalmente para el usuario. Puedes hacer que Git lea y escriba en este archivo específicamente al pasar la opción --global a git config, y esto afecta todos los repositorios con los que trabaja en el sistema del usuario.
.git/config
Específico para ese único repositorio. Puede obligar a Git a leer y escribir en este archivo pasando la opción --local a git config, pero de hecho es la predeterminada. Como es de esperar, necesita estar ubicado en algún lugar de un repositorio de Git para que esta opción funcione correctamente.

Nota
Cada nivel anula los valores del nivel anterior, por lo que los valores en .git/config superan a los de [path]/etc/gitconfig.

Puede ver todas sus configuraciones y de dónde provienen indicando el siguiente comando:

  • 1
    
    git config --list --show-origin
    
  • img - all config

Configuración de identidad

Después de instalar Git, los usuarios deben establecer inmediatamente el nombre de usuario y la dirección de correo eléctronico, que se usarán para cada confirmación (commit) de Git.

Configurar el nombre de usuario

1
git config --global user.name "nombre de usuario" 

Cambiar "nombre de usuario" por su nombre de usuario.

Configurar el email para el usuario

1
git config --global user.email "usuario@correo.com"

Cambiar "usuario@correo.com" por su correo electrónico de usuario.

De todas formas, cuando usamos git y no tenemos configurado el usuario, nos mostrará un mensaje que debemos identificarnos para realizar operaciones como una confirmación (commit). Para comprender ver la siguiente demostración:

Configurar VSCode como el editor por defecto para git

1
git config --global core.editor "code --wait"

La opción --wait es para que la terminal se quede esperando hasta que cerremos el editor de texto.

Ver el archivo de configuración con el editor por defecto:

1
git config --global -e

img - open config with vscode

Configurar colores

Git puede marcar con colores los resultados que se muestran en la terminal, ayudándote así a leerlos más fácilmente. Los siguientes parámetros se pueden modificar:

color.ui

Git coloreará automáticamente la mayor parte de los resultados que muestra. Podemos ajustar con precisión cada una de las partes a colorear; pero si deseas activar de un golpe todos los colores por defecto, sólo debemos cambiar a true el parámetro ui.color.

1
git config --global color.ui true

Para desactivar totalmente los colores:

1
git config --global color.ui false

color.*

Cuando se requiere ajustar específicamente, comando a comando, donde colorear y cómo colorear, podemos emplear los ajustes particulares de color. Cada uno de ellos se puede fijar en true, false o always:

  • color.branch
  • color.diff
  • color.interactive
  • color.status

Si no quieres usar el coloreado en el comando status por ejemplo, puedes indicar:

1
git config --global color.status false

Además, cada uno de los comandos tiene parámetros adicionales para asignar colores a partes específicas, por si quieres precisar aún más.

Podemos ajustar a cualquiera de los siguientes colores:

black
red
green
yellow
blue
magenta
cyan
white

También se pueden aplicar atributos como:

bold
(negrita)
dim
(tenue)
ul
(subrayado)
blink
(parpadeante)
reverse
(inverso)

Por ejemplo, para mostrar la meta-información del comando diff con letra color cian y con caracteres en negrita, podemos indicar:

  • 1
    
    git config --global color.diff.meta "cyan bold"
    
  • img - color config

Otro ejemplo para cambiar los colores del comando status para la salida de:

color.status.changed
Cuando un archivo a cambiado de estado
color.status.untracked
Cuando un archivo no es seguido por git
color.status.added
Cuando un archivo es agregado al stage area
  • 1
    
    git config --global color.status.changed "white red bold"
    
    1
    
    git config --global color.status.untracked "white magenta bold"
    
    1
    
    git config --global color.status.added "white green bold"
    
  • img - color status git

Configurar ALIAS

La herramienta git config también nos permite establecer alias que nos sirven principalmente para ahorrarnos un poco la escritura de comandos más largos. Aquí te dejo algunos ejemplos:

  • Para el comando git branch:

    1
    
    git config --global alias.br branch
    

    Para el comando git checkout:

    1
    
    git config --global alias.co checkout
    

    Para el comando git commit:

    1
    
    git config --global alias.ci commit 
    

    Para el comando git status:

    1
    
    git config --global alias.st status
    

    Para el comando git remote:

    1
    
    git config --global alias.rt remote
    
  • img - resultado comando

Incializar un proyecto con git

Para iniciar un proyecto en Git, primero debemos situarnos en el directorio donde tendrás tu proyecto o podemos crear en este caso una carpeta y entrar en ella y partir desde cero. Si estás Windows, Mac o Linux podemos crear una carpeta con el comando mkdir y luego entrar en ella con el comando cd.

Crea una carpeta para contener el proyecto y accedemos a esa carpeta:

1
mkdir git-tutorial && cd git-tutorial

Inicializar un repositorio en local con git en el directorio actual:

1
git init

Crear un nuevo repositorio en local con el nombre especificado (crea la carpeta y dentro inicia el repositorio local):

1
git init tutorial-git

Contenido de la carpeta .git

A continuación, tenemos el árbol de directorios y archivos dentro de la carpeta o directorio oculto .git y veremos comentado cada aspecto importante:

.git
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
📂 .git
├── 📂 branches
├── ⚙️ config # contiene las opciones de configuración de este repositorio
├── 📄 description
├── 📄 HEAD # contiene la referencia del commit a partir del cual se trabaja
├── 📂 hooks # contiene los script que se ejecutan en un determinado momento
│   ├── 📄 applypatch-msg.sample
│   ├── 📄 commit-msg.sample
│   ├── 📄 fsmonitor-watchman.sample
│   ├── 📄 post-update.sample
│   ├── 📄 pre-applypatch.sample
│   ├── 📄 pre-commit.sample
│   ├── 📄 pre-merge-commit.sample
│   ├── 📄 pre-push.sample
│   ├── 📄 pre-rebase.sample
│   ├── 📄 pre-receive.sample
│   ├── 📄 prepare-commit-msg.sample
│   ├── 📄 push-to-checkout.sample
│   └── 📄 update.sample
├── 📄 index # el área "staging" tiene la información de los archivos que se incluirán en el "commit"
├── 📂 info # relativamente sin importancia contiene el archivo exclude
│   └── 📄 exclude # se puede usar para ignorar archivos en este proyecto (no está versionado como .gitignore)
├── 📂 logs # contiene el historial de las distintas ramas (interactivo con el comando log, reflog)
│   ├── 📄 HEAD
│   └── 📂 refs
│       └── 📂 heads
│           └── 📄 main
├── 📂 objects # el depósito interno de objetos, indexados por SHAs
│   ├── 📄 info
│   └── 📄 pack
└── 📂 refs # La copia maestra de todos los refs que existen en el repositorio, ya sean stashes, tags, etc.
    ├── 📂 heads
    │   └── 📄 main
    └── 📂 tags

Visualización de los cambios

status

El comando status muestra las rutas que tienen diferencias entre el archivo de índice (index) y la confirmación (HEAD) actual, las rutas que tienen diferencias entre el árbol de trabajo y el archivo de índice, y las rutas en el árbol de trabajo que no son rastreadas por Git (y no son ignoradas con archivos .gitinore).

Ver estado de los archivos:

1
git status

img - git status

status --short

Si bien la salida de estado de git es bastante completa, también es bastante prolija. Git también tiene un indicador corto de estado para ver sus cambios de una manera más compacta. Si ejecuta git status -s o git status --short en resumen, obtiene una salida mucho más simplificada del comando:

1
git status -s

img - git status short

Agregar archivos a preparación

El staging o área de preparación es un lugar donde se guardan temporalmente los cambios, para luego en caso de ser confirmados serán llevados definitivamente al repositorio. Sabemos que el repositorio es el lugar donde se guardan todos los registros de los cambios realizados a los archivos.

El área del staging se puede considerar como el limbo donde los archivos están esperando por ser enviados al repositorio o ser regresado a la carpeta del proyecto.

img - git staging Como funciona el staging

Agregar un archivo al stage area:

1
git add archivo.txt

Agregar más de un archivo al stage area:

1
git add archivo1.txt archivo2.txt

Agregar todos los archivos que terminan con la misma extensión:

1
git add *.txt

Agregar todos los archivos al stage area:

1
git add .

Agregar archivos de forma interactiva:

1
git add -i

Eliminar archivos seguidos por git

Eliminar un archivo primera forma:

1
2
3
rm archivo.txt
git add archivo.txt
git commit -m 'archivo eliminado'

Eliminar un archivo segunda forma (recomendado):

1
2
git rm archivo.txt
git commit -m 'archivo eliminado'

Bajar y recuperar archivos del stage area

Sacar un archivo del stage area:

1
git rm --cached archivo.txt 

Recuperar un archivo, descartando los cambios:

1
git restore archivo.txt

Renombrar archivos

Cuando renombramos un archivo en nuestra copia de trabajo directamente, GIT considera esta acción y para aclararle a GIT de que se trata de un renombramiento consta de dos operaciones:

  1. borrar los archivos con el nombre antiguo y nuevo.
  2. añadir el archivo recién nombrado al área de preparación (stage area - git add)

Primera forma:

Veamos la primera forma de cambiar el nombre a un archivo en GIT:

1
2
3
4
mv archivo1.txt archivo1_renombrado.txt
git status
git add archivo1.txt archivo1_renombrado.txt
git commit -m "renombramos archivo1.txt  => archivo1_renombrado.txt"

El inconveniente de la operación anterior es que rompe el historial de revisiones del archivo, y no podría obtener el historial de revisiones de este archivo recién nombrado antes de este momento de renombramiento. No es deseable este método en el control de versiones.

Segunda forma (recomendado)

Git tiene un comando para renombrar archivos y resolver el problema anterior de enlazamiento roto:

1
2
git mv archivo1.txt archivo1_renombrado.txt
git commit -m "renombramos archivo1.txt  => archivo1_renombrado.txt"

Eliminar el seguimiento de GIT

Si por error inicilizamos un repositorio local en un directorio que no era simplemente eliminamos la carpeta oculta .git, por medio del siguiente comando:

1
rm -rf .git

Este comando rm se utiliza para remover directorios con todo su contenido dentro, siempre y cuando se utilice el flag -r y podemos indicar que se lleve a cabo a la fuerza por medio del flag -f de esta manera no nos solicitará confirmaciones. Veamos la siguiente demostración:


Ignorar archivos

A menudo, necesitaremos que cierta clase de archivos no sean monitoreados por Git. Por lo general, se trata de archivos que son generados automáticamente, como archivos de registro o archivos producidos por un sistema de compilación. En tales casos, Git nos permite crear un archivo llamado .gitignore donde podemos definir una lista de patrones que nos sirvan para ignorar todo tipo de archivos o directorios que coincidan con ellos.

El archivo .gitignore, es un archivo que le dice a Git que tipo de archivos o carpetar ignorar en el proyecto.

El archivo .gitignore generalmente se coloca en el directorio raíz del proyecto. También es posible crear un archivo .gitignore global, y cualquier entrada en ese archivo se ignorará en todos tus repositorios de Git.

Cada entrada en este archivo es una regla o patrón para ignorar archivos o directorio, veamos el siguiente contenido de un archivo .gitignore:

.gitignore
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# ignora todos los archivos con extensión .a
*.a

# ignora todos los archivos dentro de la carpeta TODO
# pero no en los subdirectorio
/TODO

# ignora todos los archivos en cualquier directorio llamado build
build/

# ignora doc/notas.txt, pero no ignora doc/semana2/notas.txt
doc/*.txt

# ignorar todos los archivos .pdf en el directorio doc/ y cualquiera de sus subdirectorios
doc/**/*.pdf 
← Registro de usuarios - Django Configurar SSH para github →