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
документация