Подтвердить что ты не робот

Добавление файла в стадию 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 и не могу иметь файлы на моем пути, которые отличаются только случаем.

4b9b3361

Ответ 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`