case folding collision between” в Mercurial под Windows

У Mer­cu­r­ial под Win­dows есть неприятная особенность — если переименовать файл проекта, изменив в нём только регистр одного из символов, то рухнет всё. Mer­cu­r­ial, как дитя Unix-а, считает, что разные регистры — это разные файлы, а вот для Win­dows это параллельно. В результате — ошибка “case fold­ing col­li­sion between” и полный обвал репозитория: даже если удалить зловредный файл, чтобы сделать push, надо сначала сделать pull, а pull не проходит из-за конфликта имён.

Можно посмотреть, что советуют на официальном сайте. Но эти советы не всегда помогают (мне не помогли).

В конце концов, нашёлся хакерский вариант. Только не забудьте сделать резервную копию.

hg pull
# ревизия из репозитория, можно посмотреть в Tortoise
hg debugsetparents <bad revision>
hg debugrebuildstate
hg rm -A -f WeatherTimeMachine-Info.plist
hg ci -m "fixed collision-folding issue"
hg debugsetparents tip
hg debugrebuildstate
hg ci -m "fixed head"
hg push

Mercurial

Очень хорошее о практике работы с системами контроля версий. И, пока не забыл, как делать и сливать ветки в mer­cu­r­ial из консоли.

Создаём ветку:

hg branch branch1

Список веток:

hg branches

Заливаем с hg addremove:

hg ci -Am "comment"

Переключаемся на ветку:

hg up branch1

И сливаем с основной:

# Последний фикс с addremove
hg ci -Am "* my fix"
# и теперь сливаем
hg up default
hg merge branch1
hg ci -Am "+ merge branch1"
hg up branch1
hg ci -m "+ close branch" --close-branch
hg push

Устоявшейся маркировки в комментариях нет. Традиционно применяют:

+ фиша добавлена
- фича удалена
* изменение
# изменение (вариант *)
! багфикс