Эта проблема возникает из-за того, что Windows и Linux (или, по крайней мере, эмулируемая версия) не согласны с размером символической ссылки.В Windows размер символьной ссылки указывается в блоках, поэтому символьная ссылка из 6 символов будет иметь размер 4096 байт.В Linux размер символической ссылки - это число байтов, которые она содержит (в данном примере 6).
Одна из вещей, которую Git записывает в индекс для отслеживания изменения файла, - это размер.Когда вы выполняете какое-либо обновление индекса, например, с помощью git reset --hard
, Git записывает все эти метаданные в индекс, включая размер.Когда вы запускаете git status
, git проверяет эти метаданные, чтобы определить, совпадают ли они, и, если нет, помечает файл как измененный.
Можно контролировать, проверяется ли определенная информация в индексе, так как некоторыеинструменты могут выдавать фиктивную информацию (например, JGit не записывает номера устройств и номеров узлов), но размер всегда проверяется, потому что это считается хорошим индикатором того, изменился ли файл.
Поскольку этофундаментальное несоответствие между тем, как Windows и WSL видят символическую ссылку, это действительно невозможно исправить.Вы могли бы попытаться спросить проект Git для Windows, хотят ли они обойти эту проблему в Git для Windows, но я подозреваю, что ответ, вероятно, будет отрицательным, поскольку его изменение, вероятно, повлияет на производительность всех пользователей Windows.