Abort: untracked file в рабочем каталоге отличается от файла в запрошенной версии: '.hgignore'

Я пытаюсь вытащить некоторые файлы и каталоги, и у меня есть следующие сообщения:

Когда я смотрю в своем репозитории, я вижу, что файлы были загружены, но все они содержат _ в качестве префикса, и даже имена файлов и папок содержат _

requesting all changes 
adding changesets 
adding manifests 
adding file changes 
added 1094 changesets with 4304 changes to 1071 files abort:
untracked file in working directory differs from file in requested revision: '.hgignore' [command interrupted]

Что не так?

Ответ 1

Я думаю, что вы создали .hgignore в своем рабочем каталоге, не добавляя его в репозиторий (hg add). Этот файл "не проверен".

Кто-то другой, из другого клона, тоже добавил этот файл, зафиксировал и нажал его. Теперь, когда вы пытаетесь обновить свой рабочий каталог, Mercurial попытается добавить этот файл, но видит файл с тем же именем в вашем рабочем каталоге, который не отслеживается и отличается.

Есть два решения вашей проблемы:

  • Резервное копирование файла .hgignore, обновление и добавление отличий от резервной копии при необходимости
  • Добавьте свой собственный файл в репозиторий с помощью hg add, а затем заново запустите обновление. Возможно, потребуется зафиксировать файл до обновления.

Я советую использовать первое решение.

Ответ 2

Когда вы говорите, что файлы в репозитории имеют _ в качестве префикса, вы смотрите вниз в каталог .hg, не так ли? То, что хранилище данных для самого Mercurial и файлов там - revlogs, а не ваши файлы. Вне .hg у вас будет рабочий каталог, в котором файлы - это фактические файлы, которые вы ожидаете. Теперь вы не получаете одного из них, потому что hg update отказывается обновлять рабочий каталог, потому что это приведет к перезаписыванию вашего неустановленного файла .hgignore.

Какая команда точная запускается? Похоже, что он выполняет hg pull, за которым следует hg update, поэтому я бы предположил hg clone, но если у вас уже есть .hgignore, лежащий вокруг этой неправильной команды для использования. Если вместо этого вы используете hg pull -u или hg fetch, вы должны просто использовать hg pull вместо этого, чтобы получить изменения. Затем вы можете:

hg add .hgignore  # add the hg ignore file you already have that untracked
hg commit -m .hgignore  # commit the .hgignore file you just added
hg merge  # merge your new commit (.hgignore) with the changesets you just pulled down.