Come risolvere il messaggio "modifica locale, eliminazione in entrata su aggiornamento"


293

Quando faccio un svn status ., ottengo questo:

!     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

fondamentalmente, questi file non dovrebbero essere nel repository. Uno sviluppatore li ha rimossi. Quindi, penso di aver fatto un svn rm ...errore dopo il fatto (invece avrei dovuto farlo svn update .).

Così ora, quando lo faccio svn status ., ricevo questi messaggi di conflitto dell'albero.

Ho trovato il documento qui, ma non sono sicuro di come "unirlo" secondo il documento.

Come sbarazzarsi di loro?

Penso che la mia copia di lavoro sia sincronizzata con il repository. Non so perché vengano visualizzati questi messaggi. Questi file dovrebbero essere rimossi e rimossi per quanto ne so ovunque. Ho provato svn update .e svn revert .ma ricevo ancora questo messaggio quando lo faccio svn status ..


1
La risposta di lesmana funziona anche per il messaggio"local missing or deleted or moved away, incoming dir edit upon merge"
Warlike Chimpanzee,

Risposte:


434

Versione breve:

$ 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 il conflitto riguarda le directory anziché i file, sostituirli touchcon mkdire rmcon rm -r.


Nota: la stessa procedura funziona anche per la seguente situazione:

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

Versione lunga:

Ciò accade quando si modifica un file mentre qualcun altro lo ha eliminato e lo ha eseguito per primo. Come un buon cittadino svn fai un aggiornamento prima di un commit. Ora hai un conflitto. Rendersi conto che l'eliminazione del file è la cosa giusta da fare per eliminare il file dalla copia di lavoro. Invece di essere contenuto svn ora si lamenta che mancano i file locali e che esiste un aggiornamento in conflitto che alla fine vuole vedere i file eliminati. Ottimo lavoro svn.

svn resolveNon dovrebbe funzionare, per qualsiasi motivo, puoi fare quanto segue:

Situazione iniziale: mancano i file locali, l'aggiornamento è in conflitto.

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

Ricrea i file in conflitto:

$ touch foo bar

Se il conflitto riguarda le directory, sostituiscile touchcon mkdir.

Nuova situazione: file locali da aggiungere al repository (sì, svn, qualunque cosa tu dica), aggiornamento ancora in conflitto.

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

Ripristina i file allo stato che piace a svn (ciò significa che sono stati eliminati):

$ svn revert foo bar

Nuova situazione: file locali non noti a svn, l'aggiornamento non è più in conflitto.

$ svn st
?       foo
?       bar

Ora possiamo eliminare i file:

$ rm foo bar

Se il conflitto riguarda le directory, sostituiscile rmcon rm -r.

svn non si lamenta più:

$ svn st

Fatto.


8
Questo funziona anche quando il conflitto riguarda una directory. Invece di toccare foo bar fai mkdir foo e mkdir bar . Tutto il resto è uguale.
Vipin Johney,

puoi usare svn st | grep ! | cut -f 7 -d' ' | xargs touchcome una sola riga per toccare tutti i file mancanti
Tibor Blenessy,

Ricorda anche per le directory rm -r foo bar(o rmdir foo barsu Windows o se ti piace Windows).
trysis,

Questa risposta mi ha salvato la sanità mentale. Grazie.
Sam,

159

Prova a risolvere il conflitto usando

svn resolve --accept=working PATH

Grazie. quella sembra essere la soluzione giusta. (non sapevo prima dell'opzione "risolvi". L'ho contrassegnato come risposta. Anche se, per qualche motivo, non ha funzionato per me, probabilmente perché il mio albero delle copie funzionante è stato corrotto o quant'altro ... alla fine l'ho risolto semplicemente cancellando la
directory ed eseguendo

1
Inizialmente non ha funzionato per me, quindi ho estratto un'altra copia del ramo svn in una cartella temporanea. Quindi ho eliminato il PERCORSO causando conflitti e ho eseguito le modifiche. Successivamente sono tornato alla mia copia originale ed ho eseguito questo comando. Ha funzionato con il messaggio "Risolto stato conflittuale del PERCORSO" Funziona, grazie :)
Durin

La mia comprensione è che non avrebbe avuto importanza se l'originale fosse stato eliminato o meno nel repository, perché "risolvi" funziona solo sulla copia di lavoro.
govi,

soluzione perfetta per me
Sergio Álvarez,

20

Ho appena avuto lo stesso problema e l'ho scoperto

$ svn revert foo bar

problema risolto.

la risoluzione svn non ha funzionato per me:

$ 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 non hai apportato modifiche all'interno della directory in conflitto, puoi anche rm -rf conflicts_in_here/e poi svn up. Questo ha funzionato almeno per me.


1

È possibile forzare il ripristino della directory locale in svn.

 svn revert -R your_local_path

Grazie, mi ha anche aiutato a risolvere A + C path/to/dire> local dir edit, incoming dir delete or move upon update
RAM237,

0

Quindi puoi semplicemente ripristinare il file che hai eliminato ma ricorda, se stai lavorando su qualsiasi tipo di progetto con un file di progetto impostato (come iOS), il ripristino del file lo aggiungerà alla struttura della cartella di sistema ma non alla struttura del file di progetto. in questo caso potrebbero essere necessari passaggi aggiuntivi


0

Questo problema si verifica spesso quando proviamo a unire le modifiche di un altro ramo da una directory errata.

Ex:

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

Un conflitto che viene generato durante la sua esecuzione è:

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

E quando si seleziona q per uscire dalla risoluzione , si ottiene lo stato come:

 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

il che significa chiaramente che l'unione contiene modifiche relative a Branch1_SubDire Branch1_AnotherSubDir, e queste cartelle non sono state trovate all'interno Branch1_SubDir(ovviamente una directory non può essere all'interno di se stessa).

Come evitare questo problema in primo luogo:

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

La soluzione più semplice per questo problema che ha funzionato per me:

svn revert -R .
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.