Как решить Mercurial со складыванием корпуса?
Я использую Mercurial в качестве источника контроля с основным хранилищем, управляемым в KILN. В какой-то момент я изменил название своего проекта iOS с WeatherTimeMachine на weathertimemachine. Это привело к изменению дела нескольких файлов и папок:
- WeatherTimeMachine.xcode
- WeatherTimeMachine_Prefix.pch
- WeatherTimeMachine-Info.plist
Тем временем я добавил тег в ревизию в KILN... Итак, теперь у меня есть:
- голова в печи
- глава моего локального репо с изменениями дела
При попытке слияния я получаю следующее сообщение об ошибке: "Mercurial case-fold столкновение"
Как я могу это исправить?
6 ответов
Я нашел некоторую информацию здесь: FixingCaseCollisions, но почему-то это не сработало для меня. Вот как мне удалось решить эту проблему:
Сделайте копию вашей существующей папки репозитория (для безопасности). Например:
cp -r WeatherTimeMachine WeatherTimeMachineCopy
Дурак меркуриален, думая, что проблемный пересмотр - это текущий совет:
hg debugsetparents <bad revision>
hg debugrebuildstate
Удалите файлы, которые вызывают проблему (требуется -f для принудительного удаления). Вот пример:
hg rm -A -f WeatherTimeMachine-Info.plist
Как только все проблемные файлы были удалены, передайте изменения
hg ci -m "fixed collision-folding issue" -u michael
Затем восстановите Mercurial до нужной версии
hg debugsetparents tip
hg debugrebuildstate
После этого возможно слияние, и проблема исчезла.
И теперь я могу с радостью возобновить работу с MacHg по управлению моим репозиторием Mercurial и перенести мои наборы изменений в KILN.
Если вы работаете в Mac OS X, вам не нужно экспортировать свой репозиторий в Linux или другую иностранную файловую систему с учетом регистра, как это предлагается в документации Mercurial. Просто используйте Дисковую утилиту для создания чувствительного к регистру образа диска, занесенного в журнал, немного большего размера, чем ваш репозиторий, скопируйте туда репозиторий, затем удалите конфликтующие файлы и подтвердите.
Это - ответ без программирования, но он раз и навсегда решил мои проблемы со сворачиванием дел! В любом случае сейчас..
Я отказался от попыток избежать и "исправить" проблемы столкновения с делом. Это выглядит некрасиво, и вы никогда не сможете действительно "решить" проблему, только сделайте обходной путь.
Единственный способ (который я могу придумать), чтобы действительно решить проблему, это иметь чувствительную к регистру файловую систему. Нет необходимости переформатировать весь диск, один раздел прекрасно с этим справится.
Я использовал приложение Disk Utility, которое поставляется с ОС, довольно просто, просто не забудьте выбрать Mac OS Extended (Case-sensitive, Journaled)
при создании нового раздела. Также обратите внимание, что Дисковая утилита может изменять размеры разделов только путем перемещения конца (а не начала) раздела.
Вы, вероятно, можете создать символическую ссылку на то место, где жил ваш старый исходный код, поэтому не нужно менять настройки и прочее в среде IDE (но я не пробовал этого, просто доволен новым разделом).
Мы решили эту проблему, не прибегая к чувствительной к регистру файловой системе, выполнив команды переименования HG. Скажем, у вас проблемы, потому что "Foo.txt" нужно называть "foo.txt":
> hg rename Foo.txt Foo.txt.renamed
> hg rename Foo.txt.renamed foo.txt
Мы столкнулись с этой проблемой, когда файл был удален, а затем заново создан в главном хранилище с тем же именем, но с другим регистром. Репозиторий ветвей, созданный до того, как эти изменения не могли быть объединены, несмотря на то, что наборы изменений из основного репозитория были извлечены.
Для Mac OS X, что работало для меня, это просто скопировать папку (дубликат работает - cmd-D
) и продолжить работу над этим, с нового пути.
OSX же, я хотел клонировать репозиторий, и у меня была ошибка сворачивания регистра, которая мешала мне топ клонировать.
Если в хранилище есть несколько коммитов, просто клонируйте более раннюю ревизию с помощью этой команды:
hg clone -r 7
Затем добавьте что-либо противоречащее файлу.hgignore и обновите.