Git статус между Windows и Linux не согласен - PullRequest
0 голосов
/ 29 января 2019

Состояние Git возвращает разные результаты, если я запускаю его на своей системе Linux и своем ноутбуке с Windows10.

Исходный каталог был запущен на машине с Linux (под управлением RedHat 6.4).Я устал от редактирования всего нашего кода Python с использованием VIM, поэтому я решил подключить сетевой диск на моем ноутбуке с Windows10 к удаленному компьютеру с Linux (который контролирует все наше тестовое оборудование) и каталогу, настроенному с помощью Git.Так что теперь я могу использовать Visual Studio Code для простого просмотра / редактирования / обновления любых файлов на удаленной машине с Linux.Я запускаю все свои команды git из коробки Linux, но было бы неплохо, если бы я мог запускать их прямо из VS Code, но между двумя версиями Git очевидно есть разница.

'git status' --> on the Linux box returns no updated or modified files.

'git status' --> on Windows shows I have over 200 modified files and 2 directories that are deleted.

У меня естьуже просматривал эту ветку: Git - окончания строк в Windows AND linux

Там было много отличной информации, которую я попробовал.Единственное, что, казалось, оказало какое-либо влияние, это добавление параметра 'git config core.filemode false' , который я сделал на компьютере с Linux.Теперь, когда я запускаю «git status» на моей машине с Windows, я вижу, что он уменьшил мои измененные файлы с 200+ до 4. Так что это здорово.Тем не менее, и я все еще вижу эти 4 файла измененными, а две папки, которые он считает, были удалены.

Любые другие предложения относительно того, что я могу проверить?

Как примечание, у меня есть 112файлы, которые отображаются как неотслеживаемые в коде VS, но не случайно, я считаю, что все 112 являются файлами, которые находятся в 2 каталогах, которые, по мнению Windows git status, удалены.

1 Ответ

0 голосов
/ 29 января 2019

Git хранит в индексе некоторые специальные биты информации, чтобы легко узнать, был ли изменен файл в рабочем дереве или нет.Сам индекс является файлом, который находится в репозитории Git (.git/index; здесь могут быть дополнительные вспомогательные файлы и временные файлы индекса, но .git/index - это индекс , первый и реальный).Это как бы).

Эти специальные биты информации в индексе (получены из) являются результатом вызовов операционной системы stat.Вызовы stat в Linux и вызовы stat в Windows доставляют различные данные (в частности, st_dev, хотя могут возникнуть проблемы с ino, uid и gid)таким образом, один индекс (и, следовательно, Git-хранилище и дерево работ) не может быть правильно распределен через границы машины 1 .Это относится к сетевым дискам, образам виртуальных машин, папкам Dropbox (которые имеют другие проблемы) или любому другому механизму совместного использования, который позволяет любой системе напрямую просматривать данные другой системы.

Конечный результат всего этого заключается в том, что иногда , едва ли, таким образом можно совместно использовать репозиторий Git, но это плохая идея: вы получите странные эффекты, такие как Git, пропускающие некоторые измененные файлы, или думающие файлы изменяются, когда они не«т.Последнее, вероятно, то, что вы видите.

Это действительно работает намного лучше, хотя не для того, чтобы делиться каталогами репозитория (или рабочими деревьями), как это.Это даже верно для «более дружественных» систем, таких как MacOS против Linux при использовании виртуальных машин и, например, vagrant.Это вроде иногда работает, но это просто ненадежно.Используйте отдельные клоны, и ваша жизнь станет счастливее.


1 Во время компиляции можно выбрать Git ignore поле st_dev, чтобывключить общий доступ к сетевым дискам.Это иногда имеет значение, а иногда нет.Я подозреваю, что эта опция выбрана в большинстве сборок Windows, чтобы Windows могла делиться с Windows, но не включена в сборках Linux, что означает, что сторона Linux не будет игнорировать изменения, сделанные стороной Windows - что приведет к странному поведению.

Временные метки обычно совместимы, но если разрешить метки времени с наносекундным разрешением, это также может быть проблематично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...