Как обновить последнюю версию в Mercurial после добавления новых файлов? - PullRequest
5 голосов
/ 17 января 2012

Я создал хранилище в каталоге проекта.Я добавил все файлы и сделал несколько коммитов.Затем я добавил новые файлы в проект и в хранилище.После этого я вернулся к более ранней версии и теперь не могу обновить до последней версии.После hg update tip я получаю это сообщение:

abort: untracked file in working directory differs from file in requested
revision: '.DS_Store'

Я новичок в Mercurial.Как я могу это исправить?

1 Ответ

12 голосов
/ 17 января 2012

Это означает, что Mercurial не знает, что делать.У вас есть файл с содержанием something в рабочей копии.Файл не контролируется версией, поэтому при обновлении Mercurial обычно оставляет его в покое.Однако ревизия, которую вы обновляете до , также содержит файл с тем же именем, и содержимое отличается от something, которое у вас уже есть в файле.

Вы можете получить эту проблему, если выполните

$ hg init
$ echo "a file" > a
$ hg add a
$ hg commit -m "added a"
$ echo "b file" > b
$ hg add b
$ hg commit -m "added b"

Теперь у вас есть две ревизии, последняя имеет файлы a и b.Если вы обновитесь до первой ревизии и создадите другой файл b, то у вас возникнут проблемы:

$ hg update 0
$ echo "other b file" > b
$ hg update
abort: untracked file in working directory differs from file in requested
revision: 'b'

Обычное решение - зафиксировать перед обновлением .Как правило, не следует обновлять с грязной рабочей копией («грязная» означает, что hg status не пусто).Mercurial поддерживает такие обновления, но вы должны использовать их, только если знаете, что делаете.

Поэтому, чтобы продолжить приведенный выше пример, мы можем либо зафиксировать новый b, а затем объединить:

$ hg add b
$ hg commit -m "added new b"
$ hg merge

Это создает конфликт в b, так как две версии содержат b file и other b file соответственно.Разрешите конфликт и подтвердите:

$ hg commit -m "merged two bs"

Альтернативой является удаление файла из рабочей копии. Вот что я сделаю в вашем случае: .DS_Store файлы не должны отслеживаться в первую очередь.Они хранят некоторую информацию о папках в Mac OS X, и это не является частью вашего исходного кода.Итак, вы делаете

$ rm .DS_Store
$ hg update

Обновление воскресило файл .DS_Store.Теперь вы хотите сообщить Mercurial, что он должен прекратить отслеживать файл:

$ hg forget .DS_Store

, и вы также хотите, чтобы Mercurial теперь игнорировал такие файлы:

$ echo "syntax: glob" >> .hgignore
$ echo ".DS_Store" >> .hgignore
$ hg commit -m "removed .DS_Store file, ignored from now on"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...