Mercurial (hg) confirma apenas alguns arquivos

119

Estou tentando confirmar apenas alguns arquivos com o Mercurial. Por causa do hg ter adição automática sempre que tento confirmar uma alteração, ele deseja confirmar todos os arquivos. Mas não quero isso porque certos arquivos ainda não estão "prontos".

Há sim

hg commit -I thefile.foo

mas isso é apenas para um arquivo. A melhor maneira para mim seria se eu pudesse desativar a adição automática como no Git. Isso é possível?

Praveen Kumar Purushothaman
fonte
5
usar a extensão de registro? ou você pode especificar arquivos na linha de comandohg ci foo bar baz
tonfa
4
@tonfa, repost o seu comentário como resposta #
Andrei Dziahel
Por favor, não vandalize suas postagens.
amigos estão
Por que você está vandalizando uma pergunta tão legal, cara?
Praveen Kumar Purushothaman

Respostas:

155

Você pode especificar os arquivos na linha de comandos, como tonfa escreve:

$ hg commit foo.c foo.h dir/

Isso simplesmente funciona e é isso que faço o tempo todo. Você também pode usar o --includesinalizador que encontrou e usá-lo várias vezes como este:

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

Você pode até usar um conjunto de arquivos para selecionar os arquivos que deseja confirmar:

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

Não existe uma configuração que desative o comportamento de adição automática e faça o Mercurial funcionar como o Git. No entanto, a extensão mq pode ser interessante. Essa é uma extensão avançada, mas permite que você faça

$ 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

No entanto, eu realmente não uso o MQ para esse fim, pois acho que basta especificar os nomes de arquivos na linha de comando.

Martin Geisler
fonte
Que comportamento de "comportamento de adição automática"? O hg costumava adicionar arquivos automaticamente? Porque agora você precisa fazê-lo explicitamente ou eles não serão rastreados.
MJ #
1
@mpen Eu acho que ele significa como gh adiciona automaticamente cada arquivo modificado para um commit, git ao contrário, em que você tem que adicionar manualmente os arquivos modificados para o próximo commit, e pode deixar alguns arquivos modificados não confirmadas
simpleuser
24

Se você deseja confirmar alguns arquivos e excluir muitos outros, liste explicitamente os arquivos que deseja confirmar. -Isó é necessário se você deseja usar padrões em vez de arquivos.

Se você deseja confirmar muitos arquivos e excluir apenas alguns, usar -Xé mais conveniente.

Por exemplo, dado um repositório contendo "arquivo_1", "arquivo_2" e "arquivo_3", o seguinte é equivalente, mas o último é mais fácil / rápido de digitar:

hg commit file_1 file_2
hg commit -X file_3
Rob W
fonte
8

A partir do 3.8, você também pode usar hg commit --interactivepara selecionar os arquivos (antes do 3.8, você pode usar a extensão do crecord para obter uma funcionalidade semelhante). O sinalizador --interactive(ou apenas -i) fará com que o hg solicite os arquivos que você deseja incluir no commit. Como um bônus adicional, você pode até incluir / excluir partes nos arquivos.

Aqui está um exemplo de como a interface se parece. Observe que esta é uma captura de tela antiga (na verdade, do crecord), portanto a interface mudou um pouco (mas o básico é o mesmo). captura de tela do crecord

Observe que para obter essa interface, você precisa da interface de maldições ativada. Você pode fazer isso para uma execução única com hg commit --config ui.interface=curses --interactiveou geralmente adicionando o seguinte ao seu .hgrc:

[ui]
interface = curses
studgeek
fonte