Изменение структуры каталогов в Mercurial - PullRequest
6 голосов
/ 02 февраля 2012

У меня есть одно-папочное ртутное хранилище с одним человеком.Структура каталогов проста:

P104
  lecture_notes
    files under version control live here  

Через некоторое время я понимаю, что хочу иметь два каталога в репозитории, как это

P104
  lecture_notes
    files under version control live here  (.hg is here)
  homework
    more files under version control

Теперь, если я просто пытаюсьдобавить файлы в хранилище, это не удается:

br@ymir:~/P104/lecture_notes$ ll ..
total 16
drwxr-xr-x 4 br br 4096 2012-02-02 18:05 ./
drwxr-xr-x 4 br br 4096 2012-02-01 20:46 ../
drwxr-xr-x 2 br br 4096 2012-02-02 17:44 homework/
drwxr-xr-x 4 br br 4096 2012-02-02 18:06 lecture_notes/
br@ymir:~/P104/lecture_notes$ hg add ../homework/hw1_P104.tex 
abort: ../homework/hw1_P104.tex not under root

Моя первая идея состояла в том, чтобы клонировать репо на один уровень выше в структуре каталогов, добавить файлы в клон и удалить исходное репо.Но даже клонирование терпит неудачу:

br@ymir:~/P104/2011/lecture_notes$ hg clone . ..
abort: destination '..' is not empty

Таким образом, вопрос заключается в том, есть ли способ сделать это с помощью Mercurial, кроме создания чистого хранилища в другом месте и копирования файлов вручную?

Ответы [ 2 ]

7 голосов
/ 04 февраля 2012

Мне нравится решение VonC, в котором вы не перемещаете папку .hg. Это прямое решение. Вот альтернативный вариант, когда вы делаете переместите его и, следовательно, должны переименовать меньшее количество папок:

  1. Переместите папку .hg на ~/P104

    $ mv ~/P104/lecture_notes/.hg ~/P104
    

    С точки зрения Mercurial вы переместили все файлы верхнего уровня в каталог lecture_notes. В папке homework также неожиданно появятся новые неотслеживаемые файлы.

  2. Пусть Mercurial выяснит переименования:

    $ hg addremove
    

    Это правильно обнаружит, что файлы, которые раньше были файлами верхнего уровня, теперь находятся в каталоге lecture_notes. Не отслеживаемые (и игнорируемые) файлы в homework только что добавлены.

  3. Сохранить изменения:

    $ hg commit
    

Общая хитрость заключается в том, что файлы в рабочей копии отображаются относительно каталога .hg. Таким образом, перемещая каталог .hg вверх в иерархии файловой системы, мы эффективно перемещаем файлы рабочей копии вниз по иерархии внутри рабочей копии.

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

Если корневой каталог вашего репозитория Mercurial находится под ~/P104/lecture_notes, я бы предпочел:

  1. переименовать lecture_notes в P104
  2. сделать подкаталог lecture_notes
  3. переместить все существующие файлы в этот новый подкаталог
  4. добавить homework и его файлы в переименованный каталог P104
  5. hg add все

Идея состоит в том, чтобы сохранить репо .hg там, где он находится (~/P104/lecture_notes переименован в ~/P104/P104) и реорганизовать файлы в этом переименованном каталоге. Не нужно клонировать.

...