git update-index --assume-неизмененный возвращает ошибку - PullRequest
18 голосов
/ 22 декабря 2011

git update-index --assume-unchanged <filename> возвращает fatal: Unable to mark file <filename>.

Что мне нужно сделать, чтобы это исправить?На что это жалуется и почему?

Ответы [ 2 ]

13 голосов
/ 22 декабря 2011

Добавляется ли он в хранилище, не в .git/info/exclude и не в .gitignore?

Если ответ «да» на любой из этих вопросов, то файл отсутствует в хранилище, и это является причиной ошибки.

Попробуйте git ls-files -o и посмотрите, есть ли файл там. Так не должно быть.

3 голосов
/ 01 мая 2013

Вы запускаете git update-index --assume-unchanged, потому что у вас есть файлы, которые зарегистрированы в хранилище, но вы хотите игнорировать локальные изменения.

Как указывает Педро, файл, сообщающий об ошибке, не проверяется врепозиторий.(Он отображается в git ls-files -o, что означает, что он не отслеживается.)

Это может произойти, потому что вы пытаетесь рекурсивно игнорировать весь каталог, например:

find ./folder/ -type f | xargs git update-index --assume-unchanged

Но не толькофайлы в этой папке изменены, новые файлы созданы.(например, с помощью сценария сборки.)

Если вы уверены , что хотите игнорировать все измененные файлы, вы можете сделать это с помощью этой команды:

git ls-files -m | xargs git update-index --assume-unchanged

Но будь осторожен. Имейте в виду, что возиться с --assume-unchanged может быть затруднительно.

Подумайте о том, чтобы переработать вещи, чтобы эти файлы вообще не были в репо.Затем вы можете добавить их в .gitignore и удалить их из репозитория с помощью git rm --cached.

Если вы можете хранить файлы как в репозитории, так и в рабочих каталогах пользователей, это может быть идеально.Например, если файлы создаются как часть сборки, вы можете создать статическую библиотеку вместо того, чтобы каждый разработчик запускал процесс сборки локально.

...