2012-02-02 2 views
6

Possiedo un repository mercurial a cartella singola. La struttura di directory è semplice:Modifica di una struttura di directory in Mercurial

P104 
    lecture_notes 
    files under version control live here 

Dopo un po 'mi rendo conto che voglio avere due directory all'interno del repository, come questo

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

Ora, se io sto solo cercando di aggiungere file al repository, non riesce:

[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 

la mia prima idea era quella di clonare il pronti contro termine di un livello nella struttura di directory, aggiungere file al clone, ed eliminare il repo originale. Ma anche la clonazione fallisce:

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

Quindi la domanda è se c'è un modo Mercurial-ish di fare questo altro che creare un repository pulito da qualche altra parte e file manualmente la copia?

+1

+1: un modo fantastico per imparare il controllo della versione. ;) – jmort253

risposta

4

Se la directory principale del repo Mercurial è sotto ~/P104/lecture_notes, avrei preferito:

  1. rinominare lecture_notes in P104
  2. fare una sottodirectory lecture_notes
  3. spostare tutti i file esistenti nel nuovo sub- directory
  4. aggiungere homework ed i suoi file nella directory P104 rinominato
  5. hg add everythi ng

L'idea è di mantenere il .hg pronti contro termine in cui è (~/P104/lecture_notes rinominato in ~/P104/P104) e riorganizzare i file all'interno di quella directory rinominato.
Non è necessario clonare.

+0

Semplice davvero. Grazie! –

7

Mi piace la soluzione VonC in cui non si sposta la cartella .hg. È una soluzione semplice. Ecco un alternativo in cui si fare mossa e così hanno rinominare un minor numero di cartelle:

  1. spostare la cartella .hg fino a ~/P104

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

    Visto dalla prospettiva di Mercurial, si dovrà ha spostato tutti i file di livello superiore in una directory lecture_notes. Ci saranno anche improvvisamente nuovi file non tracciati nella cartella homework.

  2. Let figura Mercurial fuori del cambiamento di nome:

    $ hg addremove 
    

    Ciò correttamente rilevare che i file che sono stati i file di alto livello prima d'ora vivono nella directory lecture_notes. I file non tracciati (e non ignorati) in homework sono stati aggiunti.

  3. Salvare le modifiche:

    $ hg commit 
    

Il "trucco" generale è che i file nella copia di lavoro sono visti relativamente alla directory .hg. Pertanto spostando la directory .hg nella gerarchia del file system, spostiamo in modo efficace i file di copia di lavoro nella gerarchia all'interno della copia di lavoro.

+1

grazie! Buono a sapersi su 'addremove'. La prossima volta che avrò questo problema, userò questa soluzione (con il modo VonC ho dovuto manualmente i file 'hg add' e' hg remove') –