Como obter uma versão específica de um arquivo no Mercurial?
114
Eu sou novo no Mercurial. Simplesmente não consigo encontrar o comando certo. Tentei atualizar / finalizar a compra sem sorte. Estou usando o repositório local. obrigado
@Omnifarious: Eu enviei uma versão estável de um arquivo. Em seguida, continuei a trabalhar no arquivo, mas logo percebi que preciso da última versão "boa". Isso pode ser feito por update em svn, mas quando tento hg update, ele diz "0 arquivos ..."
Codismo
Respostas:
153
Eu acho que você quer hg revert -r<rev> <file>(isso vai mudar o arquivo para ficar como estava na revisão dada).
ou apenas hg revert <filename> se você quiser descartar suas alterações atuais e obter as últimas que foram
confirmadas
@BlackTigerX Sem a revisão, um arquivo não modificado não será revertido para nada, mesmo que não seja a versão enviada mais recentemente. Às vezes, eu uso isso para 'escolher' os arquivos entre as revisões, então isso é importante.
user2864740
83
Como o djc disse revertaltera um arquivo no local para corresponder a uma revisão anterior. Se você quiser que ele não esteja no lugar, você pode usar hg cat -r revisionid filename(substituindo o revisionid e o nome do arquivo, é claro), que irá enviar o arquivo para stdout, adequado para redirecionar para qualquer lugar que você desejar.
hg revertrealmente resolve este problema. Mas acho que você está confuso sobre uma gama mais ampla de coisas do que simplesmente a resposta à sua pergunta e deseja tentar responder de forma mais completa.
hg updateé um comando de repositório completo e não funcionará em arquivos individuais. É diferente da subversão svn updatedessa forma. Se você fizer hg --help updateisso, poderá ver que este é o caso porque o comando não aceita nenhum argumento de arquivo. Ele pode ser usado para mover todo o seu repositório para um determinado instantâneo, mas não pode ser usado para fazer isso em apenas um arquivo.
Se você digitar, hg --helpverá uma lista de comandos. É uma lista bastante grande e um tanto assustadora, mas se você a ler, encontrará esta linha:
revert restore individual files or directories to an earlier state
Agora, se você deseja apenas o último estado para fins de comparação, há outro comando no qual você pode estar interessado, e esse é hg cat. Isso permitirá que você imprima o conteúdo de um arquivo em qualquer revisão específica. Você pode então redirecionar sua saída para algum outro arquivo. Em seguida, você pode ter a versão válida anterior de seu arquivo e a versão antiga para comparar lado a lado.
A razão pela qual o Mercurial tem um updatecomando separado é que é possível fazer algo no Mercurial que é impossível no Subversion. Você pode updateir para uma versão anterior, fazer alterações e, em seguida, confirmar. Isso criará um branch. O updatecomando tem o efeito de também alterar a revisão pai do diretório de trabalho atual, bem como alterar o conteúdo de todos os arquivos nesse diretório para as versões da revisão pai.
Isso significa que revertmuda o conteúdo de um arquivo (ou mesmo de todo o repositório se você der ao comando os argumentos corretos), mas deixa a revisão pai da cópia de trabalho atual igual.
Você pode descobrir a revisão pai (ou revisões no caso de uma fusão) da cópia de trabalho atual usando o hg parentscomando.
No Subversion, as revisões são uma progressão estritamente linear. O Mercurial cria ramos rapidamente, e eles são quase tão fáceis de fundir. As revisões formam um DAG, não uma progressão estritamente linear.
Respostas:
Eu acho que você quer
hg revert -r<rev> <file>
(isso vai mudar o arquivo para ficar como estava na revisão dada).fonte
Como o djc disse
revert
altera um arquivo no local para corresponder a uma revisão anterior. Se você quiser que ele não esteja no lugar, você pode usarhg cat -r revisionid filename
(substituindo o revisionid e o nome do arquivo, é claro), que irá enviar o arquivo para stdout, adequado para redirecionar para qualquer lugar que você desejar.fonte
hg revert
realmente resolve este problema. Mas acho que você está confuso sobre uma gama mais ampla de coisas do que simplesmente a resposta à sua pergunta e deseja tentar responder de forma mais completa.hg update
é um comando de repositório completo e não funcionará em arquivos individuais. É diferente da subversãosvn update
dessa forma. Se você fizerhg --help update
isso, poderá ver que este é o caso porque o comando não aceita nenhum argumento de arquivo. Ele pode ser usado para mover todo o seu repositório para um determinado instantâneo, mas não pode ser usado para fazer isso em apenas um arquivo.Se você digitar,
hg --help
verá uma lista de comandos. É uma lista bastante grande e um tanto assustadora, mas se você a ler, encontrará esta linha:Agora, se você deseja apenas o último estado para fins de comparação, há outro comando no qual você pode estar interessado, e esse é
hg cat
. Isso permitirá que você imprima o conteúdo de um arquivo em qualquer revisão específica. Você pode então redirecionar sua saída para algum outro arquivo. Em seguida, você pode ter a versão válida anterior de seu arquivo e a versão antiga para comparar lado a lado.A razão pela qual o Mercurial tem um
update
comando separado é que é possível fazer algo no Mercurial que é impossível no Subversion. Você podeupdate
ir para uma versão anterior, fazer alterações e, em seguida, confirmar. Isso criará um branch. Oupdate
comando tem o efeito de também alterar a revisão pai do diretório de trabalho atual, bem como alterar o conteúdo de todos os arquivos nesse diretório para as versões da revisão pai.Isso significa que
revert
muda o conteúdo de um arquivo (ou mesmo de todo o repositório se você der ao comando os argumentos corretos), mas deixa a revisão pai da cópia de trabalho atual igual.Você pode descobrir a revisão pai (ou revisões no caso de uma fusão) da cópia de trabalho atual usando o
hg parents
comando.No Subversion, as revisões são uma progressão estritamente linear. O Mercurial cria ramos rapidamente, e eles são quase tão fáceis de fundir. As revisões formam um DAG, não uma progressão estritamente linear.
fonte
Para extrair uma revisão específica de um arquivo específico, você pode fazer isso no Windows:
Aqui, 9 é o número da revisão.
Ou melhor ainda:
fonte
Vim aqui tentando pegar a versão anterior, então aqui está o comando exato:
fonte