Подтвердить что ты не робот

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

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

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

Спасибо, Nayan

4b9b3361

Ответ 1

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

В качестве небольшого примера проект С++ имел бы

Makefile
main.cpp
interface.hpp
worker.cpp

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

main.o
worker.o
myapp

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

enter image description here

Ответ 4

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

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