Работа с файлами Git: от самого простого к самому сложному

Работа с Git может вызывать множество вопросов, особенно у тех, кто только начинает с ним знакомиться. Часто пользователи сталкиваются с путаницей, пытаясь понять, почему команда git add не сохраняет изменения, зачем нужен индекс и откуда берутся конфликты при слиянии, если оба разработчика просто редактировали один и тот же файл. Если вы испытываете подобные трудности, эта статья поможет вам разобраться.

Как Git хранит файлы и изменения

В первую очередь, важно понять, что Git не хранит историю файлов в привычном нам виде, как, например, версия 1 файла X и версия 2 файла X. Git — это система хранения данных, которая адресует данные по содержимому (content-addressable storage). Каждый раз, когда вы выполняете коммит, Git не фиксирует, что именно изменилось в файле, а сохраняет слепок (snapshot) всего проекта на момент коммита, при этом экономя место за счёт использования неизменившихся частей.

Внутри директории .git находятся объекты трёх типов, которые имеют отношение к файлам и структуре проекта:

  • blob — это содержимое одного файла. Если один и тот же контент встречается в нескольких файлах или коммитах, для него создаётся только один blob-объект.
  • tree — это список файлов и папок в определённом состоянии, который включает имя файла, права доступа (включая исполняемый бит) и ссылки на blob или вложенные tree.
  • commit — это ссылка на конкретный tree.

Основные команды для работы с файлами

После того как мы разобрались с основами, стоит обратить внимание на команды, которые помогут вам эффективно работать с файлами в Git. К ним относятся add, rm, mv, restore, diff, log, stash, а также работа с файлом .gitignore и большими файлами.

В заключение, мы покажем, как применять эти знания на практике, чтобы вы могли уверенно использовать Git в своих проектах.