Mercurial (hg) esegue il commit solo di alcuni file


119

Sto cercando di eseguire il commit solo di determinati file con Mercurial. A causa dell'aggiunta automatica di hg ogni volta che provo a eseguire il commit di una modifica, desidera eseguire il commit di tutti i file. Ma non lo voglio perché alcuni file non sono ancora "pronti".

C'è

hg commit -I thefile.foo

ma questo è solo per un file. Il modo migliore per me sarebbe se potessi disattivare l'aggiunta automatica come in Git. È possibile?


5
utilizzare l'estensione record? oppure puoi specificare i file sulla riga di comandohg ci foo bar baz
tonfa

4
@tonfa, ripubblica il tuo commento come risposta
Andrei Dziahel

Per favore, non vandalizzare i tuoi post.
Glorfindel

Perché stai vandalizzando una domanda così carina, amico?
Praveen Kumar Purushothaman

Risposte:


155

È possibile specificare i file sulla riga di comando, come scrive tonfa:

$ hg commit foo.c foo.h dir/

Funziona ed è quello che faccio sempre. Puoi anche usare il --includeflag che hai trovato e puoi usarlo più volte in questo modo:

$ hg commit -I foo.c -I "**/*.h"

Puoi persino utilizzare un set di file per selezionare i file che desideri inviare:

$ hg commit "set:size(1k - 1MB) and not binary()"

Non esiste alcuna impostazione che disattivi il comportamento di aggiunta automatica e farà funzionare Mercurial come fa Git. Tuttavia, l' estensione mq potrebbe essere di interesse. È un'estensione avanzata, ma ti permette di farlo

$ hg qnew feature-x     # create new patch
$ hg qrefresh -s foo.c  # add a file to the current patch
$ hg qrefresh -s bar.c  # add another file to the patch
$ hg qfinish -a         # convert applied patches to normal changesets

Non uso davvero MQ per questo scopo, tuttavia, poiché penso che sia sufficiente specificare i nomi dei file sulla riga di comando.


Quale comportamento di "aggiunta automatica"? Hg era usato per aggiungere automaticamente i file? Perché ora devi farlo esplicitamente o non verranno tracciati.
mpen

1
@mpen Penso che intenda come gh aggiunge automaticamente ogni file modificato a un commit, a differenza di git in cui devi aggiungere manualmente file modificati al commit successivo, e può lasciare alcuni file modificati non
salvati

24

Se desideri eseguire il commit di alcuni file ed escluderne molti altri, elenca esplicitamente i file che desideri eseguire il commit. -Iè necessario solo se si desidera utilizzare modelli anziché file.

Se si desidera eseguire il commit di molti file ed escluderne solo alcuni, -Xè più conveniente utilizzare.

Ad esempio, dato un repository contenente "file_1", "file_2" e "file_3", i seguenti sono equivalenti, ma quest'ultimo è più facile / veloce da digitare:

hg commit file_1 file_2
hg commit -X file_3

8

A partire dalla 3.8 puoi anche usare hg commit --interactiveper selezionare i file (prima della 3.8 puoi usare l'estensione crecord per funzionalità simili). Il flag --interactive(o solo -i) farà sì che hg ti chieda i file che vuoi includere nel commit. Come bonus aggiuntivo puoi anche includere / escludere blocchi all'interno dei file.

Ecco un esempio di come appare l'interfaccia. Nota che questo è un vecchio screenshot (di crecord in realtà) quindi l'interfaccia è leggermente cambiata (ma le basi sono le stesse). screenshot di crecord

Nota per ottenere quell'interfaccia devi abilitare l'interfaccia curses. Puoi farlo per singola corsa con hg commit --config ui.interface=curses --interactiveo in generale aggiungendo quanto segue al tuo .hgrc:

[ui]
interface = curses
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.