Cambiar una estructura de directory en Mercurial

Tengo un repository mercurial de una sola persona para una sola persona. La estructura del directory es simple:

P104 lecture_notes files under version control live here 

Después de un time me doy count de que quiero tener dos directorys dentro del repository, como este

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

Ahora, si solo bash agregar files al repository, falla:

 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 

Mi primera idea fue clonar el repository un nivel arriba en la estructura del directory, agregar files al clon y eliminar el repository original. Pero incluso la clonación falla:

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

Entonces, la pregunta es si existe una forma Mercurial-ish de hacer esto, aparte de crear un repository limpio en otro lugar y copyr files manualmente.

Si el directory raíz de su repo de Mercurial está bajo ~/P104/lecture_notes , preferiría:

  1. renombrar lecture_notes en P104
  2. hacer un subdirectory lecture_notes
  3. mover todos los files existentes en ese nuevo subdirectory
  4. agregar homework y sus files en el directory P104 renombrado
  5. hg add todo

La idea es mantener el repository .hg donde está ( ~/P104/lecture_notes renombradas en ~/P104/P104 ) y reorganizar los files dentro de ese directory renombrado.
No hay necesidad de clonar

Me gusta la solución de VonC donde no mueve la carpeta .hg . Es una solución directa. Aquí hay una alternativa donde lo mueve y por lo tanto tiene que cambiar el nombre de less carpetas:

  1. Mueva la carpeta .hg hasta ~/P104

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

    Visto desde la perspectiva de Mercurial, habrá movido todos los files de nivel superior a un directory lecture_notes . También de repente habrá nuevos files sin seguimiento en la carpeta de homework .

  2. Deja que Mercurial descubra los cambios de nombre:

     $ hg addremove 

    Esto detectará correctamente que los files que eran files de nivel superior ahora ahora viven en el directory lecture_notes . Los files sin seguimiento (y no ignorados) en la homework se acaban de agregar.

  3. Guarde los cambios:

     $ hg commit 

El "truco" general es que los files en la copy de trabajo se ven en relación con el directory .hg . Así que moviendo el directory .hg hacia arriba en la jerarquía del sistema de files, movemos efectivamente los files de copy de trabajo hacia abajo en la jerarquía dentro de la copy de trabajo.