Testar Arquivos de Texto vs. Binários
Nesta etapa, veremos como o Git lida com as alterações em arquivos de texto versus arquivos binários. Isso destacará por que os recursos de diffing do Git são projetados principalmente para texto.
Primeiro, certifique-se de estar no diretório do seu projeto:
cd ~/project/my-time-machine
Já temos nosso message.txt (arquivo de texto) e binary_file. Vamos fazer outra alteração em message.txt:
echo "Another line for the future" >> message.txt
Agora, vamos adicionar ambos os arquivos à área de staging e confirmá-los (commit). Primeiro, adicione os arquivos:
git add message.txt binary_file
Verifique o status para confirmar que ambos os arquivos estão na área de staging:
git status
Você deve ver ambos os arquivos listados em "Changes to be committed":
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: message.txt
new file: binary_file
Agora, vamos confirmar (commit) essas alterações:
git commit -m "Add binary file and update message"
Você verá a saída confirmando o commit, incluindo as alterações em ambos os arquivos:
[master ...] Add binary file and update message
2 files changed, 2 insertions(+)
create mode 100644 binary_file
Agora, vamos fazer uma pequena alteração no binary_file. Podemos anexar um único byte a ele:
echo -n "a" >> binary_file
A flag -n impede que o echo adicione um caractere de nova linha.
Verifique o status novamente:
git status
O Git mostrará que binary_file foi 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)
Agora, vamos tentar ver a diferença usando git diff:
git diff
Em vez de mostrar as alterações linha por linha, o Git provavelmente informará que o arquivo binário difere:
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 saída mostra claramente que o Git não tenta mostrar as alterações detalhadas dentro do arquivo binário. Ele simplesmente afirma que os arquivos são diferentes. Esta é uma diferença fundamental na forma como o Git lida com arquivos de texto versus binários. Para arquivos de texto, o Git pode mostrar exatamente quais linhas foram adicionadas, removidas ou modificadas. Para arquivos binários, ele só pode informar que uma alteração ocorreu.
Esta etapa demonstra por que as poderosas ferramentas de diffing e merging do Git são mais eficazes com conteúdo baseado em texto, o que é comum em código-fonte e arquivos de configuração.