2012-02-02 13 views
6

Tengo un repositorio mercurial de una sola persona para una sola carpeta. La estructura de directorios es simple:Modificación de una estructura de directorios en Mercurial

P104 
    lecture_notes 
    files under version control live here 

Después de un tiempo me di cuenta de que quiere tener dos directorios dentro del repositorio, como este

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

Ahora, si yo estoy tratando de añadir archivos a la repositorio, se produce un error:

[email protected]:~/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/ 
[email protected]:~/P104/lecture_notes$ hg add ../homework/hw1_P104.tex 
abort: ../homework/hw1_P104.tex not under root 

Mi primera idea era clonar el repositorio en un nivel superior en la estructura de directorios, añadir archivos al clon, y eliminar el repositorio inicial. Pero incluso la clonación falla:

[email protected]:~/P104/2011/lecture_notes$ hg clone . .. 
abort: destination '..' is not empty 

Así que la pregunta es si hay una forma mercurial-ish de hacer esto con excepción de la creación de un repositorio limpia en otro lugar y la copia de archivos de forma manual?

+1

+1 - ¡Qué manera más increíble de aprender a controlar las versiones. ;) – jmort253

Respuesta

4

Si el directorio raíz de tu repositorio Mercurial está bajo ~/P104/lecture_notes, prefiero:

  1. cambiar el nombre lecture_notes en P104
  2. hacer un subdirectorio lecture_notes
  3. mover todos los archivos existentes en ese nuevo sub directorio
  4. agregar homework y sus archivos en el directorio P104 renombrado
  5. hg add everythi ng

La idea es mantener el repositorio .hg donde es (~/P104/lecture_notes pasaría a denominarse ~/P104/P104) y reorganizar los archivos dentro de ese directorio renombrado.
No es necesario clonar.

+0

Simple de hecho. ¡Gracias! –

7

Me gusta la solución de VonC en la que no mueve la carpeta .hg. Es una solución directa. Aquí es una alternativa en la que hacer movimiento y así tener que cambiar el nombre de un menor número de carpetas:

  1. mover la carpeta .hg hasta ~/P104

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

    Visto desde la perspectiva de Mercurial, tendrá movió todos los archivos de nivel superior a un directorio lecture_notes. También aparecerán repentinamente nuevos archivos sin seguimiento en la carpeta homework.

  2. Deje figura mercurial a cabo los cambios de nombre:

    $ hg addremove 
    

    Esto permitirá detectar correctamente que los archivos que estaban Archivos de alto nivel antes de que viven ahora en el directorio lecture_notes. Los archivos sin seguimiento (y no ignorados) en homework se acaban de agregar.

  3. Guardar los cambios:

    $ hg commit 
    

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

+1

gracias! Es bueno saber sobre 'addremove'. La próxima vez que tenga este problema, usaré esta solución (con la forma que tenía VonC de tener manualmente los archivos 'hg add' y' hg remove') –

Cuestiones relacionadas