Тестирование текстовых и бинарных файлов
На этом этапе мы увидим, как Git обрабатывает изменения в текстовых и бинарных файлах. Это поможет понять, почему функции сравнения (diffing) Git в первую очередь разработаны для текста.
Сначала убедитесь, что вы находитесь в директории своего проекта:
cd ~/project/my-time-machine
У нас уже есть файл message.txt
(текстовый файл) и binary_file
. Внесем еще одно изменение в message.txt
:
echo "Another line for the future" >> message.txt
Теперь добавим оба файла в область подготовки (staging area) и зафиксируем изменения. Сначала добавим файлы:
git add message.txt binary_file
Проверьте статус, чтобы убедиться, что оба файла добавлены в область подготовки:
git status
Вы должны увидеть оба файла в списке "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
Теперь зафиксируем эти изменения:
git commit -m "Add binary file and update message"
Вы увидите вывод, подтверждающий коммит, включая изменения в обоих файлах:
[master ...] Add binary file and update message
2 files changed, 2 insertions(+)
create mode 100644 binary_file
Теперь внесем небольшое изменение в binary_file
. Мы можем добавить в него один байт:
echo -n "a" >> binary_file
Флаг -n
предотвращает добавление символа новой строки командой echo
.
Проверьте статус еще раз:
git status
Git покажет, что файл binary_file
был изменен:
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)
Теперь попробуем увидеть различия с помощью команды git diff
:
git diff
Вместо показа изменений по строкам Git, скорее всего, сообщит, что бинарный файл изменился:
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
Этот вывод четко показывает, что Git не пытается показать детальные изменения внутри бинарного файла. Он просто говорит, что файлы отличаются. Это ключевое различие в том, как Git обрабатывает текстовые и бинарные файлы. Для текстовых файлов Git может показать, какие именно строки были добавлены, удалены или изменены. Для бинарных файлов он может только сообщить, что произошло изменение.
На этом этапе показано, почему мощные инструменты сравнения и слияния Git наиболее эффективны для текстового контента, который часто встречается в исходном коде и конфигурационных файлах.