Как я могу переместить мой корень хранилища Mercurial на один каталог? - PullRequest
8 голосов
/ 17 июля 2011

У меня есть структура каталогов, например:

project_root
  data/
  src/
    .hg/
    utils/
    math/
    graphics/
    ...
  README.txt
  LICENCE.txt

Как видно из расположения .hg /, только src / находится под контролем Hg.Я хотел бы переместить корень хранилища из src / в его родительский каталог project_root, чтобы я также мог отслеживать данные /, README.txt и LICENCE.txt.

Хакерский способ сделать этобыть, чтобы переместить все вниз по каталогу, а не перемещать .hg вверх:

  • Переместить содержимое src вниз в новый каталог src / src /
  • Переместить содержимое project_root (другоечем src /) до src /
  • Переименовать src в new_project_root
  • Переместить new_project_root из project_root, удалить project_root

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

Ответы [ 3 ]

5 голосов
/ 17 июля 2011

Вы должны попробовать hg convert. Вы будете «конвертировать» существующий репозиторий Mercurial в новый. Вы указываете правила для конвертации, которые в вашем случае будут состоять в том, что все файлы из исходного репо перейдут в каталог src в новом репо. Затем вы можете вручную скопировать и hg add другие файлы в новый репозиторий.

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

4 голосов
/ 17 июля 2011

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

На первом шаге, когда вы перемещаете отслеживаемые файлы, вы должны использовать hg rename (псевдоним hg move), чтобы переместить их, поскольку Mercurial запомнит, каким был каждый файл до и после перемещения. Это поможет объединить изменения в файле до перемещения с новыми файлами после перемещения. Лучше всего работает, когда переименование / копирование не сопровождается изменениями содержимого в том же наборе изменений.

Я рекомендую клонировать реальное хранилище (или скопировать весь каталог проекта) перед продолжением.

0 голосов
/ 16 октября 2012

hg's Detect Renames работает в настоящее время.

Клонируйте репозиторий, чтобы вы могли без проблем все испортить.

Используя ваш пример:

  • создать подкаталог src / src
  • перемещение утилит, математики, графики и т. Д. В src / src
  • Затем откройте окно фиксации.
    • перемещенные файлы появятся в их старом каталоге с! и в их новом каталоге с?
  • щелкните правой кнопкой мыши по любому файлу и выберите «Определить переименования ...»
  • передвиньте ползунок минимального сходства до 100%
  • Нажмите кнопку «Принять все совпадения» и закройте окно «Обнаружение копий / переименований».
    • перемещенные файлы теперь должны отображаться с буквой R в старом каталоге и буквой A в их новом каталоге
  • совершить это изменение

  • Затем я переместил данные, Readme.txt и т. Д. В src (не src / src)

  • совершил добавление.

Наконец, теперь, когда у меня есть репо, как я хочу, перенесите изменения обратно в первоначально клонированное репо. Не забудьте обновить исходное хранилище, чтобы увидеть изменения в рабочем каталоге.

...