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 - что приведет к странному поведению.
Временные метки обычно совместимы, но если разрешить метки времени с наносекундным разрешением, это также может быть проблематично.