Я новичок в Git. Я хочу знать, что такое отслеживаемые и не проверенные файлы? Я читал "Pro Git", но все еще не мог понять.
Может кто-нибудь объяснить мне разницу между ними, предоставив пример?
Спасибо, Nayan
Я новичок в Git. Я хочу знать, что такое отслеживаемые и не проверенные файлы? Я читал "Pro Git", но все еще не мог понять.
Может кто-нибудь объяснить мне разницу между ними, предоставив пример?
Спасибо, Nayan
Файл отслеживается, если он находится под контролем версии.
В качестве небольшого примера проект С++ имел бы
Makefile
main.cpp
interface.hpp
worker.cpp
в качестве исходных файлов; вы бы поставили их под контроль версий. Во время сборки
main.o
worker.o
myapp
; они не относятся к управлению версиями, поэтому вы не используете для них git add
. Они остаются без следа, потому что git не волнует, что с ними происходит. Пока вы не добавите их в .gitignore
(по умолчанию игнорируются файлы .o), git не знает, хотите ли вы добавить или проигнорировать их, поэтому он отображает их с помощью команды git status
, пока вы не примете решение.
Отслеживается ли файл или нет также зависит от версии - предположим, что вы автоматически генерируете worker.cpp
и удаляете его из управления версиями в более поздней версии. В настоящее время файл не отслеживается в этой версии. Когда вы вернетесь к версии, где файл все еще находится под контролем версии, git откажется перезаписать этот файл во время проверки.
Отслеживаемые файлы обрабатываются (контролируются версией) с помощью Git, которые были добавлены и зафиксированы. Неотслеживаемые файлы - это большинство файлов времени, которые вы не хотите контролировать, потому что, например, они генерируются вашим компилятором.
Вы добавляете ненужные файлы в файл .gitignore
, чтобы Git не спрашивал вас, хотите ли вы их отслеживать.
Git Раздел книги Pro, который вы упомянули, пытается детализировать понятие невоспроизводимого файла:
Когда вы проверяете данный SHA1, вы получаете "моментальный снимок" всех файлов версий.
Любой файл, на который не ссылается этот снимок, не отслеживается. Он не является частью дерева Git:
См. "Git - как определить, отслеживается ли файл Git (по коду выхода оболочки)?"
Любой файл, который вы хотите игнорировать, должен быть отслежен (как описано в этой странице справки GitHub).
Обратите внимание, что Git не будет игнорировать файл, который уже отслеживался до того, как правило было добавлено в этот файл, чтобы игнорировать его.
В таком случае файл должен быть отслежен, обычно сgit rm --cached filename
С чисто технической точки зрения: Отслеженный файл - это просто файл, который существует в индексе Git. Сказать, что файл "под управлением версиями" вводит в заблуждение, потому что это говорит о том, что это файл, который превратил его в репо, - и это не обязательно для отслеживания файла.
При инициализации нового репо Git индекс пуст, и все файлы в вашем рабочем каталоге не отслеживаются. Файл отслеживается, когда он добавляется в индекс - в этот момент для него создается хэш SHA-1, а запись объекта помещается в папку .Git\Objects. С этого момента Git может сравнивать содержимое/имя того же файла в рабочем каталоге, чтобы отслеживать изменения, переименовывать и удалять. Пока файл существует в индексе, он отслеживается.