Что такое отслеживаемые файлы и неотслеживаемые файлы в контексте GIT?

Я новичок в Git. Я хочу знать, что такое отслеживаемые и неотслеживаемые файлы? Я читал "Pro Git", но все еще не мог понять.

Может ли кто-нибудь объяснить мне разницу между этими двумя примерами?

Спасибо, Наян

6 ответов

Решение

Файл отслеживается, если он находится под контролем версий.

В качестве небольшого примера, проект C++ будет иметь

Makefile
main.cpp
interface.hpp
worker.cpp

как исходные файлы; вы бы поставили их под контроль версий. Во время сборки

main.o
worker.o
myapp

генерируются; они не относятся к контролю версий, поэтому вы не используете git add на них. Они остаются незамеченными, потому что мерзавцу все равно, что с ними происходит. Пока вы не добавите их в .gitignore (.o файлы игнорируются по умолчанию), git не знает, хотите ли вы добавить или игнорировать их, поэтому он отображает их с git status Команда, пока вы не примете решение.

Отслеживается ли файл или нет, также зависит от версии - предположим, вы автоматически сгенерировали worker.cpp и удалите его из системы контроля версий в более поздней версии. Файл теперь не отслеживается в этой версии. Когда вы вернетесь к версии, где файл все еще находился под контролем версий, git откажется перезаписывать этот файл во время извлечения.

В главе книги Git Pro, о которой вы упоминаете, делается попытка детализировать понятие неотслеживаемого файла:

Когда вы извлекаете данный SHA1, вы получаете "снимок" всех версионных файлов.
Любой файл, на который не ссылается этот снимок, не отслеживается. Это не часть дерева Git:
Смотрите " git - как узнать, отслеживается ли файл git (по коду выхода из оболочки)?"

Любой файл, который вы хотите игнорировать, не должен отслеживаться (как описано на этой странице справки GitHub).

Обратите внимание, что git не будет игнорировать файл, который уже отслеживался до того, как в этот файл было добавлено правило для его игнорирования.
В таком случае файл должен быть отслежен, обычно с git rm --cached filename

Отслеживаемые файлы - это те, которые обрабатываются (контролируются версиями) Git, которые когда-то были добавлены и зафиксированы. Файлы без отслеживания - это в большинстве случаев файлы, которыми вы не хотите управлять, потому что, например, они генерируются вашим компилятором.

Вы добавляете неотслеживаемые файлы в .gitignore файл, так что Git не спрашивает вас, если вы хотите отслеживать их.

С чисто технической точки зрения: отслеживаемый файл - это просто файл, который существует в индексе Git. Сказать, что это файл "под управлением версией", вводит в заблуждение, потому что это говорит о том, что это файл, который попал в репозиторий - и это необязательно для отслеживания файла.

Когда вы запускаете новое Git-репо, индекс пуст, и все файлы в вашем рабочем каталоге не отслеживаются. Файл отслеживается при добавлении в индекс - в этот момент для него создается хэш SHA-1 и запись объекта помещается в папку.Git\Objects. С этого момента Git может сравнивать содержимое / имя одного и того же файла в рабочем каталоге, чтобы отслеживать изменения, переименовывать и удалять. Пока файл существует в индексе, он отслеживается.

  • Отслеживается : файлы, которые вы сделали «git add» или «git commit» (я имею в виду, что эти файлы уже находятся под контролем git)
  • Неотслеживаемые : файлы, которые вы не сделали «git add» или «git commit» (если вы добавили или зафиксировали X-файл — это означает, что git отслеживает этот X-файл)
  • Когда вы впервые добавляете файлы в рабочий каталог, все они не отслеживаются. Чтобы Git отслеживал их, вам нужно подготовить их (git add) или добавить в локальный репозиторий (git commit).

Помните, что каждый файл в вашем рабочем каталоге может находиться в одном из двух состояний: отслеживаемый или неотслеживаемый. Короче говоря, отслеживаемые файлы - это файлы, о которых знает Git. Неотслеживаемые файлы - это все остальное - любые файлы в вашем рабочем каталоге, которые не были в вашем последнем снимке и не находятся в вашей промежуточной области. Отслеживаемые файлы - это файлы, которые были в последнем снимке; они могут быть неизмененными, модифицированными или постановочными

Другие вопросы по тегам