Есть начальная проверка mtime для отчетов, таких как "git status", но когда вычисляется окончательная фиксация, время не имеет значения ... имеет значение SHA1.
Что ж, я рискну предположить, что он использует комбинацию вызовов stat ()
для определения того, что выглядит так, как будто оно могло измениться, а затем, в свою очередь, фактически связывает, чтобы установить это так.
Вы можете увидеть код для механизма сравнения здесь , чтобы получить некоторое представление. Я проследил кодовую базу, чтобы убедиться, что команда status действительно вызывает этот код (похоже, что многие вещи делают!), И на самом деле все это имеет большой смысл, если вы знаете, что Git довольно плохо работает в Windows, где он использует уровень эмуляции для выполнения этих вызовов типа POSIX: на порядок медленнее выполнить git status
на этой платформе.
В любом случае, если не считать чтения всего кода сверху вниз ( что я могу позже, если у меня будет время!
[изменить: см. здесь для объяснения stat ()
]
В зависимости от платформы вы сможете узнать, какие системные вызовы использует Git. чтобы выяснить его статус. Попробуйте strace git status
в Linux, truss git status
в SunOS или инструмент, по-видимому, основанный на DTrace, который Apple поставляет со своими инструментами разработчика в Mac OS X.