Как решить Mercurial, сворачивание дела? - PullRequest
5 голосов
/ 29 сентября 2011

Я использую Mercurial в качестве источника контроля с главным репозиторием, управляемым в KILN.В какой-то момент я изменил название своего проекта iOS с WeatherTimeMachine на weathertimemachine.Это привело к изменению дела нескольких файлов и папок:

  • WeatherTimeMachine.xcode
  • WeatherTimeMachine_Prefix.pch
  • WeatherTimeMachine-Info.plist

Тем временем я добавил тег в ревизию в KILN ... Итак, теперь у меня есть:

  • голова в KILN
  • голова в моем локальном репос изменениями регистра

При попытке слияния я получаю следующее сообщение об ошибке: "Mercurial case-fold-collision"

Как это исправить?

Ответы [ 6 ]

5 голосов
/ 29 сентября 2011

Я нашел здесь некоторую информацию: 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 и перенести мои наборы изменений в КИЛЬНУ.

4 голосов
/ 21 ноября 2012

Это безпрограммный ответ, но он раз и навсегда решил мои проблемы со сворачиванием дел!Во всяком случае, пока ..

Я прекратил попытки избежать и "исправил" проблемы столкновения со случаем.Это выглядит некрасиво, и вы никогда не сможете действительно «решить» проблему, только можете обойти ее.

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

Я использовал приложение Disk Utility, которое поставляется с ОС, довольно просто, просто не забудьте выбрать Mac OS Extended (Case-sensitive, Journaled) при создании нового раздела.Также обратите внимание, что Дисковая утилита может изменять размеры разделов только путем перемещения конца (а не начала) раздела.

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

4 голосов
/ 15 февраля 2012

Если вы работаете в Mac OS X, вам не нужно экспортировать свой репозиторий в Linux или другую иностранную файловую систему с учетом регистра, как это предлагается в документации Mercurial.Просто используйте Дисковую утилиту, чтобы создать регистровый образ диска с учетом регистра, немного больше, чем ваш репозиторий, скопируйте туда репозиторий, затем удалите конфликтующие файлы и подтвердите.

2 голосов
/ 03 мая 2013

Мы решили эту проблему, не прибегая к чувствительной к регистру файловой системе, введя команды переименования HG. Скажем, у вас возникли проблемы, потому что «Foo.txt» должен называться «foo.txt»:

> hg rename Foo.txt Foo.txt.renamed
> hg rename Foo.txt.renamed foo.txt

Мы столкнулись с этой проблемой, когда файл был удален, а затем заново создан в главном хранилище с тем же именем, но с другим регистром. Репозиторий ветвей, созданный до того, как эти изменения не могут быть объединены, несмотря на то, что наборы изменений из основного репозитория были извлечены.

0 голосов
/ 23 января 2017

OSX то же самое, я хотел клонировать репо, и у меня была ошибка сворачивания регистра, не позволяющая мне топ клонировать.

Если в репозитории есть несколько коммитов, просто клонируйте более раннюю ревизию с помощью этой команды:

hg clone -r 7

Затем добавьте все, что противоречит файлу .hgignore, и обновите.

0 голосов
/ 10 июля 2014

В Mac OS X для меня сработало просто скопировать папку (дубликаты работают - cmd-D) и продолжить работу над ней с нового пути.

...