Como resolver a mensagem "edição local, exclusão recebida na atualização"


293

Quando faço um svn status ., recebo o seguinte:

!     C auto-complete-config.elc
      >   local edit, incoming delete upon update
!  +  C auto-complete.elc
      >   local edit, incoming delete upon update
!  +  C popup.elc
      >   local edit, incoming delete upon update
!  +  C fuzzy.elc
      >   local edit, incoming delete upon update

basicamente, esses arquivos não devem estar no repositório. Um desenvolvedor os removeu. Então, acho que fiz um svn rm ...após o fato por engano (deveria ter feito svn update .).

Então agora, quando svn status .recebo, recebo essas mensagens de conflito de árvore.

Encontrei o documento aqui, mas não sei como mesclá-lo de acordo com o documento.

como se livrar deles?

Acho que minha cópia de trabalho está sincronizada com o repositório. Não sei por que essas mensagens são exibidas. Esses arquivos devem ser removidos e removidos tanto quanto eu sei em todos os lugares. Eu tentei svn update .e svn revert .ainda recebo essa mensagem quando o faço svn status ..


1
A resposta de Lesmana também funciona para a mensagem"local missing or deleted or moved away, incoming dir edit upon merge"
Warlike Chimpanzé

Respostas:


434

Versão curta:

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update
$ touch foo bar
$ svn revert foo bar
$ rm foo bar

Se o conflito é sobre diretórios em vez de arquivos, substitua touchpor mkdire rmcom rm -r.


Nota: o mesmo procedimento também funciona para a seguinte situação:

$ svn st
!     C foo
      >   local delete, incoming delete upon update
!     C bar
      >   local delete, incoming delete upon update

Versão longa:

Isso acontece quando você edita um arquivo enquanto outra pessoa o exclui e confirma primeiro. Como um bom cidadão de svn, você faz uma atualização antes de um commit. Agora você tem um conflito. Perceber que excluir o arquivo é a coisa certa a ser excluída da sua cópia de trabalho. Em vez de se contentar, o svn agora reclama que os arquivos locais estão ausentes e que há uma atualização conflitante que, em última análise, deseja ver os arquivos excluídos. Bom trabalho svn.

svn resolveNão deve funcionar, por qualquer motivo, você pode fazer o seguinte:

Situação inicial: faltam arquivos locais, a atualização está em conflito.

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

Recrie os arquivos conflitantes:

$ touch foo bar

Se o conflito for sobre diretórios, substitua touchpor mkdir.

Nova situação: Arquivos locais a serem adicionados ao repositório (sim, certo, svn, o que você disser), atualização ainda conflitante.

$ svn st
A  +  C foo
      >   local edit, incoming delete upon update
A  +  C bar
      >   local edit, incoming delete upon update

Reverta os arquivos para o estado que o svn gosta deles (isso significa que foi excluído):

$ svn revert foo bar

Nova situação: os arquivos locais não conhecidos pelo svn, a atualização não é mais conflitante.

$ svn st
?       foo
?       bar

Agora podemos excluir os arquivos:

$ rm foo bar

Se o conflito for sobre diretórios, substitua rmpor rm -r.

svn não reclama mais:

$ svn st

Feito.


8
Isso também funciona quando o conflito é para um diretório. Em vez de tocar em foo bar, faça mkdir foo e mkdir bar . Tudo o resto é igual.
Vipin Johney

você pode usar svn st | grep ! | cut -f 7 -d' ' | xargs touchcomo um liner para tocar em todos os arquivos ausentes
Tibor Blenessy

Lembre-se de diretórios também o fazem rm -r foo bar(ou rmdir foo barno Windows ou se você gosta do Windows).
trysis

Essa resposta salvou minha sanidade. Obrigado.
27418 Sam

159

Tente resolver o conflito usando

svn resolve --accept=working PATH

obrigado. essa parece ser a solução certa. (não sabia sobre a opção "resolver" antes. Marquei-a como resposta. Embora, por algum motivo, não tenha funcionado para mim, provavelmente porque minha árvore de cópias de trabalho foi corrompida ou outras coisas ... no final, resolvi apenas excluindo o diretório e faça uma atualização #
Xah Lee

1
Inicialmente não funcionou para mim, então verifiquei outra cópia do ramo svn em uma pasta temporária. Então eu apaguei o PATH causando conflito e confirmei as alterações. Depois disso, voltei à minha cópia original e executei este comando. Ele trabalhou com a mensagem "Resolvido estado de conflito de PATH" Isso funciona, obrigado :)
Durin

Meu entendimento é que não teria importância se o original fosse excluído ou não no repositório, porque "resolve" funciona apenas na cópia de trabalho.
govi

solução perfeita para mim
Sergio Álvarez

20

Acabei de receber o mesmo problema e descobri que

$ svn revert foo bar

resolveu o problema.

svn resolve não funcionou para mim:

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

$ svn resolve --accept working
svn: Try 'svn help' for more info
svn: Not enough arguments provided

$ svn resolve --accept working .

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

$ svn resolve --accept working foo
Resolved conflicted state of 'foo'

$ svn st
!  +    foo
!  +  C bar
      >   local edit, incoming delete upon update

2

Se você não tiver feito alterações dentro do diretório em conflito, você também pode rm -rf conflicts_in_here/e depois svn up. Isso funcionou para mim, pelo menos.


1

Você pode forçar a reverter seu diretório local para svn.

 svn revert -R your_local_path

Obrigado, também me ajudou a resolver A + C path/to/dire #> local dir edit, incoming dir delete or move upon update
232323 RAM197

0

Portanto, você pode simplesmente reverter o arquivo excluído, mas lembre-se: se você estiver trabalhando em qualquer tipo de projeto com um arquivo de projeto definido (como iOS), a reversão do arquivo o adicionará à estrutura de pastas do sistema, mas não à estrutura de arquivos do projeto. etapas adicionais podem ser necessárias se você estiver nesse caso


0

Esse problema geralmente ocorre quando tentamos mesclar outras alterações de ramificação de um diretório errado.

Ex:

Branch2\Branch1_SubDir$ svn merge -rStart:End Branch1
         ^^^^^^^^^^^^
   Merging at wrong location

Um conflito que é lançado sobre sua execução é:

Tree conflict on 'Branch1_SubDir'
   > local missing or deleted or moved away, incoming dir edit upon merge

E quando você seleciona q para sair da resolução , você obtém o status como:

 M      .
!     C Branch1_SubDir
      >   local missing or deleted or moved away, incoming dir edit upon merge
!     C Branch1_AnotherSubDir
      >   local missing or deleted or moved away, incoming dir edit upon merge

o que significa claramente que a mesclagem contém alterações relacionadas a Branch1_SubDire Branch1_AnotherSubDir, e essas pastas não foram encontradas dentro Branch1_SubDir(obviamente, um diretório não pode estar dentro de si).

Como evitar esse problema em primeiro lugar:

Branch2$ svn merge -rStart:End Branch1
 ^^^^
Merging at root location

A correção mais simples para esse problema que funcionou para mim:

svn revert -R .
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.