Git игнорировать и распаковывать файл [Да, я уже прочитал другие сообщения]

Я положил несколько папок в мой gitignore, но, как описано в документации

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

Так что я должен распаковать некоторые файлы, и это где мой кошмар начинается

Это мой файл gitignore

$ cat .gitignore
/.settings/
/.buildpath
/configuration.php
/administrator/cache/*
/images/*
/connectionOracle.php
/administrator/components/com_jsecure/*
/administrator/language/en-GB/*

Последним изменением, внесенным в этот файл, было добавление строки /images/*

Чтобы отследить эту папку, я следую, как описано {1} здесь и {2} здесь

После {1}

$ git update-index --assume-unchanged images/*
fatal: Unable to mark file images/02102012_planos.jpg

Вопрос 1: Почему нельзя отследить этот конкретный файл?

После {2}

$ git rm --cached images/ -r
fatal: pathspec 'images' did not match any files

Тот же результат с конкретным файлом

$ git rm --cached images/20130626tabela1.jpg
fatal: pathspec 'images/20130626tabela1.jpg' did not match any files

Вопрос 2: Почему я получаю это сообщение об ошибке? Поиск здесь приводит меня к этому, но, как я уже сказал, эти файлы в / images / отслеживаются.

И торт вишневый

Для проверки списка игнорируемых файлов я запустил эту команду

$git ls-files --others -i --exclude-standard

Это дает мне очень длинный список файлов в папке images, administrator и mpdf61. Папка mpdf61 не настроена ни в файле gitignore, ни в info/exclude.

Question 3: Why the mpdf61 appears in this list?

1 ответ

Решение

Примечание: "отслеживается" означает "в индексе". "Не отслеживается" означает "не в индексе". Отображение файлов без отслеживания обычно подавляется, если оно также игнорируется, поэтому некоторые предпочитают вызывать файлы, состояние которых "и не отслежено, и игнорируется", и просто "игнорируется", тихо скрывая их "неотслеживаемость". Обратите внимание, что индекс не должен соответствовать текущему HEAD commit: так вы готовите следующий коммит, внося изменения в индекс. Эти изменения становятся частью постоянного коммита только после того, как вы делаете коммит и выполняете процесс обновления. HEAD также.


$ git update-index --assume-unchanged images/*
fatal: Unable to mark file images/02102012_planos.jpg

Вопрос 1: Почему нельзя отследить этот конкретный файл?

Вы не можете отследить его, потому что он не отслеживается. Более того, git update-index --assume-unchanged не отслеживает файл в первую очередь. За update-index чтобы обновить бит "предположить, что без изменений", файл должен быть в индексе, чтобы update-index есть что обновить это fatal ошибка возникает с первым таким неотслеживаемым (не в индексе) файлом. Больше ничего не происходит ни с одним из последующих файлов, названных расширением оболочки *, как update-index просто останавливается после первой ошибки.

(Например, если вы запустите git update-index --assume-unchanged red.txt blue.jpg green.svg и оба red.txt а также green.svg в индексе в то время как blue.jpg не в индексе, update-index отметит запись индекса для red.txt но не тот для green.svg.)


$ git rm --cached images/20130626tabela1.jpg
fatal: pathspec 'images/20130626tabela1.jpg' did not match any files

Вопрос 2: Почему я получаю это сообщение об ошибке?

Поскольку этот файл также не отслеживается (отсутствует в индексе) и поэтому не может быть удален из индекса. Это:

$ git rm --cached images/ -r
fatal: pathspec 'images' did not match any files

означает, что нет images/ файлы (сейчас) в индексе. (Возможно, некоторые были раньше, и поэтому находятся в HEAD совершать, но уже не так, после более раннего успеха git rm --cached; если так, то они должны появиться в git status как "удалено".)


$ git ls-files --others -i --exclude-standard

Это дает мне очень длинный список файлов в папке images, administrator и mpdf61. Папка mpdf61 не настроена ни в файле gitignore, ни в info/exclude.

Вопрос 3: почему mpdf61 появляется в этом списке?

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

--exclude-standard
Добавьте стандартные исключения Git: .git/info/exclude, .gitignore в каждый каталог и глобальный файл исключений пользователя.

(все акценты мои). Вы сказали "the" (как в одном) файле gitignore, но их может быть много, включая один в каталоге mpdf61 сам, и вы можете иметь core.excludesFile сконфигурировано.

Чтобы определить, какая директива ignore игнорирует определенный файл, используйте git check-ignore -v, Увидеть git check-ignore документация

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