Файл в репозитории после клона, но без истории - PullRequest
5 голосов
/ 10 февраля 2011

У нас есть хранилище Mercurial, преобразованное из Subversion некоторое время назад, и сегодня мы заметили, что в хранилище есть файлы, которые имеют нет истории вообще.

Одним из симптомов такого поведения является то, что hg status сообщает о чистом файле, а hg log не сообщает об изменениях для того же файла:

> hg clone [repo]
> hg st -c FileWithMissingHistory.cs

C  FileWithMissingHistory.cs

> hg blame FileWithMissingHistory.cs
FileWithMissingHistory.cs: no such file in rev [...]
> hg log FileWithMissingHistory.cs
> hg log FileWithMissingHistory.cs -f
abort: cannot follow nonexistent file: "FileWithMissingHistory.cs"

> hg log -v | grep FileWithMissingHistory.cs

[gives output, there arechangesets mentioning the file]

Очевидно, что имена файлов были изменены в примере. Я пытался использовать hg verify, но эта команда сообщает, что репо в порядке. Кто-нибудь испытывал это, и можем ли мы что-нибудь сделать, чтобы история «ожила»? Размещение фиктивной истории на рассматриваемых файлах было бы приемлемым, но неоптимальным.

EDIT: Я провел еще одно исследование и заметил, что «FileWithMissingHistory.cs» был переименован из другого имени файла (hg copy + delete) в ревизии 238. Если я сделаю hg update -r238 и hg log в файле этой ревизии, я не получаю любая история. Выполнение журнала hg в исходном файле сообщает об истории, как и ожидалось, поэтому кажется, что история каким-то образом теряется при копировании (опять же, файл переименовывается с использованием hg copy, и набор изменений четко указывает, что файл был скопирован).

Ответы [ 2 ]

2 голосов
/ 10 февраля 2011

Звучит странно, на самом деле невозможно. Я попытался бы отладить эту проблему, чтобы обновить ее до разных ревизий и проверить, с какой ревизией файл появляется в рабочей копии в первый раз. Если вы делаете это в режиме двоичного поиска (аналогично тому, как работает расширение bisect ), вы должны найти ревизию, которая представляет файл после нескольких обновлений.

Это не решает проблему, но может помочь отследить ее источник.

1 голос
/ 07 марта 2011

Я наконец-то отследил причину эффектов, упомянутых выше, и кажется, что это вызвано смешанными проблемами корпуса.Некоторые файлы расположены в каталогах с строчными именами, а другие - в каталогах с одинаковыми именами, только в том случае, если регистр смешан (например, «directory / FileWithHistory.cs» и «DiReCtOrY / FileWithMissingHistory.cs»).В Windows оба файла будут находиться в одном каталоге, что вызывает проблемы.

...