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
--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
--global
a git config
, y esto afecta todos los repositorios con los que trabaja en el sistema del usuario..git/config
--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
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:
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
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:
También se pueden aplicar atributos como:
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"
Otro ejemplo para cambiar los colores del comando status
para la salida de:
color.status.changed
color.status.untracked
color.status.added
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"
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
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
A continuación, tenemos el árbol de directorios y archivos dentro de la carpeta o directorio oculto .git
y veremos comentado cada aspecto importante:
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
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
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
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.
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 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'
Sacar un archivo del stage area:
1
git rm --cached archivo.txt
Recuperar un archivo, descartando los cambios:
1
git restore archivo.txt
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:
stage area - git add
)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.
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"
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:
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
:
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