Что такое отслеживаемые файлы и неотслеживаемые файлы в контексте GIT? - PullRequest
25 голосов
/ 12 марта 2012

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

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

Ответы [ 4 ]

15 голосов
/ 12 марта 2012

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

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

Makefile
main.cpp
interface.hpp
worker.cpp

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

main.o
worker.o
myapp

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

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

9 голосов
/ 12 марта 2012

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

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

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

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

enter image description here

7 голосов
/ 12 марта 2012

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

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

3 голосов
/ 28 апреля 2017

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

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

...