Mercurial - todos os arquivos alterados em um changeset?


Respostas:


149

Se você quiser listar apenas os arquivos que foram alterados, então você deve usar o "comando de status" O seguinte irá listar as mudanças nos arquivos na revisão REV

hg status --change REV

13
+1, mas o OP provavelmente quer o sinalizador -n/ --no-statustambém.
Niall C.

7
Para facilitar a cópia:hg status --no-status --change REV
zastrowm

+1 Isso é muito mais fácil de digitar do hg status --rev REV~1:REVque eu costumava fazer.
Patrick Oscity

3
usar '.' para REV atual. significando -hg status --change .
zaxy78

16

Basta remover pdo seu hg log -vprpara mostrar a lista de arquivos. -psignifica mostrar patch. Você também pode usar um modelo para formatar a saída de acordo com sua preferência.


3
Acho que você precisará do seguinte modelo: --template 'arquivos: {arquivos} \ n'
Ton Plomp

1
Eu acredito que os {arquivos} fazem parte do modelo padrão de sinalização -v
eskhool

2
hg log -r. --template '{join (files, "\ n")}' para nova linha separar os arquivos
Foxichu

1
O comentário @Foxichu funcionou para mim, mas foi meio hackeado. na verdade, a resposta superior - hg status --change .funcionou melhor e forneceu um prefixo de ação de arquivo (A \ M \ D etc) e um caminho relativo melhor
zaxy78

13

Eu sei que a questão é para um único conjunto de alterações, mas se você quiser que todos os arquivos modificados para uma variedade de conjuntos de alterações, você pode fazer

hg status --rev 1 --rev 10 -m

2
Terrivelmente ruim. Arquivos modificados no intervalo são hg log -r BEGIN:END --template "{files}\n"como @ geoffrey-zheng e @ton escreveram há dois anos !!!
Lazy Badger

Me desculpe por isso. Presumindo que sua resposta fosse para o conjunto de alterações único.
Nick DeVore

1
Na minha opinião, essa resposta não é tão terrível. hg status --rev BEGIN --rev ENDé: 1. muito mais fácil de lembrar do que hg log -r BEGIN:END --template "{files}\n"; 2. imprime os arquivos em linhas separadas sem usar sed(@Eric Lawler) ou join()(@Foxichu); 3. sem o -msinalizador, ele exibe não apenas arquivos modificados, mas também adicionados e removidos (a bela coloração padrão se aplica aqui também); 4. existem -ae -rsinalizadores que permitem diferentes filtros; 5. se alguém não quiser o prefixo de status, existe a -nopção que o suprime.
Michał Wróbel

9

Revisão Comprometida Atual

hg status --change .

.é uma abreviatura para a rotação atual, assim como @HEADno Git

Revisão Não Comprometida Atual

hg status

Revisão Arbitrária Comprometida

hg status --change REV_ID

1
resposta mais simples e precisa!
zaxy78

2

Encontrei essa pergunta no Google por um conceito semelhante. Para mostrar todos os arquivos que foram alterados por meio de uma série de changesets, é tão fácil quanto:

hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n" | sed -e 's/ /\n/g' | sort -d | uniq
  1. hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n"irá mostrar a você uma lista de cada arquivo alterado ou adicionado em cada changeset, de [start rev] a [end rev], com cada arquivo de changeset em uma nova linha. Troque {file_mods}{file_adds}com {files}para mostrar todos os arquivos modificados, adicionados ou removidos.
  2. sed -e 's/ /\n/g' irá dividir todos os arquivos para mostrar em linhas separadas e
  3. sort irá, er, classificar a lista para você para que possamos filtrar a lista com uniq
  4. uniq irá filtrar a lista para remover duplicatas - arquivos que foram alterados em mais de uma revisão.

Esta solução une a última modificação com o primeiro arquivo adicionado. Além disso, ele não lida adequadamente com espaços em nomes de arquivos. Uma --templatesolução baseada sem essas deficiências poderia ser construída usando join()como sugerido por @Foxichu.
Michał Wróbel

1

Eu sei que esta pergunta é uma pergunta antiga e estou surpreso que ninguém apenas ofereceu a forma de código modificado OP. Eu obtive uma lista de arquivos modificados / adicionados / removidos (não rotulados, que são quais) apenas executando hg log -v. Ou o que eu realmente precisava hg log -v -l5para ver os arquivos que foram modificados / adicionados / removidos nos últimos 5 commits (incluindo aqueles que ainda não coloquei no repositório).


"ninguém apenas ofereceu a forma de código modificado OP" - @Geoffrey Zheng fez exatamente isso ~ 1h após a pergunta ser postada
Michał Wróbel

-2

Se você for como a maioria das lojas, você usa um sistema de bilheteria para rastrear as alterações. Se você souber o número do tíquete e quiser encontrar todos os commits associados a esse tíquete (supondo que você inclua o número do tíquete na mensagem de confirmação), você pode usar:

hg log -k TICKET_NUMBER

Isso exibe todas as revisões associadas ao ticket. No entanto, ele não lista os arquivos. Você poderia usar uma das respostas acima para obter a lista de arquivos associados às revisões.

Para tornar mais simples, porém, combinando as informações das respostas anteriores, você poderia fazer o seguinte para pesquisar commits, incluindo arquivos alterados:

hg log -vk TICKET_NUMBER

Isso está relacionado à questão. O autor da postagem perguntou como obter arquivos em um changeset. Os conjuntos de alterações geralmente estão relacionados a tickets. Minha solução mostra como obter arquivos relacionados aos changesets associados a um ticket.
iDimensionz
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.