Jak rozwiązać komunikat „edycja lokalna, przychodzące usunięcie po aktualizacji”

293

Kiedy to zrobię svn status ., otrzymuję to:

!     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

w zasadzie te pliki nie powinny znajdować się w repozytorium. Deweloper je usunął. Potem myślę, że svn rm ...przez pomyłkę zrobiłem później (powinienem to zrobić svn update .).

Więc teraz, kiedy to robię svn status ., otrzymuję te komunikaty o konflikcie drzew.

Znalazłem tutaj dokument , ale nie jestem pewien, jak go „scalić” zgodnie z dokumentem.

Jak się ich pozbyć?

Myślę, że moja kopia robocza jest zsynchronizowana z repozytorium. Nie wiem, dlaczego te komunikaty są wyświetlane. Pliki te należy usunąć i są one usuwane o ile wiem wszędzie. Próbowałem svn update .i svn revert .nadal otrzymuję tę wiadomość, kiedy to robię svn status ..

Xah Lee
źródło
1
Odpowiedź lesmana działa również dla przesłania"local missing or deleted or moved away, incoming dir edit upon merge"
Warlike Chimpanzee

Odpowiedzi:

434

Krótka wersja:

$ 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

Jeśli konflikt jest o katalogi zamiast plików, a następnie zastąpić touchz mkdiri rmz rm -r.


Uwaga: ta sama procedura działa również w następującej sytuacji:

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

Długa wersja:

Dzieje się tak, gdy edytujesz plik, gdy ktoś inny go usunął i zatwierdził jako pierwszy. Jako dobry obywatel svn dokonujesz aktualizacji przed zatwierdzeniem. Teraz masz konflikt. Uświadomienie sobie, że usunięcie pliku jest właściwą rzeczą do usunięcia pliku z kopii roboczej. Zamiast zawartości svn teraz narzeka, że ​​brakuje plików lokalnych i że istnieje aktualizacja powodująca konflikt, która ostatecznie chce usunąć pliki. Dobra robota svn.

Z svn resolvejakiegokolwiek powodu nie powinien działać, możesz wykonać następujące czynności:

Sytuacja początkowa: brakuje plików lokalnych, aktualizacja powoduje konflikt.

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

Odtwórz pliki powodujące konflikt:

$ touch foo bar

Jeśli konflikt jest o katalogach następnie zastąpić touchz mkdir.

Nowa sytuacja: lokalne pliki, które zostaną dodane do repozytorium (tak, svn, cokolwiek powiesz), aktualizacja nadal powoduje konflikt.

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

Przywróć pliki do stanu, w którym svn je lubi (co oznacza usunięcie):

$ svn revert foo bar

Nowa sytuacja: lokalne pliki nie są znane svn, aktualizacja nie jest już w konflikcie.

$ svn st
?       foo
?       bar

Teraz możemy usunąć pliki:

$ rm foo bar

Jeśli konflikt jest o katalogach następnie zastąpić rmz rm -r.

SVN nie narzeka już:

$ svn st

Gotowy.

lesmana
źródło
8
Działa to również wtedy, gdy konflikt dotyczy katalogu. Zamiast paska dotykowego foo wykonaj polecenia mkdir foo i mkdir . Cała reszta jest taka sama.
Vipin Johney,
możesz użyć svn st | grep ! | cut -f 7 -d' ' | xargs touchjako jednego
linijki
Pamiętaj, że katalogi również rm -r foo bar(lub rmdir foo barw systemie Windows lub jeśli lubisz system Windows).
próbuje
Ta odpowiedź uratowała moje zdrowie psychiczne. Dziękuję Ci.
Sam
159

Spróbuj rozwiązać konflikt za pomocą

svn resolve --accept=working PATH
zellus
źródło
dzięki. wydaje się to właściwe rozwiązanie. (wcześniej nie wiedziałem o opcji „rozwiązuj”. Oznacziłem ją jako odpowiedź. Chociaż z jakiegoś powodu nie działało dla mnie, prawdopodobnie dlatego, że moje drzewo kopii roboczej zostało uszkodzone lub co tam ... w końcu to rozwiązałem po prostu usuwając
katalog
1
Początkowo nie działało to dla mnie, więc sprawdziłem kolejną kopię gałęzi svn w folderze tymczasowym. Następnie usunąłem ŚCIEŻKĘ powodującą konflikt i zatwierdziłem zmiany. Następnie wróciłem do oryginalnej kopii i uruchomiłem to polecenie. Działa z komunikatem „Rozwiązany konflikt stanu ŚCIEŻKI” Działa, dziękuję :)
Durin
Rozumiem, że nie miałoby to znaczenia, gdyby oryginał został usunięty lub nie w repozytorium, ponieważ „rozwiązanie” działa tylko na kopii roboczej.
govi
idealne rozwiązanie dla mnie
Sergio Álvarez
20

Właśnie dostałem ten sam problem i znalazłem to

$ svn revert foo bar

Rozwiązać problem.

Rozwiązanie SVN nie działało dla mnie:

$ 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
Sligocki
źródło
2

Jeżeli nie dokonano żadnych zmian wewnątrz katalogu skonfliktowanego, można również rm -rf conflicts_in_here/i potem svn up. To zadziałało przynajmniej dla mnie.

Udo
źródło
1

Możesz wymusić przywrócenie katalogu lokalnego do svn.

 svn revert -R your_local_path
Gordon Ma
źródło
Dzięki, pomógł mi również rozwiązać A + C path/to/diri> local dir edit, incoming dir delete or move upon update
RAM237
0

Możesz więc po prostu przywrócić usunięty plik, ale pamiętaj: jeśli pracujesz nad dowolnym typem projektu z ustawionym plikiem projektu (np. IOS), przywrócenie pliku spowoduje dodanie go do struktury folderów systemowych, ale nie do struktury plików projektu. W takim przypadku mogą być wymagane dodatkowe kroki

CWineland
źródło
0

Ten problem często występuje, gdy próbujemy scalić inne zmiany gałęzi z niewłaściwego katalogu.

Dawny:

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

Konflikt, który zostanie rzucony podczas jego wykonania, to:

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

A gdy wybierzesz q, aby wyjść z rozdzielczości , otrzymasz status:

 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

co wyraźnie oznacza, że ​​scalanie zawiera zmiany związane z Branch1_SubDiri Branch1_AnotherSubDir, i nie można było znaleźć tych folderów Branch1_SubDir(oczywiście katalog nie może znajdować się w samym sobie).

Jak uniknąć tego problemu na pierwszym miejscu:

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

Najprostszą tego problemu, który pracował dla mnie:

svn revert -R .
Saurav Sahu
źródło