Как Mercurial сообщает, что файл был изменен?

#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 отображаются только исправления, которые не отображают изменения разрешений.