Probar archivos de texto vs archivos binarios
En este paso, veremos cómo Git maneja los cambios en archivos de texto en comparación con archivos binarios. Esto resaltará por qué las capacidades de comparación de Git están diseñadas principalmente para texto.
Primero, asegúrate de estar en el directorio de tu proyecto:
cd ~/project/my-time-machine
Ya tenemos nuestro archivo message.txt
(archivo de texto) y binary_file
. Hagamos otro cambio en message.txt
:
echo "Another line for the future" >> message.txt
Ahora, agreguemos ambos archivos al área de preparación (staging area) y los confirmemos (hagamos commit). Primero, agreguemos los archivos:
git add message.txt binary_file
Comprobemos el estado para confirmar que ambos archivos están en el área de preparación:
git status
Deberías ver ambos archivos listados bajo "Changes to be committed" (Cambios para confirmar):
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: message.txt
new file: binary_file
Ahora, confirmemos estos cambios:
git commit -m "Add binary file and update message"
Verás una salida que confirma la confirmación, incluyendo cambios en ambos archivos:
[master ...] Add binary file and update message
2 files changed, 2 insertions(+)
create mode 100644 binary_file
Ahora, hagamos un pequeño cambio en el archivo binary_file
. Podemos agregar un solo byte a él:
echo -n "a" >> binary_file
La bandera -n
evita que echo
agregue un carácter de nueva línea.
Comprobemos el estado nuevamente:
git status
Git mostrará que binary_file
ha sido modificado:
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: binary_file
no changes added to commit but untracked files present (use "git add" to track)
Ahora, intentemos ver la diferencia usando git diff
:
git diff
En lugar de mostrar cambios línea por línea, Git probablemente te dirá que el archivo binario es diferente:
warning: LF will be replaced by CRLF in binary_file.
The file has no newline at the end of the file.
diff --git a/binary_file b/binary_file
index ... ...
Binary files a/binary_file and b/binary_file differ
Esta salida muestra claramente que Git no intenta mostrar los cambios detallados dentro del archivo binario. Simplemente indica que los archivos son diferentes. Esta es una diferencia clave en cómo Git maneja archivos de texto en comparación con archivos binarios. Para archivos de texto, Git puede mostrar exactamente qué líneas se agregaron, eliminaron o modificaron. Para archivos binarios, solo puede decir que se produjo un cambio.
Este paso demuestra por qué las poderosas herramientas de comparación y combinación de Git son más efectivas con contenido basado en texto, que es común en código fuente y archivos de configuración.