Como ver o que será atualizado do repositório antes de emitir o comando “svn update”?

115

Fiz alterações em vários arquivos em um repositório SVN do Eclipse.

Em seguida, vou para o diretório do site na caixa do Linux, onde desejo atualizar essas alterações do repositório para o diretório lá.

Eu quero dizer "svn update project100" que irá atualizar os diretórios em "project100" com todos os meus arquivos adicionados e alterados, etc.

NO ENTANTO, não quero necessariamente atualizar as alterações que não fiz. Pensei que poderia dizer "svn status project100", mas quando faço isso obtenho uma lista totalmente diferente de alterações que serão feitas, nenhuma das minhas está na lista, o que é estranho.

Portanto, para ter certeza de que apenas minhas alterações serão atualizadas no diretório da web, sou forçado a navegar para todos os diretórios onde sei que há uma alteração que fiz e atualizar explicitamente apenas esses arquivos, por exemplo, "svn update newfile1.php" etc. o que é tedioso.

Alguém pode lançar alguma luz sobre o procedimento de trabalho padrão aqui, ou seja, como faço para obter uma lista precisa de todas as alterações que estão para ser feitas antes de executar o comando "svn update"? Achei que fosse o comando "status".

Edward Tanguay
fonte

Respostas:

167

Experimentar:

svn status --show-updates

ou (o mesmo, mas mais curto):

svn status -u
Dave Webb
fonte
9
ou mais curto: svn st -u
Kenyakorn Ketsombut
O que significam os X na saída?
IgorGanapolsky de
1
Além disso, use: svn status -q -u... Mostra apenas alterações de atualização e alterações locais que se referem a arquivos pertencentes ao repositório. Você não recebe pontos de interrogação (?) De arquivos não repositórios.
será
56

Dependendo do que você deseja saber entre sua cópia de trabalho e o último repositório do servidor svn, sem atualizar sua cópia de trabalho local, aqui está o que você pode fazer:

se você quiser saber o que foi alterado no repositório do servidor svn, execute o comando:

$ svn st -u

se você quiser saber se o mesmo arquivo foi modificado em sua cópia de trabalho local e no repositório do servidor svn, execute o comando:

$ svn st -u | grep -E '^M {7}\*'

se você deseja obter a lista de arquivos alterados entre uma revisão específica e o HEAD, execute o comando:

$ svn diff -r revisionNumber:HEAD --summarize

se você deseja obter uma lista de arquivos alterados entre revisões específicas, execute o comando:

$ svn diff -r revisionNumber:anotherRevisionNumber --summarize

se você quiser ver o que será atualizado (sem realmente atualizar), execute o comando:

$ svn merge --dry-run -r BASE:HEAD .

se você quiser saber qual conteúdo de um arquivo específico foi alterado no repositório do servidor svn em comparação com sua cópia de trabalho, execute o comando:

$ svn diff -r BASE:HEAD ./pathToYour/file

se você quiser saber quais conteúdos de todos os arquivos foram alterados no repositório do servidor svn em comparação com sua cópia de trabalho, execute o comando:

$ svn diff -r BASE:HEAD .
TianCaiBenBen
fonte
43

Você pode ver o que será atualizado (sem realmente atualizar) emitindo:

svn merge --dry-run -r BASE:HEAD .

Mais detalhes aqui .

Ben Hoffstein
fonte
Acima não funcionou para mim, tive que corrersvn merge --dry-run --revision BASE:HEAD .
Znarkus
3
Obtendo "svn: E195020: Não é possível mesclar na cópia de trabalho de revisão mista [16032: 16061]; tente atualizar primeiro"
Hubert Grzeskowiak
Ótima resposta - uma pena que não funciona em cópias de trabalho de revisão mista. Isso me aprende
Gerard ONeill
2
@HubertGrzeskowiak - Eu amo a ironia q: how do I ... without doing an update?a: first, do an update, then ...:) :) :)
Jesse Chisholm
17

Isso é o que eu estava procurando. Verifiquei o Google primeiro, mas svn helpacabou passando por mim :)

svn diff -r BASE:HEAD .
Jeff
fonte
14

O mesmo, mas mais curto :):

svn st -u
Kenzo
fonte
0

Você pode usar 'svn diff' para ver a diferença entre sua cópia de trabalho e o repositório.

Andrew
fonte
9
Errado. Eles apenas listariam as diferenças entre você e a última vez que sincronizou com o repositório. Você não verá nenhuma diferença que outras pessoas comprometeram com o repositório nesse meio tempo. O OP quer saber quais são essas mudanças, sem aplicá-las via esvn update
dia
@Andrew pretendia sugerir que o OP executasse 'svn diff -r HEAD URL' para ver a diferença entre os arquivos retirados e os que são registrados como HEAD ou versão superior no repositório.
Mac
0

Em teoria, você poderia fazer todas as alterações em um branch que criou para seu próprio uso. Você então estaria razoavelmente certo de que era o único a se comprometer com isso.

O desenvolvimento de recursos IMHO deve ser feito assim.

Em seguida, você pode atualizar esta máquina de destino a partir desta ramificação em vez do tronco.

Rory Becker
fonte