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 forget
e remove
diferem, e eles podem fazer o que eu quero?
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 forget
e remove
diferem, e eles podem fazer o que eu quero?
Respostas:
' hg forget
' é apenas uma abreviação de ' hg remove -Af
'. Na hg remove
ajuda ' ':
... 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.
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 forget
ou hg remove
quando eu puxo de você. Um arquivo que você correu hg forget
em vão ser apagados quando eu atualizar para que changeset - exatamente como se você tivesse usado hg remove
em seu lugar.
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.
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 remove
em arquivos de 7 tipos diferentes de status.
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.