#mercurial
#mercurial
Вопрос:
Как Mercurial сообщает, что файл был изменен?
Причина, по которой я спрашиваю, заключается в том, что, когда я запускаю hg status
, он сообщает мне, что несколько файлов изменены. Однако, когда я запускаю hg diff
, изменений для отчета нет.
У меня есть теория о том, почему это происходит: (но я не уверен)
Я использую NetBeans, в который встроена поддержка Mercurial. Когда я редактирую файл, он показывает его как измененный, хотя, если я отменяю (а не возвращаю) эти изменения и сохраняю его, NetBeans сообщает мне, что локальных изменений нет. Итак, я предполагаю, что NetBeans использует различия для проверки изменений, в то время как Mercurial использует что-то еще, например, дату модификации.
Это правильно или причина в чем-то другом?
Ответ №1:
Mercurial не использует дату изменения для определения статуса. Это можно проверить с помощью простого эксперимента:
hg init
echo "This is a test" > test.txt
hg commit -Am "commit"
touch test.txt
hg status
Код, который выполняет проверку состояния, находится в dirstate.py
. Если dirstate
он не уверен в статусе файла (например, потому, что отличается только время модификации, тогда он передает его в localrepo.status
для дальнейшего анализа, как показано здесь.
hg help status
Текст содержит некоторые подсказки, которые могут помочь:
может показаться, что статус не соответствует diff, если изменились разрешения или произошло слияние. Стандартный формат diff не сообщает об изменениях разрешений, а diff сообщает об изменениях только относительно одного родительского элемента слияния.
При запуске hg diff
указываете ли вы какие-либо параметры командной строки?
Комментарии:
1. Я пробовал
hg diff
в одиночку, и я попробовалhg diff <file>
, вот и все.2. @John попробуй diff —git, возможно, это изменение разрешения.
Ответ №2:
Возможно ли, что права доступа к файлу изменились? Попробуйте hg diff --git
, который показывает расширенные различия в стиле git, которые поддерживают разрешения и двоичные файлы. По умолчанию hg diff
отображаются только исправления, которые не отображают изменения разрешений.