Existe um comando para listar os conflitos de SVN?

116

Alguém conhece um comando SVN para listar os conflitos atuais entre o repo e a cópia de trabalho?

obrigado

azz0r
fonte

Respostas:

168

No Linux, se você quiser ver apenas os conflitos, canalize o status por meio de grep.

svn status | grep -P '^(?=.{0,6}C)'
sobrinha
fonte
6
Adicionar -A 1argumentos grep irá mostrar a você a linha após a linha de conflito, que às vezes está relacionada ao conflito.
Wesley Hartford
4
-P diz ao grep para usar perl regex, ^ = início da string, (? =) Inclui o padrão lookahead que é. {0,6} qualquer 0 a 6 caracteres e a letra C, que é o indicador de conflitos
Pete
5
Qual é o objetivo de usar a parte de antevisão? Não '^.{0,6}C'funcionou tão bem?
hans_meine
2
Para usar este mesmo comando no OSX, você precisa instalar GNU grep porque o grep BSD não tem o sinalizador perl regex (-P)
G.Rassovsky
4
No Windows, a versão Powershell disso é(svn status) -Match '^(?=.{0,6}C)'
bstoney
28

Basta usar grep!

svn st | grep '^C'
Joseph Lust
fonte
2
@sid, é regexp para 'começa com', o que significa que o primeiro caractere é um C
Joseph Lust
1
Eu estava pensando se isso poderia perder arquivos com status "A + C" .. Isso é um problema ..
Raghav
2
egrep '^ [AC +] +' faria o truque então, embora eu geralmente não tenha problemas de A + C.
Joseph Lust
1
Simples de lembrar e suficiente para a maioria dos casos. Obrigado @JosephLust.
csonuryilmaz
11

Você pode tentar svn merge -r <revision> --dry-runver o que acontece dessa maneira.

CorsiKa
fonte
Não parece funcionar no Windows com svn 1.7.8. Registro de erros: svn: E205001: Tente 'svn help' para obter mais informações svn: E205001: Fonte de mesclagem necessária
kakyo
4

Se você tiver uma confirmação de http://betterthangrep.com/ , você pode fazer o seguinte

svn st | ack '^C'
bananaaus
fonte
4

Para uso do Windows PowerShell:

svn status | sls -Pattern '^(?=.{0,6}C)'
Ayo I
fonte
3

Se você já fundiu, você pode usar

svn status

e veja um "C" maiúsculo para conflito, mas normalmente você não deve ver esse tipo em sua cópia de trabalho.

Khmarbaise
fonte
1

Talvez seja possível usar svn merge --dryrunao especificar a URL do repositório com todas as revisões após a última com a qual você atualizou.

Por exemplo, se o seu WC atual é baseado na revisão 147, isso poderia funcionar:

svn merge -r 148:HEAD http://url.to.repo/repo/

Não é nada que eu mesmo fiz, então você terá que tentar por si mesmo.

Anders Abel
fonte
0

Se você não fundiu ou atualizou os arquivos, use o comando abaixo

svn status --show-updates | grep -P '.*(?=.*M)(?=.*\*).*'

Como diminutivo

svn st -u | grep -P '.*(?=.*M)(?=.*\*).*'

Detalhes O
SVN não marca o status do conflito (C) até que você atualize o (s) arquivo (s) usando svn update.
Até então, os status são mostrados como abaixo

+---+------+---------------+---------------+
| M |      |               | 23246   file1 |
+---+------+---------------+---------------+
|   |      | *             | 23233   file2 |
+---+------+---------------+---------------+
| M |    * | 23233   file3 |               |
+---+------+---------------+---------------+

M - Modificado em local
* - Atualizações / entrada do remoto
M e * - Modificado em local, bem como em remoto - Este é um conflito, mas o svn ainda não marcou

Sameer Khan
fonte
-2

no mac

$ svn status | grep -e '^!'

fez o trabalho

aqui está o homem para grep:

uso: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C [num]] [-e padrão] [-f arquivo] [--binary-files = value] [--color = when] [--contexto [= num]] [--diretórios = ação] [--label] [--line-buffered] [--nulo] [padrão] [arquivo ...]

o signo de verão
fonte
Como combinar um ponto de exclamação ajudará a encontrar itens em conflito?
anddam
^!é a regex para cada linha que começa com !. Todas as linhas em conflito começam com!
thesummersign
2
Não, acabei de resolver os conflitos em um repo 1.9 e as linhas de conflito estavam começando com apenas "C".
anddam