2010-12-29 6 views
9

Se aggiungo un nuovo file alla radice del mio progetto, appare con uno stato ? in hg st e viene aggiunto con hg add.Come ottenere mercurial per notare i file aggiunti nelle sottodirectory? (hg st, hg add)

Tuttavia, se aggiungo un nuovo file in una sottodirectory, non viene visualizzato in hg st e viene aggiunto solo se aggiungo esplicitamente il file (nemmeno se aggiungo la directory contenente il file).

Come è possibile ottenere mercurial per notare i file nelle sottodirectory, in modo simile a come li subisce Subversion?

Grazie

+0

Si verifica ciò per qualsiasi sottodirectory (ad esempio indipendentemente dal nome) o solo per quelli specifici? –

+0

Si prega di inviare un esempio specifico che illustra il problema, a partire da un 'hg init' come nell'esempio nella mia risposta/ipotesi. –

+0

Lo stato 'hg --all' ti fornisce un elenco per il file? – Matt

risposta

14

Beh, pianura hg add senza argomenti aggiuntivi aggiunge file in sotto-directory pure, aggiunge praticamente tutti i file con stato sconosciuto per essere monitorati.

Tuttavia, se si specifica una maschera semplice, funziona solo sulla directory di lavoro corrente (cioè la directory di lavoro del comando hg, non la directory di lavoro associata al repository), quindi se si è attualmente in la sottodirectory, aggiungerà quei file, se siete nella directory root, aggiungerà invece quei file.

In altre parole, questo:

hg add test* 

opera solo sui file nella directory che stai attualmente situato.

È possibile ignorare che il comportamento specificando una maschera che dice hg di operare su sottodirectory:

hg add **/test* 

Questo dice "aggiungere tutti i file che corrispondono a 'test *' nella directory corrente e tutti i sub- le directory.

Se si rimuove uno degli asterischi, si opera solo su sub-directory della directory di lavoro corrente.

sarebbe utile se hai postato quello comandi specifici si eseguisse, e l'uscita, se del caso, e l'output di hg st prima e dopo.

+1

Non sto applicando alcuna maschera. Aggiungo semplicemente un file in una sottodirectory e faccio un 'hg st', e non vedo output (nemmeno uno stato'? 'Sconosciuto per il file). Se faccio la stessa cosa nella directory radice, vedo il file con uno stato sconosciuto. Vale la pena menzionare che la sottodirectory non è ignorata nel .hgignore –

+0

Qual è il nome della directory, e qual è il nome del file, e puoi pubblicare il tuo file .hgignore, per ogni evenienza? –

+0

Oh, e controlla anche la risposta di @Mark Tolonen qui, potrebbe essere che questo è il tuo problema. –

3

Hai anche hg init nella sottodirectory? Se è così, non farlo. Qui di seguito illustra il problema:

C:\>hg init project 
C:\>cd project 
C:\project>hg init sub 
C:\project>echo >file1 
C:\project>echo >sub\file2 
C:\project>hg st 
? file1 

eliminare la directory della sottocartella .hg per risolvere il problema:

C:\project>rd /s/q sub\.hg 
C:\project>hg st 
? file1 
? sub\file2 

A differenza di Subversion, Mercurial utilizza solo una directory .hg alla base di un progetto.

+0

Grazie Mark ma no, non ho 'hg init' alcun subdir, e non ci sono directory' .hg' se non nella mia root. Qualche altra idea? –

+0

L'unica idea è di pubblicare un esempio completo dei comandi che portano al problema. Hai un .hgignore? Forse qualcosa è accidentalmente corrispondente. Cosa succede se, in una nuova directory, si 'hg init', creare un file, creare una sottodirectory, creare un file nella sottodirectory e' hg status'? Questo dovrebbe mostrare entrambi i file. –