Qual é a diferença entre hg forget e hg remove?

313

Quero que o mercurial remova vários arquivos do estado atual do repositório. No entanto, quero que os arquivos existam no histórico anterior.

Como forgete removediferem, e eles podem fazer o que eu quero?

Paul Nathan
fonte
27
Não se preocupe, você não pode remover um arquivo do histórico anterior no Mercurial - o histórico geralmente é imutável, a menos que você comece a usar extensões.
9139 Martin Geisler

Respostas:

348

' hg forget' é apenas uma abreviação de ' hg remove -Af'. Na hg removeajuda ' ':

... e -Af podem ser usados ​​para remover arquivos da próxima revisão sem excluí-los do diretório ativo.

Bottom line: ' remove' exclui o arquivo da sua cópia de trabalho no disco (a menos que você use -Af) e ' forget' não.

Ry4an Brase
fonte
7
"hg forget" é reintroduzido no Mercurial 1.3 como uma maneira mais fácil de fazer "hg remove -Af". Ele agenda o arquivo para exclusão sem removê-lo da cópia de trabalho.
9139 Martin Geisler
5
Fico feliz em ouvir isso. 'remove -Af' (e toda a tabela de opções na página de ajuda 'remove') é / era loucura.
Ry4an Brase
32
@ Ry4an: Sério, foi ridículo. Eu contribuí com o patch que reintroduziu 'esquecer'. Quando eu estava produzindo, percebi que -Af fazia todo sentido no código, mas, na visão de um usuário, era completamente ridículo.
9788 Steve Losh
10
Heh, é o que há de tão bom em mercurial - as pessoas estão pensando ativa e iterativamente sobre o que faz sentido do ponto de vista do usuário. Obrigado por corrigir esse.
Ry4an Brase 17/07/09
9
Arquivos de configuração de compilação local ou algo parecido? Caminhos para ferramentas locais que diferem de sistema para sistema? Adicionou acidentalmente um arquivo de log que você não deseja no controle de origem, mas deseja salvar? Eu acho que isso acontece.
Ry4an Brase 22/03/10
42

A melhor maneira de colocar é que hg forgeté idêntica para hg remove exceto que ele deixa os arquivos para trás em sua cópia de trabalho. Os arquivos são deixados para trás como arquivos não rastreados e agora podem opcionalmente ser ignorados com um padrão .hgignore.

Em outras palavras, não sei dizer se você usou hg forgetou hg removequando eu puxo de você. Um arquivo que você correu hg forgetem vão ser apagados quando eu atualizar para que changeset - exatamente como se você tivesse usado hg removeem seu lugar.

Martin Geisler
fonte
27

A partir da documentação, você pode aparentemente usar qualquer comando para manter o arquivo no histórico do projeto. Parece que você deseja remover, pois também exclui o arquivo do diretório de trabalho.

Do livro Mercurial em http://hgbook.red-bean.com/read/ :

A remoção de um arquivo não afeta seu histórico. É importante entender que a remoção de um arquivo tem apenas dois efeitos. Ele remove a versão atual do arquivo do diretório ativo. Ele impede que o Mercurial rastreie alterações no arquivo, a partir da próxima confirmação. A remoção de um arquivo não altera de maneira alguma o histórico do arquivo.

A página de manual hg (1) diz isso sobre esquecer:

Marque os arquivos especificados para que eles não sejam mais rastreados após a próxima confirmação. Isso remove apenas os arquivos da ramificação atual, não de todo o histórico do projeto e não os exclui do diretório de trabalho.

E isso sobre remover:

Agende os arquivos indicados para remoção do repositório. Isso remove apenas os arquivos da ramificação atual, não de todo o histórico do projeto.

Jason Catena
fonte
3

Se você usar "hg remove b"um arquivo com o status "A", o que significa que ele foi adicionado, mas não confirmado, o Mercurial responderá:

  not removing b: file has been marked for add (use forget to undo)

Essa resposta é uma explicação muito clara da diferença entre remover e esquecer.

Entendo que "hg forget"é para desfazer um arquivo adicionado, mas não confirmado, para que não seja rastreado pelo controle de versão; while "hg remove"é para retirar um arquivo confirmado do controle de versão.

Este encadeamento tem um exemplo para usar hg removeem arquivos de 7 tipos diferentes de status.

gm2008
fonte
2

Um arquivo pode ser rastreado ou não, você usa hg add para rastrear um arquivo e hg remove ou hg se esqueça de desmarcá-lo. O uso do hg remove sem flags excluirá o arquivo e o rastreará, o hg forget simplesmente o rastreará sem excluí-lo.

Tao
fonte
3
Não sei por que você sentiu a necessidade de adicionar essa citação quando o próprio homem já entrou na conversa, mas ei, o que quer que flutue no seu barco.
Nathan Tuggy