Добавление файла в стадию git ничего не делает и не может быть выполнено
Я попал в странную ситуацию, когда в одной из моих ветвей файл web.config не может быть добавлен на сцену. Вывод
git add path/to/web.config
git status
То же самое, что и до добавления файла. Web.config, по-видимому, требует изменений и не добавляется на сцену.
Возможно, что более интересно, когда я удаляю Web.config из файловой системы и запускаю git status
, я получаю вывод, который указывает, что у меня есть два файла web.config, которые готовы к удалению и являются не поставлено.
# Changes not staged for commit:
# deleted: path/to/Web.config
# deleted: path/to/web.config
Обратите внимание, что в нем есть и верхний регистр W, а другой - строчный w. Файл, который я удалил в фактической файловой системе, - это верхний регистр "W".
Изменить 1
Вывод git ls-files --stage
показывает, что в индексе действительно два файла, которые отличаются друг от друга.
100644 63cd5911b9b12bbad559bb69b1b596708b932061 0 path/to/Web.config
100644 d60ab44bb38f05ffce126ddd3c3293b06e6e4096 0 path/to/web.config
Я выводил каждый из них в файл с git cat-file -p <hash> > <file>
и сравнивал два файла. В то время как текстовое содержимое одинаков, верхний регистр Web.config содержит окончания CRLF, а нижний регистр web.config содержит строчные концы.
Изменить 2
С файлом, физически удаленным из файловой системы git reset HEAD
, выдает этот вывод, но файл не восстанавливается в файловой системе и поэтому не может быть добавлен.
Unstaged changes after reset
D path/to/Web.config
D path/to/web.config
Я хочу, чтобы файл в рабочем каталоге имел CRLF, поскольку я работаю над Windows, но я хотел бы, чтобы текстовые файлы были сохранены с LF во внутренней базе данных Git. Итак, я предполагаю, что это будет 63cd591, но я могу быть здесь.
Как мне навсегда удалить путь/в/web.config из индекса в этом сценарии? Я нахожусь в Windows и не могу иметь файлы на моем пути, которые отличаются только случаем.
Ответы
Ответ 1
Окончательное решение этой конкретной проблемы состояло в том, чтобы удалить как записи web.config из кэша git, зафиксировать любые изменения, так и снова добавить желаемый файл Web.config обратно в git.
git rm --cached path/to/web.config
git rm --cached path/to/web.config
git commit -m "Repair confused cache"
git add path/to/Web.config
git commit -m "Add Web.config"
Ответ 2
Обычно, когда git попадает в запутанное состояние, удаление и повторное добавление файла в наличные деньги исправят его.
git rm --cached foo
Кажется, наиболее распространенным способом поступления файла в запутанное состояние является выполнение mv
из командной строки.
Я обнаружил, что использование git mv
вместо mv
помогает предотвратить запуск этой проблемы.
http://linux.die.net/man/1/git-mv
Наконец, если вы собираетесь удалить файл из репозитория git, используйте git rm
вместо просто rm
Зачем использовать 'git rm' для удаления файла вместо 'rm'?
https://www.kernel.org/pub/software/scm/git/docs/git-rm.html`